File ghc-glib.spec of Package ghc-glib

#
# spec file for package ghc-glib
#
# Copyright (c) 2025 SUSE LLC
#
# 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
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global pkg_name glib
%global pkgver %{pkg_name}-%{version}
Name:           ghc-%{pkg_name}
Version:        0.13.12.0
Release:        0
Summary:        Binding to the GLIB library for Gtk2Hs
License:        LGPL-2.1-only
URL:            https://hackage.haskell.org/package/%{pkg_name}
Source0:        https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
BuildRequires:  ghc-Cabal-devel
BuildRequires:  ghc-Cabal-prof
BuildRequires:  ghc-base-devel
BuildRequires:  ghc-base-prof
BuildRequires:  ghc-bytestring-devel
BuildRequires:  ghc-bytestring-prof
BuildRequires:  ghc-containers-devel
BuildRequires:  ghc-containers-prof
BuildRequires:  ghc-gtk2hs-buildtools-devel
BuildRequires:  ghc-gtk2hs-buildtools-prof
BuildRequires:  ghc-rpm-macros
BuildRequires:  ghc-text-devel
BuildRequires:  ghc-text-prof
BuildRequires:  ghc-utf8-string-devel
BuildRequires:  ghc-utf8-string-prof
BuildRequires:  pkgconfig
BuildRequires:  pkgconfig(glib-2.0)
BuildRequires:  pkgconfig(gobject-2.0)
ExcludeArch:    %{ix86}

%description
GLib is a collection of C data structures and utility functions for the GObject
system, main loop implementation, for strings and common data structures
dealing with Unicode. This package only binds as much functionality as required
to support the packages that wrap libraries that are themselves based on GLib.

%package devel
Summary:        Haskell %{pkg_name} library development files
Requires:       %{name} = %{version}-%{release}
Requires:       ghc-compiler = %{ghc_version}
Requires:       pkgconfig
Requires:       pkgconfig(glib-2.0)
Requires:       pkgconfig(gobject-2.0)
Requires(post): ghc-compiler = %{ghc_version}
Requires(postun): ghc-compiler = %{ghc_version}

%description devel
This package provides the Haskell %{pkg_name} library development files.

%package -n ghc-%{pkg_name}-doc
Summary:        Haskell %{pkg_name} library documentation
Requires:       ghc-filesystem
BuildArch:      noarch

%description -n ghc-%{pkg_name}-doc
This package provides the Haskell %{pkg_name} library documentation.

%package -n ghc-%{pkg_name}-prof
Summary:        Haskell %{pkg_name} profiling library
Requires:       ghc-%{pkg_name}-devel = %{version}-%{release}
Supplements:    (ghc-%{pkg_name}-devel and ghc-prof)

%description -n ghc-%{pkg_name}-prof
This package provides the Haskell %{pkg_name} profiling library.

%prep
%autosetup -n %{pkg_name}-%{version}

# Create a tiny ghc wrapper early in %prep so that any automatic ghc invocations
# (e.g. rpmbuild compiling Setup.hs) use it. The wrapper strips the
# -fobject-determinism flag which newer build environments may add but is not
# supported by the compiler in this build environment. The wrapper removes the
# flag even when it appears embedded inside other arguments such as
# --ghc-options='-fobject-determinism -fhide-source-paths'.
mkdir -p "$PWD/ghcwrap"
cat > "$PWD/ghcwrap/ghc" <<'EOF'
#!/bin/sh
REAL_GHC=/usr/bin/ghc
argsfile=$(mktemp)
trap 'rm -f "$argsfile"' EXIT
for a in "$@"; do
  # Remove any occurrence of -fobject-determinism inside the argument string
  # and collapse multiple spaces. This handles cases like
  # --ghc-options='-fobject-determinism -fhide-source-paths'.
  cleaned=$(printf '%s' "$a" | sed -e 's/-fobject-determinism//g' -e 's/  */ /g' -e 's/^ *//; s/ *$//')
  # If the cleaned argument is now empty (argument consisted solely of the
  # removed flag), skip it.
  [ -z "$cleaned" ] && continue
  # Emit NUL-separated argument to preserve whitespace
  printf '%s\0' "$cleaned" >> "$argsfile"
done
if [ -s "$argsfile" ]; then
  exec xargs -0 "$REAL_GHC" < "$argsfile"
else
  exec "$REAL_GHC"
fi
EOF
chmod +x "$PWD/ghcwrap/ghc"
export PATH="$PWD/ghcwrap:$PATH"

%build
# Create ghc wrapper also in %build so the build-time configure step uses it.
# Environment changes from %prep do not persist into %build, so recreate the
# wrapper and prepend it to PATH here as well.
mkdir -p "$PWD/ghcwrap"
cat > "$PWD/ghcwrap/ghc" <<'EOF'
#!/bin/sh
REAL_GHC=/usr/bin/ghc
argsfile=$(mktemp)
trap 'rm -f "$argsfile"' EXIT
for a in "$@"; do
  cleaned=$(printf '%s' "$a" | sed -e 's/-fobject-determinism//g' -e 's/  */ /g' -e 's/^ *//; s/ *$//')
  [ -z "$cleaned" ] && continue
  printf '%s\0' "$cleaned" >> "$argsfile"
done
if [ -s "$argsfile" ]; then
  exec xargs -0 "$REAL_GHC" < "$argsfile"
else
  exec "$REAL_GHC"
fi
EOF
chmod +x "$PWD/ghcwrap/ghc"
export PATH="$PWD/ghcwrap:$PATH"

# Use explicit Setup calls to avoid passing ghc options unsupported on some archs
LANG=C.utf8
./Setup configure --prefix=/usr --libdir=/usr/lib64 --docdir=/usr/share/licenses/ghc-glib '\'--libsubdir=$compiler/lib/$pkgid\'' '\'--datasubdir=$pkgid\'' '\'--libexecsubdir=$pkgid\'' --ghc --with-ghc="$PWD/ghcwrap/ghc" --dynlibdir=/usr/lib64/ghc-9.10.2/lib --global --enable-library-profiling --enable-shared --htmldir=/usr/share/doc/packages/ghc-9.10.2/html/libraries/glib-0.13.12.0 --ghc-options=""
./Setup build

%install
LANG=C.utf8
rm -rf %{buildroot}
./Setup copy --destdir=%{buildroot} --prefix=/usr

%post devel
%ghc_pkg_recache

%postun devel
%ghc_pkg_recache

%files -f %{name}.files
%license COPYING

%files devel -f %{name}-devel.files

%files -n ghc-%{pkg_name}-doc -f ghc-%{pkg_name}-doc.files
%license COPYING

%files -n ghc-%{pkg_name}-prof -f ghc-%{pkg_name}-prof.files

%changelog
openSUSE Build Service is sponsored by