[ghc-rpm-macros] add ghc-deps.sh for hash rpm metadata and add ghc_pkg_obsoletes

Jens Petersen petersen at fedoraproject.org
Thu Sep 30 02:23:26 UTC 2010


commit 742ca58b86682acab4be8aa412f7f37aba61ee86
Author: Jens Petersen <petersen at redhat.com>
Date:   Thu Sep 30 12:21:16 2010 +1000

    add ghc-deps.sh for hash rpm metadata and add ghc_pkg_obsoletes
    
    - add ghc-deps.sh for ghc package hash rpm metadata provides and requires
    - turn on hash provides and disable debuginfo by default
    - make shared and hscolour default
    - use without_shared and without_hscolour to disble them
    - add ghc_pkg_obsoletes for obsoleting old packages
    - use ghcpkgbasedir
    - always obsolete -doc packages, but keep -o for now for backward compatibility

 ghc-deps.sh         |   35 +++++++++++++++++++++++++++++++++++
 ghc-rpm-macros.ghc  |   39 +++++++++++++++++++++++----------------
 ghc-rpm-macros.spec |   22 ++++++++++++++++++----
 3 files changed, 76 insertions(+), 20 deletions(-)
---
diff --git a/ghc-deps.sh b/ghc-deps.sh
new file mode 100755
index 0000000..9e2caa0
--- /dev/null
+++ b/ghc-deps.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+# find rpm provides and requires for Haskell GHC libraries
+
+#set -x
+
+# To use add the following lines to spec file:
+#   %define _use_internal_dependency_generator 0
+#   %define __find_requires /usr/lib/rpm/ghc-deps.sh --requires
+#   %define __find_provides /usr/lib/rpm/ghc-deps.sh --provides
+
+[ $# -ne 1 ] && echo "Usage: `basename $0` [--provides|--requires]" && exit 1
+
+MODE=$1
+
+case $MODE in
+    --provides) FIELD=id ;;
+    --requires) FIELD=depends
+esac
+
+files=$(cat)
+
+PKGCONF=$(echo $files | tr [:blank:] '\n' | grep package.conf.d)
+
+if [ -n "$PKGCONF" ]; then
+  CONFDIR=$(dirname $PKGCONF)
+  PKGS=$(ghc-pkg -f $CONFDIR describe '*' | awk '/^name: / {print $2}')
+  for pkg in $PKGS; do
+    HASHS=$(ghc-pkg -f $CONFDIR field $pkg $FIELD | sed -e "s/^$FIELD: \+//")
+    for i in $HASHS; do
+      echo "ghc($i)"
+    done
+  done
+fi
+
+echo $files | tr [:blank:] '\n' | /usr/lib/rpm/rpmdeps $MODE
diff --git a/ghc-rpm-macros.ghc b/ghc-rpm-macros.ghc
index 2f99c79..8a18acd 100644
--- a/ghc-rpm-macros.ghc
+++ b/ghc-rpm-macros.ghc
@@ -3,7 +3,7 @@
 
 # configure
 %cabal_configure \
-%cabal configure --prefix=%{_prefix} --libdir=%{_libdir} --docdir=%{_docdir}/%{name}-%{version} --htmldir=%{ghcdocdir} --libsubdir='$compiler/$pkgid' %{?with_shared:--enable-shared} %{?with_dynamic:--ghc-option=-dynamic}
+%cabal configure --prefix=%{_prefix} --libdir=%{_libdir} --docdir=%{_docdir}/%{name}-%{version} --htmldir=%{ghcdocdir} --libsubdir='$compiler/$pkgid' %{!?without_shared:--enable-shared} %{?with_dynamic:--ghc-option=-dynamic}
 
 # install
 %cabal_install %cabal copy --destdir=${RPM_BUILD_ROOT} -v
@@ -25,16 +25,16 @@ pkgnamever=${pkgname}-%{version} \
 rm -f ${basefile}.files ${basefile}-devel.files ${basefile}-prof.files \
 echo "%defattr(-,root,root,-)" > ${basefile}.files \
 if [ -d "${RPM_BUILD_ROOT}%{_docdir}/%{name}-%{version}" ]; then \
-  %{!?1:echo "%{_docdir}/%{name}-%{version}" >> ${basefile}%{!?with_shared:-devel}.files} %{?1::} \
+  %{!?1:echo "%{_docdir}/%{name}-%{version}" >> ${basefile}%{?without_shared:-devel}.files} %{?1::} \
 fi \
-%if %{with shared} \
+%if 0%{!?without_shared:1} \
 if [ -d "${RPM_BUILD_ROOT}%{ghcpkgdir}" ]; then \
 echo "%dir %{ghcpkgdir}" >> ${basefile}.files \
 echo "%attr(755,root,root) %{ghcpkgdir}/libHS${pkgnamever}-ghc%{ghc_version}.so" >> ${basefile}.files \
 fi \
 %endif \
 echo "%defattr(-,root,root,-)" > ${basefile}-devel.files \
