diff options
Diffstat (limited to 'p/haskell-edison/debian/mk-haskell-depends')
| -rwxr-xr-x | p/haskell-edison/debian/mk-haskell-depends | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/p/haskell-edison/debian/mk-haskell-depends b/p/haskell-edison/debian/mk-haskell-depends new file mode 100755 index 000000000..6a1aa0cfe --- /dev/null +++ b/p/haskell-edison/debian/mk-haskell-depends @@ -0,0 +1,250 @@ +#! /bin/sh +# +# Determine package dependencies from installed-pkg-config file +# +# Copyright (C) 2006 Arjan Oosting <arjan@debian.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of either: +# +# 1) The terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# 2) BSD 3-clause license. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# * The names of contributors may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -e + +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/-[^-]*$/+/'` + 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.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 +} + +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 + +for pkg in `dh_listpackages $args`; do + sfile=debian/$pkg.substvars + touch $sfile + + case "$pkg" in + libghc6-*-dev|libghc6-*-prof) + config=`find_config_for_ghc6 $pkg` + if [ -f "$config" ] ; then + files="$files $config" + fi + if [ -z "$files" ] ; then + echo "No installed package description files can not be found" >&2 + exit 1 + fi + grep -v ^haskell:Depends $sfile > $sfile.tmp || true + case "$pkg" in + libghc6-*-dev) + echo "haskell:Depends=`depends_for_ghc6 $files`" >> $sfile.tmp + ;; + libghc6-*-prof) + echo "haskell:Depends=`depends_for_ghc6_prof $files`" >> $sfile.tmp + ;; + esac + mv $sfile.tmp $sfile + ;; + *) + ;; + esac +done |
