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
openSUSE Build Service is sponsored by