File ghc-transformers-compat.spec of Package ghc-transformers-compat

#
# spec file for package ghc-transformers-compat
#
# Copyright (c) 2023 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 transformers-compat
%global pkgver %{pkg_name}-%{version}
Name:           ghc-%{pkg_name}
Version:        0.7.2
Release:        0
Summary:        A small compatibility shim for the transformers library
License:        BSD-3-Clause
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-base-devel
BuildRequires:  ghc-base-prof
BuildRequires:  ghc-rpm-macros
BuildRequires:  ghc-transformers-devel
BuildRequires:  ghc-transformers-prof
ExcludeArch:    %{ix86}

%description
This package includes backported versions of types that were added to
transformers in transformers 0.3, 0.4, and 0.5 for users who need strict
transformers 0.2 or 0.3 compatibility to run on old versions of the platform,
but also need those types.

Those users should be able to just depend on 'transformers >= 0.2' and
'transformers-compat >= 0.3'.

Note: missing methods are not supplied, but this at least permits the types to
be used.

%package devel
Summary:        Haskell %{pkg_name} library development files
Requires:       %{name} = %{version}-%{release}
Requires:       ghc-compiler = %{ghc_version}
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}
# Patch Setup.lhs to strip any --ghc-options (and specifically -fobject-determinism)
# that may be injected by macros or environment, as GHC >= 9.10 rejects it.
cat > Setup.lhs <<'EOF'
> import Distribution.Simple (defaultMain)
> import System.Environment (getArgs, withArgs)
> import Data.List (isPrefixOf)
>
> main :: IO ()
> main = do
>   args <- getArgs
>   let strip :: [String] -> [String]
>       strip ("--ghc-options":_val:xs) = strip xs
>       strip (a:xs)
>         | "--ghc-options=" `isPrefixOf` a = strip xs
>         | "--ghc-option="  `isPrefixOf` a = strip xs
>         | a == "-fobject-determinism"      = strip xs
>         | otherwise                        = a : strip xs
>       strip [] = []
>   withArgs (strip args) defaultMain
EOF

%build
# Manually build to avoid passing unsupported GHC flag -fobject-determinism
# (GHC >= 9.10 rejects this flag). Replicate the macro's behavior without it.
# Build the Setup program
ghc --make -package Cabal -no-user-package-db -dynamic Setup
# Configure the package
LANG=C.utf8 \
./Setup configure \
  --prefix=%{_prefix} \
  --libdir=%{_libdir} \
  --docdir=/usr/share/licenses/%{name} \
  '--libsubdir=$compiler/lib/$pkgid' \
  '--datasubdir=$pkgid' \
  '--libexecsubdir=$pkgid' \
  --ghc \
  --dynlibdir=%{_libdir}/ghc-%{ghc_version}/lib \
  --global \
  -v \
  --enable-library-profiling \
  --enable-shared \
  --htmldir=/usr/share/doc/packages/ghc-%{ghc_version}/html/libraries/%{pkg_name}-%{version} \
  --global
# Build and generate documentation
./Setup build
./Setup haddock

%install
%ghc_lib_install

%post devel
%ghc_pkg_recache

%postun devel
%ghc_pkg_recache

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

%files devel -f %{name}-devel.files
%doc CHANGELOG.markdown README.markdown

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

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

%changelog
openSUSE Build Service is sponsored by