summaryrefslogtreecommitdiff
path: root/p/haskell-edison/debian/mk-haskell-depends
diff options
context:
space:
mode:
Diffstat (limited to 'p/haskell-edison/debian/mk-haskell-depends')
-rwxr-xr-xp/haskell-edison/debian/mk-haskell-depends250
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