diff options
author | Marco TĂșlio Gontijo e Silva <marcot@holoscopio.com> | 2009-03-23 13:23:21 +0000 |
---|---|---|
committer | Marco TĂșlio Gontijo e Silva <marcot@holoscopio.com> | 2009-03-23 13:23:21 +0000 |
commit | 1e60857ec2c55371cdff0d66903d9af3c542c75f (patch) | |
tree | c230ac0c59d5e4da039ad2b676c14e08f40fe8c5 /Dh_Haskell.sh | |
parent | 62d6fbb7ee7bd53a9f45acfd5e70fa6873768877 (diff) |
Create Dh_Haskell.sh with common parts of dh_haskell_depends and dh_haskell_shlibdeps.
Diffstat (limited to 'Dh_Haskell.sh')
-rw-r--r-- | Dh_Haskell.sh | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/Dh_Haskell.sh b/Dh_Haskell.sh new file mode 100644 index 0000000..cdd765b --- /dev/null +++ b/Dh_Haskell.sh @@ -0,0 +1,173 @@ +sort_uniq(){ + { + for i in "$@" ; do + echo $i + done + } | sort -u | tr "\n" " " +} + +dependency(){ + local package + local version + local next_upstream_version + package=$1 + version=`dpkg-query --showformat='${Version}' -W $package` + next_upstream_version=`echo $version | sed -e 's/-[^-]*$//' -e 's/$/+/'` + echo "$package (>= $version), $package (<< $next_upstream_version)" +} + +dependencies(){ + local package + local packages + local deps + packages=$@ + for package in `sort_uniq $packages` ; do + deps="$deps, `dependency $package`" + done + + echo $deps | sed -e 's/^,[ ]*//' +} + +providing_package_for_ghc6(){ + local package + local dep + local dir + local dirs + local lib + dep=$1 + dirs=`ghc-pkg6 field $dep library-dirs | cut -d':' -f 2` + lib=`ghc-pkg6 field $dep hs-libraries | sed -e 's|hs-libraries: *\([^ ]*\).*|\1|' ` + for dir in $dirs ; do + if [ -e "${dir}/lib${lib}.a" ] ; then + package=`dpkg-query -S ${dir}/lib${lib}.a | cut -d':' -f 1` || exit $? + continue + fi + done + echo $package +} + +providing_package_for_ghc6_prof(){ + local package + local dep + local dir + local dirs + local lib + dep=$1 + dirs=`ghc-pkg6 field $dep library-dirs | cut -d':' -f 2` + lib=`ghc-pkg6 field $dep hs-libraries | sed -e 's|hs-libraries: *\([^ ]*\).*|\1|' ` + for dir in $dirs ; do + if [ -e "${dir}/lib${lib}_p.a" ] ; then + package=`dpkg-query -S ${dir}/lib${lib}_p.a | cut -d':' -f 1` || exit $? + continue + fi + done + echo $package +} + +cabal_depends(){ + local config + local dep + local depends + local final_depends + until [ -z "$1" ] + do + config=$1 + depends="$depends `grep-dctrl -n -i -s Depends "" $config | tr "," " "`" + shift + done + for dep in `sort_uniq $depends` ; do + # The package is not mentioned in the ignored package list with the same version + # or mentioned without any version in the ignored package list? + if echo " $ignores " | grep -qv " $dep " && + echo " $ignores " | grep -qv " `echo $dep | sed s%-[0-9][.0-9a-zA-Z]*$%%` " ; + then + final_depends="$final_depends $dep" + fi + done + echo $final_depends +} + +depends_for_ghc6(){ + local dep + local packages + for dep in `cabal_depends $@` ; do + packages="$packages `providing_package_for_ghc6 $dep`" + done + + dependencies $packages +} + +depends_for_ghc6_prof(){ + local dep + local packages + for dep in `cabal_depends $@` ; do + packages="$packages `providing_package_for_ghc6_prof $dep`" + done + + dependencies $packages +} + +depends_for_hugs(){ + local version + local upstream_version + version=`dpkg-query --showformat='${Version}' -W hugs` + upstream_version=`echo $version | sed -e 's/-[^-]*$//'` + echo "hugs (>= $upstream_version)" +} + +find_config_for_ghc6(){ + local f + local pkg + pkg=$1 + case "$pkg" in + libghc6-*-prof) + pkg=`echo $pkg | sed -e 's/-prof$/-dev/'` + ;; + *) + ;; + esac + for f in debian/$pkg/usr/lib/haskell-packages/ghc6/lib/*/installed-pkg-config ; do + if [ -f "$f" ] ; then + echo $f + break + fi + done +} + + +if ! [ `which grep-dctrl` > /dev/null ] ; then + echo "grep-dctrl is missing" >&2 + exit 1 +fi + +args= +ignores= +files= +until [ -z "$1" ] +do + case "$1" in + -X*) + pkg=${1##-X} + ignores="$ignores $pkg" + ;; + + --exclude=*) + pkg=${1##--exclude=} + ignores="$ignores $pkg" + ;; + + -*) + args="$args $1" + ;; + *) + if [ -f $1 ] ; then + files="$files $1" + else + echo "Installed package description file $1 can not be found" >&2 + exit 1 + fi + ;; + esac + shift +done + |