ghc-rpm-macros/ghc-deps.sh
Jens Petersen 7232a81da9 implement rpm ghc-pkg hash metadata for precise automatic library dependency tracking
- add buildroot/ghcpkgbasedir to ghc-deps.sh args
- calculate package and metadata by checking all library files in stdin
- prof depends on devel, devel on base
- update macros.ghc:
  -  rename ghc_requires to ghc_devel_requires
  - drop ghc_doc_requires
  - ghc_reindex_haddock is deprecated and now a no-op
2010-11-23 15:01:27 +10:00

51 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
# find rpm provides and requires for Haskell GHC libraries
# 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 %{buildroot}%{ghcpkgbasedir}
# %define __find_provides /usr/lib/rpm/ghc-deps.sh --provides %{buildroot}%{ghcpkgbasedir}
[ $# -ne 2 ] && echo "Usage: `basename $0` [--provides|--requires] %{buildroot}" && exit 1
MODE=$1
PKGBASEDIR=$2
PKGCONFDIR=$PKGBASEDIR/package.conf.d
files=$(cat)
#set -x
if [ -d "$PKGCONFDIR" ]; then
for i in $files; do
LIB_FILE=$(echo $i | grep /libHS | grep -v /libHSrts)
if [ -n "$LIB_FILE" ]; then
case $LIB_FILE in
*.so) META=ghc ;;
*_p.a) META=ghc-prof SELF=ghc-devel ;;
*.a) META=ghc-devel SELF=ghc ;;
esac
if [ -n "$META" ]; then
case $MODE in
--provides) FIELD=id ;;
--requires) FIELD=depends ;;
*) echo "`basename $0`: Need --provides or --requires" ; exit 1
esac
PKGVER=$(echo $LIB_FILE | sed -e "s%$PKGBASEDIR/*\([^/]\+\)/libHS.*%\1%")
HASHS=$(ghc-pkg -f $PKGCONFDIR field $PKGVER $FIELD | sed -e "s/^$FIELD: \+//")
for i in $HASHS; do
echo $i | sed -e "s/\(.*\)-\(.*\)/$META(\1) = \2/"
done
if [ "$MODE" = "--requires" -a -n "$SELF" ]; then
HASHS=$(ghc-pkg -f $PKGCONFDIR field $PKGVER id | sed -e "s/^id: \+//")
for i in $HASHS; do
echo $i | sed -e "s/\(.*\)-\(.*\)/$SELF(\1) = \2/"
done
fi
fi
fi
done
fi
echo $files | tr [:blank:] '\n' | /usr/lib/rpm/rpmdeps $MODE