File efl.spec of Package efl
#
# spec file for package efl
#
# Copyright (c) 2026 xaphir
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# temporary license header above specifies otherwise).
#
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
# ──────────────────────────────────────────────────────────────────
# Build conditionals — BEFORE Name: so they're available everywhere
# %%bcond_without foo → enabled by default (--without foo disables)
# %%bcond_with foo → disabled by default (--with foo enables)
# ──────────────────────────────────────────────────────────────────
%bcond_without drm # DRM/KMS output (default: on)
%bcond_without fb # Framebuffer output (default: on)
%bcond_without gstreamer # GStreamer emotion backend (default: on)
%bcond_without wayland # Wayland client/compositor support (default: on)
%bcond_with avahi # Avahi/mDNS support (default: off)
%bcond_with examples # Build examples (default: off)
%bcond_with physics # Bullet physics for ephysics (default: off)
%bcond_with tslib # Touchscreen support (default: off)
%bcond_with tests # Run test suite (default: off — requires display server)
# ──────────────────────────────────────────────────────────────────
# PREAMBLE — spec-cleaner canonical ordering
# ──────────────────────────────────────────────────────────────────
Name: efl
Version: @SERVICE@
Release: 0
Summary: Enlightenment Foundation Libraries for Wayland compositing
License: BSD-2-Clause AND LGPL-2.1-only AND Zlib
%if 0%{?suse_version}
Group: System/Libraries
%endif
URL: https://git.enlightenment.org/enlightenment/efl
Source0: %{name}-%{version}.tar.xz
# PATCH-FIX-OPENSUSE: drop SCIM input method (not used on modern desktops)
Patch: efl_scim.patch
# PATCH-FIX-UPSTREAM: fix wayland-util.h include failure in protocol build
# wayland_protocol static_library missing dependencies: wayland_client
Patch: fix-wayland-protocol-deps.patch
# ──────────────────────────────────────────────────────────────────
# BUILD DEPENDENCIES
# Prefer pkgconfig() for libraries with .pc files — distro-portable.
# Package names for tools, compilers, and packages without .pc files.
# Sorted alphabetically per spec-cleaner convention.
# One dependency per line for clean diffs.
# ──────────────────────────────────────────────────────────────────
BuildRequires: gcc-c++
BuildRequires: gettext-devel
BuildRequires: giflib-devel
BuildRequires: hicolor-icon-theme
BuildRequires: libjpeg-devel
BuildRequires: libraw-devel
BuildRequires: libspectre-devel
BuildRequires: luajit-devel
BuildRequires: meson >= 0.60
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(fribidi)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(harfbuzz)
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(libexif)
BuildRequires: pkgconfig(libopenjp2)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(librsvg-2.0)
BuildRequires: pkgconfig(libtiff-4)
BuildRequires: pkgconfig(libwebp)
BuildRequires: pkgconfig(mount)
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(pixman-1)
BuildRequires: pkgconfig(sndfile)
BuildRequires: pkgconfig(zlib)
# X11 dependencies (required — EFL needs both X11 + Wayland per upstream)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xdmcp)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xinerama)
BuildRequires: pkgconfig(xkbcommon-x11)
BuildRequires: pkgconfig(xkbfile)
BuildRequires: pkgconfig(xp)
BuildRequires: pkgconfig(xproto)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xscrnsaver)
BuildRequires: pkgconfig(xtst)
# Wayland + DRM dependencies (AMD Wayland compositor stack)
%if %{with wayland}
BuildRequires: pkgconfig(wayland-client) >= 1.11.0
BuildRequires: pkgconfig(wayland-cursor) >= 1.11.0
BuildRequires: pkgconfig(wayland-egl)
BuildRequires: pkgconfig(wayland-protocols) >= 1.10
BuildRequires: pkgconfig(wayland-scanner) >= 1.11.0
BuildRequires: pkgconfig(wayland-server) >= 1.11.0
BuildRequires: pkgconfig(xkbcommon)
%endif
%if %{with drm}
BuildRequires: pkgconfig(egl)
BuildRequires: pkgconfig(gbm)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(glesv2)
BuildRequires: pkgconfig(libdrm) >= 2.4
BuildRequires: pkgconfig(libinput) >= 0.6.0
BuildRequires: pkgconfig(libudev)
%endif
# systemd integration
BuildRequires: pkgconfig(libsystemd)
BuildRequires: systemd-rpm-macros
# GStreamer for emotion video playback
%if %{with gstreamer}
BuildRequires: pkgconfig(gstreamer-1.0)
BuildRequires: pkgconfig(gstreamer-plugins-base-1.0)
%endif
# Poppler for PDF rendering in evas generic loaders
%if 0%{?is_opensuse}
BuildRequires: libpoppler-devel
%endif
# Bullet physics (disabled by default — not needed for compositor)
%if %{with physics}
BuildRequires: pkgconfig(bullet) >= 2.80
%endif
# Test framework
%if %{with tests}
BuildRequires: pkgconfig(check)
%endif
# openSUSE-specific build tools
%if 0%{?suse_version}
BuildRequires: fdupes
BuildRequires: update-desktop-files
%endif
# ──────────────────────────────────────────────────────────────────
# RUNTIME DEPENDENCIES
# Do NOT duplicate automatic shared-library deps detected by RPM.
# Only declare deps RPM cannot auto-detect.
# ──────────────────────────────────────────────────────────────────
Recommends: %{name}-lang
%{?systemd_requires}
# ──────────────────────────────────────────────────────────────────
# PROVIDES / OBSOLETES — transition from legacy split packages
# EFL consolidated formerly-separate libraries into a single build.
# These allows packages with old-style deps to resolve.
# ──────────────────────────────────────────────────────────────────
Provides: ecore = %{version}
Obsoletes: ecore < %{version}
Provides: edje = %{version}
Obsoletes: edje < %{version}
Provides: edje-utils = %{version}
Obsoletes: edje-utils < %{version}
Provides: eet = %{version}
Obsoletes: eet < %{version}
Provides: eeze = %{version}
Obsoletes: eeze < %{version}
Provides: efreet = %{version}
Obsoletes: efreet < %{version}
Provides: eina = %{version}
Obsoletes: eina < %{version}
Provides: elementary = %{version}
Obsoletes: elementary < %{version}
Provides: embryo = %{version}
Obsoletes: embryo < %{version}
Provides: emotion = %{version}
Obsoletes: emotion < %{version}
Provides: ethumb = %{version}
Obsoletes: ethumb < %{version}
Provides: evas = %{version}
Obsoletes: evas < %{version}
%description
Enlightenment Foundation Libraries (EFL) built for AMD Wayland compositing.
Includes ecore_wl2, ecore_drm2, elput, and evas gl_drm engine for
hardware-accelerated DRM/KMS rendering via Mesa radeonsi with OpenGL ES + EGL.
X11 support is retained per upstream recommendation — Wayland-only output
is controlled at the Enlightenment compositor level.
%lang_package
# ══════════════════════════════════════════════════════════════════
# SUBPACKAGES
# ══════════════════════════════════════════════════════════════════
# ── Development files ─────────────────────────────────────────────
%package devel
Summary: Development files for EFL
License: BSD-2-Clause AND LGPL-2.1-only AND Zlib
Requires: %{name} = %{version}
Requires: giflib-devel
Requires: luajit-devel
Requires: pkgconfig(dbus-1)
Requires: pkgconfig(egl)
Requires: pkgconfig(fontconfig)
Requires: pkgconfig(freetype2)
Requires: pkgconfig(fribidi)
Requires: pkgconfig(glesv2)
Requires: pkgconfig(glib-2.0)
Requires: pkgconfig(harfbuzz)
Requires: pkgconfig(libcurl)
Requires: pkgconfig(libpng)
Requires: pkgconfig(libpulse)
Requires: pkgconfig(libudev)
Requires: pkgconfig(openssl)
Requires: pkgconfig(pixman-1)
Requires: pkgconfig(sndfile)
Requires: pkgconfig(x11)
Requires: pkgconfig(xcomposite)
Requires: pkgconfig(xcursor)
Requires: pkgconfig(xdmcp)
Requires: pkgconfig(xext)
Requires: pkgconfig(xi)
Requires: pkgconfig(xinerama)
Requires: pkgconfig(xp)
Requires: pkgconfig(xproto)
Requires: pkgconfig(xrandr)
Requires: pkgconfig(xscrnsaver)
Requires: pkgconfig(xtst)
Requires: pkgconfig(zlib)
%if %{with gstreamer}
Requires: pkgconfig(gstreamer-1.0)
Requires: pkgconfig(gstreamer-plugins-base-1.0)
%endif
# Transition provides for legacy -devel package names
Provides: ecore-devel = %{version}
Obsoletes: ecore-devel < %{version}
Provides: edje-devel = %{version}
Obsoletes: edje-devel < %{version}
Provides: eet-devel = %{version}
Obsoletes: eet-devel < %{version}
Provides: eeze-devel = %{version}
Obsoletes: eeze-devel < %{version}
Provides: efreet-devel = %{version}
Obsoletes: efreet-devel < %{version}
Provides: eina-devel = %{version}
Obsoletes: eina-devel < %{version}
Provides: eio-devel = %{version}
Obsoletes: eio-devel < %{version}
Provides: elementary-devel = %{version}
Obsoletes: elementary-devel < %{version}
Provides: embryo-devel = %{version}
Obsoletes: embryo-devel < %{version}
Provides: emotion-devel = %{version}
Obsoletes: emotion-devel < %{version}
Provides: eo-devel = %{version}
Obsoletes: eo-devel < %{version}
Provides: ethumb-devel = %{version}
Obsoletes: ethumb-devel < %{version}
Provides: evas-devel = %{version}
Obsoletes: evas-devel < %{version}
%description devel
Headers, pkgconfig files, and CMake modules for development with EFL.
Includes Wayland and DRM development headers (ecore-wl2, ecore-drm2, elput).
# ── Evas generic loaders ────────────────────────────────────────
%package -n evas-generic-loaders
Summary: Generic loaders for Evas (PDF, PS, RAW, video)
License: GPL-2.0-or-later
%description -n evas-generic-loaders
Generic loaders allowing Evas to open XCF, PDF, PS, RAW,
and video formats (MPG/AVI/OGV/MOV/MKV/WMV).
# ── Enlightenment themes ────────────────────────────────────────
%package -n enlightenment-theme-upstream
Version: 0.21.0
Release: 0
Summary: Default Enlightenment theme
License: BSD-2-Clause AND LGPL-2.1-only
Conflicts: enlightenment-theme-dft
Provides: enlightenment-theme = 0.1
Provides: enlightenment-theme-dft
%description -n enlightenment-theme-upstream
Default upstream theme for Enlightenment desktop.
%package -n enlightenment-theme-Flat
Version: 0.21.0
Release: 0
Summary: Flat theme for Enlightenment
License: BSD-2-Clause AND LGPL-2.1-only
Provides: enlightenment-theme
Recommends: enlightenment-x-Flat-icon-theme
%description -n enlightenment-theme-Flat
The Flat theme for Enlightenment desktop.
%package -n enlightenment-x-Flat-icon-theme
Version: 0.21.0
Release: 0
Summary: Flat icon theme for Enlightenment
License: GPL-3.0-only
%description -n enlightenment-x-Flat-icon-theme
Freedesktop.org compatible icon theme matching the Enlightenment Flat theme.
# ── Test suite ───────────────────────────────────────────────────
%package testsuite
Summary: EFL test suite
License: BSD-2-Clause AND LGPL-2.1-only AND Zlib
Requires: %{name} = %{version}
%description testsuite
Test suite for the Enlightenment Foundation Libraries.
# ══════════════════════════════════════════════════════════════════
# BUILD SECTIONS
# ══════════════════════════════════════════════════════════════════
%prep
%autosetup -p1
%build
# EFL has systemic missing wayland-client dependency declarations across
# multiple meson build targets. Our fix-wayland-protocol-deps.patch fixes the
# wayland_protocol target specifically, but other targets (elm_prefs_cc,
# efl_canvas_wl, etc.) also include Ecore_Wl2.h → wayland-client.h without
# proper meson dependencies. Until upstream fixes all affected targets,
# the global INCLUDEDIR injection is necessary.
INCLUDEDIR="-I$(pkg-config --variable=includedir wayland-server)"
INCLUDEDIR+=" -I$(pkg-config --variable=includedir xkbcommon)"
INCLUDEDIR+=" -I$(pkg-config --variable=includedir libinput)"
# EFL intentionally compares string pointers in many places; suppress warning
export CFLAGS="%{optflags} -Wno-address $INCLUDEDIR -std=gnu11"
%meson \
-Davahi=%{?with_avahi:true}%{!?with_avahi:false} \
-Dbuild-examples=%{?with_examples:true}%{!?with_examples:false} \
-Dbuild-tests=%{?with_tests:true}%{!?with_tests:false} \
-Ddrm=%{?with_drm:true}%{!?with_drm:false} \
-Ddrm-deprecated=false \
-Delua=false \
-Dfb=%{?with_fb:true}%{!?with_fb:false} \
-Dfontconfig=true \
-Dfribidi=true \
-Dharfbuzz=true \
-Dlua-interpreter=luajit \
-Dnetwork-backend=none \
-Dopengl=es-egl \
-Dphysics=%{?with_physics:true}%{!?with_physics:false} \
-Dsystemd=true \
-Dtslib=%{?with_tslib:true}%{!?with_tslib:false} \
-Dwl=%{?with_wayland:true}%{!?with_wayland:false} \
-Dwl-deprecated=false \
-Dxinput22=true
%meson_build
%install
%meson_install
# Remove suid binary (not needed on Linux)
rm -f %{buildroot}%{_bindir}/eeze_scanner
# Create Flat theme from default
cp %{buildroot}%{_datadir}/elementary/themes/default.edj \
%{buildroot}%{_datadir}/elementary/themes/Flat.edj
# Create Flat icon theme directory
mv %{buildroot}%{_datadir}/icons/Enlightenment-X \
%{buildroot}%{_datadir}/icons/Enlightenment-X-Flat
touch %{buildroot}%{_datadir}/icons/Enlightenment-X-Flat/icon-theme.cache
# Remove libtool archives — NEVER ship .la files
find %{buildroot} -name '*.la' -delete
# Remove elua data (elua disabled but meson may still install)
rm -rf %{buildroot}%{_datadir}/elua
# Fix permissions on gdb helpers
chmod 0644 %{buildroot}%{_datadir}/eo/gdb/eo_gdb.py
%if 0%{?suse_version}
%fdupes -s %{buildroot}%{_datadir}/icons/Enlightenment-X-Flat
%fdupes -s %{buildroot}%{_datadir}/%{name}/examples
%endif
%find_lang %{name}
# ══════════════════════════════════════════════════════════════════
# TEST SUITE
# ══════════════════════════════════════════════════════════════════
%if %{with tests}
%check
%meson_test
%endif
# ══════════════════════════════════════════════════════════════════
# SCRIPTLETS
# ══════════════════════════════════════════════════════════════════
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
# ══════════════════════════════════════════════════════════════════
# FILES SECTIONS
# ══════════════════════════════════════════════════════════════════
# ── Main package ──────────────────────────────────────────────────
%if 0%{?suse_version}
%files
%else
%files -f %{name}.lang
%endif
%license COPYING
%doc AUTHORS
%exclude %{_bindir}/elementary_codegen
%exclude %{_bindir}/elementary_test
%exclude %{_libdir}/evas/utils/
%exclude %{_libdir}/libeo_dbg.so.*
%exclude %{_datadir}/ecore_x/checkme
%exclude %{_datadir}/evas/checkme
%exclude %{_datadir}/elementary/themes/*
%{_bindir}/*
%dir %{_libdir}/ecore
%{_libdir}/ecore/
%dir %{_libdir}/ecore_con
%{_libdir}/ecore_con/
%dir %{_libdir}/ecore_evas
%{_libdir}/ecore_evas/
%dir %{_libdir}/ecore_imf
%{_libdir}/ecore_imf/
%dir %{_libdir}/ecore_wl2
%{_libdir}/ecore_wl2/
%dir %{_libdir}/edje
%{_libdir}/edje/
%dir %{_libdir}/eeze
%{_libdir}/eeze/
%dir %{_libdir}/efreet
%{_libdir}/efreet/
%dir %{_libdir}/elementary
%{_libdir}/elementary/
%dir %{_libdir}/emotion
%{_libdir}/emotion/
%dir %{_libdir}/ethumb
%{_libdir}/ethumb/
%dir %{_libdir}/ethumb_client
%{_libdir}/ethumb_client/
%dir %{_libdir}/evas
%{_libdir}/evas/
%{_libdir}/lib*.so.*
%{_datadir}/applications/*.desktop
%{_datadir}/dbus-1/
%{_datadir}/ecore/
%{_datadir}/ecore_x/
%{_datadir}/edje/
%{_datadir}/elementary/
%{_datadir}/embryo/
%{_datadir}/emotion/
%{_datadir}/eo/
%{_datadir}/eolian/
%{_datadir}/ethumb/
%{_datadir}/evas/
%{_datadir}/exactness/
%{_datadir}/icons/hicolor/
%{_datadir}/mime/packages/edje.xml
%{_userunitdir}/ethumb.service
%if 0%{?suse_version}
%files lang -f %{name}.lang
%endif
# ── Development files ─────────────────────────────────────────────
%files devel
%license COPYING
%{_bindir}/elementary_codegen
%{_bindir}/elementary_test
%{_libdir}/lib*.so
%{_libdir}/libeo_dbg.so.*
%{_libdir}/pkgconfig/*
%{_libdir}/cmake/
%{_includedir}/efl-1/
%{_includedir}/efl-canvas-wl-1/
%{_includedir}/ecore-1/
%{_includedir}/ecore-audio-1/
%{_includedir}/ecore-con-1/
%{_includedir}/ecore-drm2-1/
%{_includedir}/ecore-evas-1/
%{_includedir}/ecore-fb-1/
%{_includedir}/ecore-file-1/
%{_includedir}/ecore-imf-1/
%{_includedir}/ecore-imf-evas-1/
%{_includedir}/ecore-input-1/
%{_includedir}/ecore-input-evas-1/
%{_includedir}/ecore-ipc-1/
%{_includedir}/ecore-wl2-1/
%{_includedir}/ecore-x-1/
%{_includedir}/edje-1/
%{_includedir}/eet-1/
%{_includedir}/eeze-1/
%{_includedir}/efreet-1/
%{_includedir}/eina-1/
%{_includedir}/eio-1/
%{_includedir}/eldbus-1/
%{_includedir}/elementary-1/
%{_includedir}/elput-1/
%{_includedir}/embryo-1/
%{_includedir}/emile-1/
%{_includedir}/emotion-1/
%{_includedir}/eo-1/
%{_includedir}/eolian-1/
%{_includedir}/ethumb-1/
%{_includedir}/ethumb-client-1/
%{_includedir}/evas-1/
# C++ bindings headers
%{_includedir}/ecore-cxx-1/
%{_includedir}/edje-cxx-1/
%{_includedir}/eet-cxx-1/
%{_includedir}/efl-cxx-1/
%{_includedir}/eina-cxx-1/
%{_includedir}/eio-cxx-1/
%{_includedir}/eldbus-cxx-1/
%{_includedir}/elementary-cxx-1/
%{_includedir}/eo-cxx-1/
%{_includedir}/eolian-cxx-1/
%{_includedir}/evas-cxx-1/
%{_datadir}/ecore_x/checkme
%{_datadir}/ecore_con/
%{_datadir}/gdb/
%{_datadir}/mime/packages/evas.xml
# ── Evas generic loaders ────────────────────────────────────────
%files -n evas-generic-loaders
%{_libdir}/evas/utils/
# ── Themes ───────────────────────────────────────────────────────
%files -n enlightenment-theme-upstream
%{_datadir}/elementary/themes/default.edj
%files -n enlightenment-theme-Flat
%{_datadir}/elementary/themes/Flat.edj
%files -n enlightenment-x-Flat-icon-theme
%{_datadir}/icons/Enlightenment-X-Flat/
%ghost %{_datadir}/icons/Enlightenment-X-Flat/icon-theme.cache
# ── Test suite ───────────────────────────────────────────────────
%files testsuite
%{_datadir}/ecore_imf/
%{_datadir}/eeze/
%{_datadir}/efreet/
%{_datadir}/ethumb_client/
%changelog