742ca58
#!/bin/sh
742ca58
# find rpm provides and requires for Haskell GHC libraries
742ca58
52c1a4c
[ $# -lt 3 ] && echo "Usage: $(basename "$0") [--provides|--requires] %{buildroot} %{ghclibdir} [ghc-<version>]" && exit 1
742ca58
18fd461
set +x -e
0cd6abb
e046298
MODE=$1
f6aa817
BUILDROOT=$2
f6aa817
PKGBASEDIR=$3
f6aa817
if [ -z "$4" ];
b306277
then GHCPREFIX=ghc
f6aa817
else GHCPREFIX=$4
b306277
fi
cfbb8bc
if [ -d "$BUILDROOT$PKGBASEDIR/lib" ];
5136c98
then PKGBASELIB=$PKGBASEDIR/lib
5136c98
else PKGBASELIB=$PKGBASEDIR
5136c98
fi
5136c98
PKGCONFDIR=$PKGBASELIB/package.conf.d
742ca58
f6aa817
GHC_PKG="/usr/lib/rpm/ghc-pkg-wrapper $BUILDROOT$PKGBASEDIR"
b799680
e046298
case $MODE in
5517c1f
    --provides) field=id ;;
5517c1f
    --requires) field=depends ;;
cfbb8bc
    *) echo "$(basename "$0"): Need --provides or --requires"
37fe2b4
       exit 1
37fe2b4
       ;;
2f1663e
esac
2f1663e
742ca58
files=$(cat)
742ca58
cfbb8bc
(
a1abcaa
for i in $files; do
0b6b019
    case $i in
25cfe11
        # exclude rts.conf
f6aa817
        $BUILDROOT$PKGCONFDIR/*-*.conf)
2e806ac
            name=$(grep "^name: " "$i" | sed -e "s/name: *//")
cfbb8bc
            ids=$($GHC_PKG field "$name" "$field" | sed -e "s/\(^\| \)rts\( \|$\)/ /")
25cfe11
            for d in $ids; do
25cfe11
                case $d in
1f6b86f
                    *-*-internal) ;;
b306277
                    *-*) echo "$GHCPREFIX-devel($d)" ;;
25cfe11
                    *) ;;
25cfe11
                esac
25cfe11
            done
37fe2b4
            ;;
e0969bc
        $BUILDROOT$PKGBASELIB/*/libHS*_p.a)
e0969bc
            pkgverhash=$(basename "$(dirname "$i")")
e0969bc
            case $i in
e0969bc
                $BUILDROOT$PKGBASELIB/*-linux-ghc-9.8.*)
e0969bc
                    pkgver=$(echo $pkgverhash | sed -e "s/\(.*\)-.*/\\1/")
e0969bc
                    ;;
e0969bc
                *)  pkgver=$pkgverhash
e0969bc
                    ;;
e0969bc
            esac
e0969bc
            if [ -e "$BUILDROOT$PKGCONFDIR/$pkgverhash.conf" ]; then
0cc0796
                ids=$($GHC_PKG field "$pkgver" "$field" | sed -e "s/\(^\| \)rts\( \|$\)/ /" -e "s/bin-package-db-[^ ]\+//")
0cc0796
            else
0cc0796
                conf=$(basename "$i" | sed -e "s%libHS%$BUILDROOT$PKGCONFDIR/%" -e 's%_p.a%.conf%')
0cc0796
                name=$(grep "^name: " "$conf" | sed -e "s/name: *//")
0cc0796
                ids=$($GHC_PKG field "$name" "$field" | sed -e "s/\(^\| \)rts\( \|$\)/ /" -e "s/bin-package-db-[^ ]\+//")
0cc0796
            fi
25cfe11
            for d in $ids; do
25cfe11
                case $d in
1f6b86f
                    *-*-internal) ;;
8532ad6
                    *-*)
8532ad6
                        case $field in
8532ad6
                            id)
b306277
                                echo "$GHCPREFIX-prof($d)"
8532ad6
                                ;;
8532ad6
                            *)
007effd
                                for f in "$PKGBASELIB"/*/libHS"${d}"_p.a "$BUILDROOT$PKGBASELIB"/*/libHS"${d}"_p.a "$PKGBASELIB"/*/*/libHS"${d}"_p.a "$BUILDROOT$PKGBASELIB"/*/*/libHS"${d}"_p.a; do
e0969bc
                                    if [ -f "$f" ]; then
007effd
                                        echo "$GHCPREFIX-prof($d)"
007effd
                                        break
007effd
                                    fi
007effd
                                done
8532ad6
                                ;;
8532ad6
                        esac
8532ad6
                        ;;
25cfe11
                esac
25cfe11
            done
0b6b019
            ;;
0b6b019
    esac
a1abcaa
done
cfbb8bc
) | sort | uniq