-echo "%{_libdir}/ghc-%{ghc_version}/package.conf.d/${pkgnamever}*.conf" >> ${basefile}-devel.files \
+echo "%{ghcpkgbasedir}/package.conf.d/${pkgnamever}*.conf" >> ${basefile}-devel.files \
 if [ -d "${RPM_BUILD_ROOT}%{ghcpkgdir}" ]; then \
 find ${RPM_BUILD_ROOT}%{ghcpkgdir} -type d | sed "s/^/%dir /" >> ${basefile}-devel.files \
 find ${RPM_BUILD_ROOT}%{ghcpkgdir} ! \\( -type d -o -name "*_p.a" -o -name "*.p_hi" -o -name "libHS*.so" \\) >> ${basefile}-devel.files \
@@ -56,14 +56,14 @@ sed -i -e "s!${RPM_BUILD_ROOT}!!g" ${basefile}.files ${basefile}-devel.files ${b
 # cabal_pkg_conf [pkgname]
 %cabal_pkg_conf \
 %cabal register --gen-pkg-config \
-mkdir -p $RPM_BUILD_ROOT%{_libdir}/ghc-%{ghc_version}/package.conf.d \
-install --mode=0644 %{?1}%{!?1:%{pkg_name}}-%{version}.conf $RPM_BUILD_ROOT%{_libdir}/ghc-%{ghc_version}/package.conf.d
+mkdir -p $RPM_BUILD_ROOT%{ghcpkgbasedir}/package.conf.d \
+install --mode=0644 %{?1}%{!?1:%{pkg_name}}-%{version}.conf $RPM_BUILD_ROOT%{ghcpkgbasedir}/package.conf.d
 
 # devel pkg basic requires
 %ghc_requires Requires:       ghc = %{ghc_version}\
 Requires(post): ghc = %{ghc_version}\
 Requires(postun): ghc = %{ghc_version}\
-%if %{with shared}\
+%if 0%{!?without_shared:1}\
 Requires:       ghc-%{-n:%{-n*}}%{!-n:%{pkg_name}} = %{-v:%{-v*}}%{!-v:%{version}}-%{release}\
 %endif
 
@@ -76,10 +76,10 @@ Requires(postun): ghc-doc = %{ghc_version}
 %ghc_prof_requires Requires:       ghc-prof = %{ghc_version}\
 Requires:       ghc-%{-n:%{-n*}}%{!-n:%{pkg_name}}-devel = %{-v:%{-v*}}%{!-v:%{version}}-%{release}
 
-# ghc_lib_package [-n pkgname] [-c cdepslist] [-h pkgdepslist] [-o obsolete-docver]
+# ghc_lib_package [-n pkgname] [-c cdepslist] [-h pkgdepslist] (-o deprecated no-op)
 %ghc_lib_package(n:c:h:o:)\
-%define ghc_pkg_name %{-n:ghc-%{-n*}}%{!-n:ghc-%{pkg_name}}\
-%if %{with shared}\
+%define ghc_pkg_name ghc-%{-n:%{-n*}}%{!-n:%{pkg_name}}\
+%if 0%{!?without_shared:1}\
 %files -n %{ghc_pkg_name} -f %{ghc_pkg_name}.files\
 %defattr(-,root,root,-)\
 %endif\
@@ -89,7 +89,7 @@ Requires:       ghc-%{-n:%{-n*}}%{!-n:%{pkg_name}}-devel = %{-v:%{-v*}}%{!-v:%{v
 %ghc_package_prof\
 %{nil}
 
-# ghc_binlib_package [-n pkgname] [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-v version] [-o obsolete-docver]
+# ghc_binlib_package [-n pkgname] [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-v version] (-o deprecated no-op)
 %ghc_binlib_package(n:c:h:l:v:o:)\
 %define local_pkg_name %{-n:%{-n*}}%{!-n:%{pkg_name}}\
 %define ghc_pkg_name ghc-%{local_pkg_name}\
@@ -112,8 +112,12 @@ This package provides the shared library.\
 # for docs post and postun
 %ghc_reindex_haddock ( cd %{ghcdocbasedir}/libraries && [ -x "./gen_contents_index" ] && ./gen_contents_index ) || :
 
-# ghc_package_devel [-n pkgname] [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-v version] [-o obsolete-docver]
+# ghc_package_devel [-n pkgname] [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-v version] (-o deprecated no-op)
 %ghc_package_devel(n:c:h:l:v:o:)\
+%global _use_internal_dependency_generator 0\
+%global __find_provides /usr/lib/rpm/ghc-deps.sh --provides\
+#%%global __find_requires /usr/lib/rpm/ghc-deps.sh --requires\
+%global debug_package %{nil}\
 %define local_pkg_name %{-n:%{-n*}}%{!-n:%{pkg_name}}\
 %define ghc_pkg_name ghc-%{local_pkg_name}\
 %package -n %{ghc_pkg_name}-devel\
@@ -127,7 +131,9 @@ Group:          Development/Libraries\
 %{-h:Requires:       %{-h*}}\
 %{!-c:%{?ghc_pkg_c_deps:Requires:       %{ghc_pkg_c_deps}}}\
 %{-c:Requires:       %{-c*}}\
-%{-o:Obsoletes:      %{ghc_pkg_name}-doc < %{-o*}}\
+%{?ghc_pkg_obsoletes:Obsoletes:      %{ghc_pkg_obsoletes}}\
+%{?ghc_pkg_obsoletes:Obsoletes:      %(echo "%{ghc_pkg_obsoletes}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-doc/g")}\
+Obsoletes:      %{ghc_pkg_name}-doc < %{version}-%{release}\
 Provides:       %{ghc_pkg_name}-doc = %{version}-%{release}\
 \
 %description -n %{ghc_pkg_name}-devel\
@@ -157,8 +163,9 @@ Group:          Development/Libraries\
 %{-v:Version:        %{-v*}}\
 %{-l:License:        %{-l*}}\
 %{?ghc_prof_requires}\
-%{!-h:%{?ghc_pkg_deps:Requires:       %(echo %{ghc_pkg_deps} | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-prof/g")}}\
-%{-h:Requires:       %(echo %{-h*} | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-prof/g")}\
+%{!-h:%{?ghc_pkg_deps:Requires:       %(echo "%{ghc_pkg_deps}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-prof/g")}}\
+%{-h:Requires:       %(echo "%{-h*}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-prof/g")}\
+%{?ghc_pkg_obsoletes:Obsoletes:      %(echo "%{ghc_pkg_obsoletes}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-prof/g")}\
 \
 %description -n %{ghc_pkg_name}-prof\
 %{?common_description}%{!?common_description:Haskell %{local_pkg_name} library.}\
@@ -184,7 +191,7 @@ find $RPM_BUILD_ROOT -type f -exec sh -c "file {} | grep -q 'dynamically linked'
 %ghc_lib_build\
 %cabal_configure --ghc -p\
 %cabal build\
-%cabal haddock %{?with_hscolour:--hyperlink-source}
+%cabal haddock %{!?without_hscolour:--hyperlink-source} %{?with_devhelp:--haddock-option=--html-help=devhelp}
 
 # ghc_bin_install
 %ghc_bin_install\
diff --git a/ghc-rpm-macros.spec b/ghc-rpm-macros.spec
index 0827cca..01531b0 100644
--- a/ghc-rpm-macros.spec
+++ b/ghc-rpm-macros.spec
@@ -1,5 +1,5 @@
 Name:		ghc-rpm-macros
-Version:	0.8.1
+Version:	0.9.0
 Release:	1%{?dist}
 Summary:	Macros for building packages for GHC
 
@@ -13,14 +13,15 @@ URL:		https://fedoraproject.org/wiki/Haskell_SIG
 Source0:	ghc-rpm-macros.ghc
 Source1:	COPYING
 Source2:	AUTHORS
+Source3:	ghc-deps.sh
 BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildArch:	noarch
 
 %description
 A set of macros for building GHC packages following the Haskell Guidelines
-of the Haskell SIG. This package probably shouldn't be installed on its own
-as GHC is needed in order to make use of these macros.
+of the Fedora Haskell SIG. This package probably shouldn't be installed on
+its own as GHC is needed in order to make use of these macros.
 
 %prep
 %setup -c -T
@@ -34,7 +35,10 @@ echo no build stage needed
 %install
 rm -rf $RPM_BUILD_ROOT
 mkdir -p ${RPM_BUILD_ROOT}/%{_sysconfdir}/rpm
-cp -p %{SOURCE0} ${RPM_BUILD_ROOT}/%{_sysconfdir}/rpm/macros.ghc
+install -p -m 0644 %{SOURCE0} ${RPM_BUILD_ROOT}/%{_sysconfdir}/rpm/macros.ghc
+
+mkdir -p ${RPM_BUILD_ROOT}/%{_prefix}/lib/rpm
+install -p %{SOURCE3} ${RPM_BUILD_ROOT}/%{_prefix}/lib/rpm
 
 
 %clean
@@ -45,9 +49,19 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root,-)
 %doc COPYING AUTHORS
 %config(noreplace) %{_sysconfdir}/rpm/macros.ghc
+%{_prefix}/lib/rpm
 
 
 %changelog
+* Sat Sep 25 2010 Jens Petersen <petersen at redhat.com> - 0.9.0-1
+- add ghc-deps.sh to add ghc package hash rpm metadata provides and requires
+- turn on hash provides and disable debuginfo by default
+- make shared and hscolour default
+- use without_shared and without_hscolour to disble them
+- add ghc_pkg_obsoletes for obsoleting old packages
+- use ghcpkgbasedir
+- always obsolete -doc packages, but keep -o for now for backward compatibility
+
 * Fri Jul 16 2010 Jens Petersen <petersen at redhat.com> - 0.8.1-1
 - fix ghc_strip_dynlinked when no dynlinked files
 - devel should provide doc also when not obsoleting


More information about the scm-commits mailing list