File ghc-tabular.spec of Package ghc-tabular
#
# spec file for package ghc-tabular
#
# 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 tabular
%global pkgver %{pkg_name}-%{version}
Name: ghc-%{pkg_name}
Version: 0.2.2.8
Release: 0
Summary: Two-dimensional data tables with rendering functions
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
Source1: https://hackage.haskell.org/package/%{pkg_name}-%{version}/revision/1.cabal#/%{pkg_name}.cabal
BuildRequires: ghc-Cabal-devel
BuildRequires: ghc-base-devel
BuildRequires: ghc-base-prof
BuildRequires: ghc-csv-devel
BuildRequires: ghc-csv-prof
BuildRequires: ghc-html-devel
BuildRequires: ghc-html-prof
BuildRequires: ghc-mtl-devel
BuildRequires: ghc-mtl-prof
BuildRequires: ghc-rpm-macros
ExcludeArch: %{ix86}
%description
Tabular provides a Haskell representation of two-dimensional data tables, the
kind that you might find in a spreadsheet or or a research report. It also
comes with some default rendering functions for turning those tables into ASCII
art, simple text with an arbitrary delimiter, CSV, HTML or LaTeX.
Below is an example of the kind of output this library produces. The tabular
package can group rows and columns, each group having one of three separators
(no line, single line, double line) between its members.
> || memtest 1 | memtest 2 || time test | time test 2 >
====++===========+===========++=============+============ > A 1 || hog |
terrible || slow | slower > A 2 || pig | not bad || fast | slowest >
----++-----------+-----------++-------------+------------ > B 1 || good | awful
|| intolerable | bearable > B 2 || better | no chance || crawling | amazing > B
3 || meh | well... || worst ever | ok.
%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}
cp -p %{SOURCE1} %{pkg_name}.cabal
%build
# Use an explicit Setup invocation to avoid passing unsupported ghc flags
# (notably -fobject-determinism) that some GHC builds do not recognize on
# certain architectures (e.g. aarch64). The standard %ghc_lib_build macro
# injects those options; we replicate the necessary steps here without them.
# Create a small ghc wrapper to filter out -fobject-determinism if it is
# injected by any surrounding macros or environment; this avoids failing the
# configure step on archs where GHC does not recognise that flag.
cat > ./ghc <<'EOF'
#!/bin/sh
# Wrapper that removes occurrences of -fobject-determinism from any argument
# (including when embedded in --ghc-options=) and then execs /usr/bin/ghc.
newargs=""
for arg in "$@"; do
# remove the substring -fobject-determinism
newarg=$(printf '%s' "$arg" | sed 's/-fobject-determinism//g')
# trim leading and trailing spaces introduced by removal
newarg=$(printf '%s' "$newarg" | sed -e 's/^ //' -e 's/ $//')
newargs="$newargs \"$newarg\""
done
# set positional parameters to filtered args
eval set -- $newargs
exec /usr/bin/ghc "$@"
EOF
chmod +x ./ghc
# Also create a wrapper for the versioned ghc binary used in some setups
# (for example ghc-9.10.2); the build environment on aarch64 invoked
# ghc-9.10.2 directly which bypassed the plain 'ghc' wrapper. Create a
# second wrapper with the versioned name to ensure the flag is filtered.
cat > ./ghc-9.10.2 <<'EOF'
#!/bin/sh
# Wrapper that removes occurrences of -fobject-determinism from any argument
# and then execs the versioned ghc binary if available.
newargs=""
for arg in "$@"; do
newarg=$(printf '%s' "$arg" | sed 's/-fobject-determinism//g')
newarg=$(printf '%s' "$newarg" | sed -e 's/^ //' -e 's/ $//')
newargs="$newargs \"$newarg\""
done
eval set -- $newargs
exec /usr/bin/ghc-9.10.2 "$@"
EOF
chmod +x ./ghc-9.10.2
# Prepend current directory to PATH so the wrapper is used for subsequent ghc
# invocations.
PATH="$PWD:$PATH"
export PATH
LANG=C.utf8
if [ -f Setup.hs -o -f Setup.lhs ]; then
ghc --make -package Cabal -no-user-package-db -dynamic Setup || true
fi
# Configure without -fobject-determinism; keep -fhide-source-paths
./Setup configure \
--prefix=/usr \
--libdir=/usr/lib64 \
--docdir=/usr/share/licenses/ghc-tabular \
'--libsubdir=$compiler/lib/$pkgid' \
'--datasubdir=$pkgid' \
'--libexecsubdir=$pkgid' \
--ghc \
--dynlibdir=/usr/lib64/ghc-9.10.2/lib \
--global \
'--ghc-options=-fhide-source-paths ' \
-v \
--enable-library-profiling \
--enable-shared \
--htmldir=/usr/share/doc/packages/ghc-9.10.2/html/libraries/tabular-0.2.2.8 \
--global
./Setup build
%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 example
%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