diff options
author | David Fox <dsf@seereason.com> | 2015-03-31 17:19:47 +0000 |
---|---|---|
committer | David Fox <dsf@seereason.com> | 2015-03-31 17:19:47 +0000 |
commit | 7aa37fb1306ab6ac4e5901d90531376ad0d6ef21 (patch) | |
tree | 47f56f2146e206d3f616fb84e8e1d3afdbb88f08 /Dh_Haskell.sh | |
parent | 3eac719074b2bb119f7806331ce359a8ab713ec5 (diff) |
Parameterize the compiler name
Diffstat (limited to 'Dh_Haskell.sh')
-rw-r--r-- | Dh_Haskell.sh | 182 |
1 files changed, 122 insertions, 60 deletions
diff --git a/Dh_Haskell.sh b/Dh_Haskell.sh index 4e56b64..1e1fce6 100644 --- a/Dh_Haskell.sh +++ b/Dh_Haskell.sh @@ -68,6 +68,24 @@ hc_haddock(){ esac } +hc_docdir(){ + hc=$1 + pkgid=$2 + echo "usr/lib/${hc}-doc/haddock/${pkgid}/" +} + +hc_htmldir(){ + hc=$1 + CABAL_PACKAGE=$2 + echo "usr/share/doc/lib${hc}-${CABAL_PACKAGE}-doc/html/" +} + +hc_hoogle(){ + local hc + hc=$1 + echo "/usr/lib/${hc}-doc/hoogle/" +} + strip_hash(){ echo "$1" | sed 's/-................................$//' } @@ -91,7 +109,10 @@ dependency(){ } ghc_pkg_field(){ - ghc-pkg --global field $@ | head -n1 + hc=$1 + pkg=$2 + field=$3 + ${hc}-pkg --global field ${pkg} ${field} | head -n1 } providing_package_for_ghc(){ @@ -100,9 +121,11 @@ providing_package_for_ghc(){ local dir local dirs local lib - dep=`strip_hash $1` - dirs=`ghc_pkg_field $dep library-dirs | grep -i ^library-dirs | cut -d':' -f 2` - lib=`ghc_pkg_field $dep hs-libraries | grep -i ^hs-libraries | sed -e 's|hs-libraries: *\([^ ]*\).*|\1|' ` + local hc + hc=$1 + dep=`strip_hash $2` + dirs=`ghc_pkg_field $hc $dep library-dirs | grep -i ^library-dirs | cut -d':' -f 2` + lib=`ghc_pkg_field $hc $dep hs-libraries | grep -i ^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 $? @@ -118,9 +141,11 @@ providing_package_for_ghc_prof(){ local dir local dirs local lib - dep=`strip_hash $1` - dirs=`ghc_pkg_field $dep library-dirs | grep -i ^library-dirs | cut -d':' -f 2` - lib=`ghc_pkg_field $dep hs-libraries | grep -i ^hs-libraries | sed -e 's|hs-libraries: *\([^ ]*\).*|\1|' ` + local hc + hc=$1 + dep=`strip_hash $2` + dirs=`ghc_pkg_field $hc $dep library-dirs | grep -i ^library-dirs | cut -d':' -f 2` + lib=`ghc_pkg_field $hc $dep hs-libraries | grep -i ^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 $? @@ -166,12 +191,14 @@ cabal_depends(){ } hashed_dependency(){ + local hc local type local pkgid local virpkg - type=$1 - pkgid=$2 - virtual_pkg=`package_id_to_virtual_package $type $pkgid` + hc=$1 + type=$2 + pkgid=$3 + virtual_pkg=`package_id_to_virtual_package "${hc}" "$type" $pkgid` # As a transition measure, check if dpkg knows about this virtual package if dpkg-query -W $virtual_pkg >/dev/null 2>/dev/null; then @@ -183,11 +210,14 @@ depends_for_ghc(){ local dep local packages local pkgid + local hc + hc=$1 + shift for pkgid in `cabal_depends $@` ; do - dep=`hashed_dependency dev $pkgid` + dep=`hashed_dependency ${hc} dev $pkgid` if [ -z "$dep" ] then - pkg=`providing_package_for_ghc $pkgid` + pkg=`providing_package_for_ghc $hc $pkgid` if [ -n "$pkg" ] then dep=`dependency $pkg` @@ -207,11 +237,14 @@ depends_for_ghc_prof(){ local dep local packages local pkgid + local hc + hc=$1 + shift for pkgid in `cabal_depends $@` ; do - dep=`hashed_dependency prof $pkgid` + dep=`hashed_dependency ${hc} prof $pkgid` if [ -z "$dep" ] then - pkg=`providing_package_for_ghc_prof $pkgid` + pkg=`providing_package_for_ghc_prof $hc $pkgid` if [ -n "$pkg" ] then dep=`dependency $pkg` @@ -228,29 +261,39 @@ depends_for_ghc_prof(){ } provides_for_ghc(){ + local hc local dep local packages + hc=$1 + shift for package_id in `cabal_package_ids $@` ; do - packages="$packages, `package_id_to_virtual_package dev $package_id`" + packages="$packages, `package_id_to_virtual_package "${hc}" dev $package_id`" done echo $packages | sed -e 's/^,[ ]*//' } provides_for_ghc_prof(){ + local hc local dep local packages + hc=$1 + shift for package_id in `cabal_package_ids $@` ; do - packages="$packages, `package_id_to_virtual_package prof $package_id`" + packages="$packages, `package_id_to_virtual_package "${hc}" prof $package_id`" done echo $packages | sed -e 's/^,[ ]*//' } package_id_to_virtual_package(){ + local hc local type - type="$1" - echo $2 | tr A-Z a-z | \ + local pkgid + hc="$1" + type="$2" + pkgid="$3" + echo ${pkgid} | tr A-Z a-z | \ grep '[a-z0-9]\+-[0-9\.]\+-................................' | \ - perl -pe 's/([a-z0-9-]+)-([0-9\.]+)-(.....).........................../libghc-\1-'$type'-\2-\3/' + perl -pe 's/([a-z0-9-]+)-([0-9\.]+)-(.....).........................../lib'${hc}'-\1-'$type'-\2-\3/' } depends_for_hugs(){ @@ -265,17 +308,18 @@ find_config_for_ghc(){ local f local pkg pkg=$1 + pkgdir=`package_pkgdir ${pkg}` case "$pkg" in ghc-prof) pkg=ghc ;; - libghc-*-prof) + *-prof) pkg=`echo $pkg | sed -e 's/-prof$/-dev/'` ;; *) ;; esac - for f in debian/$pkg/var/lib/ghc/package.conf.d/*.conf ; do + for f in debian/$pkg/${pkgdir}/*.conf ; do if [ -f "$f" ] ; then echo $f echo " " @@ -292,7 +336,7 @@ clean_recipe(){ rm -rf dist dist-ghc dist-hugs ${DEB_SETUP_BIN_NAME} Setup.hi Setup.ho Setup.o .*config* rm -f configure-ghc-stamp build-ghc-stamp build-hugs-stamp build-haddock-stamp rm -rf debian/tmp-inst-ghc - rm -f debian/extra-depends + rm -f debian/extra-depends-ghc rm -f debian/libghc-${CABAL_PACKAGE}-doc.links if [ -f ${DEB_LINTIAN_OVERRIDES_FILE} ] ; then \ sed -i '/binary-or-shlib-defines-rpath/ d' ${DEB_LINTIAN_OVERRIDES_FILE} ; \ @@ -311,32 +355,37 @@ make_setup_recipe(){ configure_recipe(){ DEB_SETUP_BIN_NAME=$1 CABAL_PACKAGE=$2 - DEB_HADDOCK_DIR=$3 - DEB_HADDOCK_HTML_DIR=$4 - ENABLE_PROFILING=$5 - NO_GHCI_FLAG=$6 - DEB_SETUP_GHC6_CONFIGURE_ARGS=$7 - DEB_SETUP_GHC_CONFIGURE_ARGS=$8 - OPTIMIZATION=$9 - TESTS=$10 - COMPILERS=$11 + CABAL_VERSION=$3 + ENABLE_PROFILING=$4 + NO_GHCI_FLAG=$5 + DEB_SETUP_GHC6_CONFIGURE_ARGS=$6 + DEB_SETUP_GHC_CONFIGURE_ARGS=$7 + OPTIMIZATION=$8 + TESTS=$9 + DEB_DEFAULT_COMPILER=$10 + DEB_PACKAGES=$11 + + hc=`packages_hc "${DEB_DEFAULT_COMPILER}" "${DEB_PACKAGES}"` + ENABLE_PROFILING=`{ for i in ${DEB_PACKAGES}; do package_ext $i | grep prof; done; } | sort -u | sed 's/prof/--enable-library-profiling/'` local GHC_OPTIONS for i in `dpkg-buildflags --get LDFLAGS`; do GHC_OPTIONS="$GHC_OPTIONS -optl$i"; done - ${DEB_SETUP_BIN_NAME} configure ${COMPILERS} -v2 --package-db=/var/lib/ghc/package.conf.d \ - --prefix=/usr --libdir=/usr/lib/haskell-packages/ghc/lib \ - --builddir=dist-ghc \ + ${DEB_SETUP_BIN_NAME} configure "--${hc}" -v2 --package-db=/`hc_pkgdir ${hc}` \ + --prefix=/`hc_prefix ${hc}` --libdir=/`hc_libdir ${hc}` \ + --builddir=dist-${hc} \ --ghc-options="${GHC_OPTIONS}" \ - --haddockdir=${DEB_HADDOCK_DIR} --datasubdir=${CABAL_PACKAGE}\ - --htmldir=${DEB_HADDOCK_HTML_DIR} ${ENABLE_PROFILING} ${NO_GHCI_FLAG} \ + --haddockdir=/`hc_docdir ${hc} ${CABAL_PACKAGE}-${CABAL_VERSION}` --datasubdir=${CABAL_PACKAGE}\ + --htmldir=/`hc_htmldir ${hc} ${CABAL_PACKAGE}` ${ENABLE_PROFILING} ${NO_GHCI_FLAG} \ ${DEB_SETUP_GHC6_CONFIGURE_ARGS} ${DEB_SETUP_GHC_CONFIGURE_ARGS} ${OPTIMIZATION} ${TESTS} } build_recipe(){ DEB_SETUP_BIN_NAME=$1 - COMPILER=$2 - ${DEB_SETUP_BIN_NAME} build --builddir=dist-${COMPILER} + DEB_DEFAULT_COMPILER=$2 + DEB_PACKAGES=$3 + hc=`packages_hc "${DEB_DEFAULT_COMPILER}" "${DEB_PACKAGES}"` + ${DEB_SETUP_BIN_NAME} build --builddir=dist-${hc} } check_recipe(){ @@ -350,15 +399,19 @@ check_recipe(){ haddock_recipe(){ DEB_SETUP_BIN_NAME=$1 DEB_HADDOCK_OPTS=$2 - COMPILER=$3 - [ ! -x /usr/bin/haddock ] || ${DEB_SETUP_BIN_NAME} haddock --builddir=dist-${COMPILER} --with-haddock=/usr/bin/haddock --with-ghc=${COMPILER} ${DEB_HADDOCK_OPTS} || \ + DEB_DEFAULT_COMPILER=$3 + DEB_PACKAGES=$4 + hc=`packages_hc "${DEB_DEFAULT_COMPILER}" "${DEB_PACKAGES}"` + haddock=`hc_haddock ${hc}` + [ ! -x /usr/bin/${haddock} ] || ${DEB_SETUP_BIN_NAME} haddock --builddir=dist-${hc} --with-haddock=/usr/bin/${haddock} --with-ghc=${hc} ${DEB_HADDOCK_OPTS} || \ echo "Haddock failed (no modules?), creating empty documentation package." } extra_depends_recipe(){ DEB_SETUP_BIN_NAME=$1 - pkg_config=`${DEB_SETUP_BIN_NAME} register --builddir=dist-ghc --gen-pkg-config | tr -d ' \n' | sed -r 's,^.*:,,'` - dh_haskell_extra_depends $pkg_config + hc=$2 + pkg_config=`${DEB_SETUP_BIN_NAME} register --builddir=dist-${hc} --gen-pkg-config | tr -d ' \n' | sed -r 's,^.*:,,'` + dh_haskell_extra_depends ${hc} $pkg_config rm $pkg_config } @@ -370,12 +423,17 @@ install_dev_recipe(){ DEB_GHC_EXTRA_PACKAGES=$5 DEB_LINTIAN_OVERRIDES_FILE=$6 PKG=$7 - ( cd debian/tmp-inst-ghc ; mkdir -p usr/lib/haskell-packages/ghc/lib ; find usr/lib/haskell-packages/ghc/lib/ \ + + hc=`package_hc ${PKG}` + libdir=`package_libdir ${PKG}` + pkgdir=`package_pkgdir ${PKG}` + + ( cd debian/tmp-inst-${hc} ; mkdir -p ${libdir} ; find ${libdir}/ \ \( ! -name "*_p.a" ! -name "*.p_hi" ! -type d \) \ -exec install -Dm 644 '{}' ../${PKG}/'{}' ';' ) - pkg_config=`${DEB_SETUP_BIN_NAME} register --builddir=dist-ghc --gen-pkg-config | tr -d ' \n' | sed -r 's,^.*:,,'` + pkg_config=`${DEB_SETUP_BIN_NAME} register --builddir=dist-${hc} --gen-pkg-config | tr -d ' \n' | sed -r 's,^.*:,,'` if [ "${HASKELL_HIDE_PACKAGES}" ]; then sed -i 's/^exposed: True$/exposed: False/' $pkg_config; fi - install -Dm 644 $pkg_config debian/${PKG}/var/lib/ghc/package.conf.d/$pkg_config + install -Dm 644 $pkg_config debian/${PKG}/${pkgdir}/$pkg_config rm -f $pkg_config if [ "z${DEB_GHC_EXTRA_PACKAGES}" != "z" ] ; then mkdir -p debian/$(notdir $@)/usr/lib/haskell-packages/extra-packages; \ @@ -391,7 +449,8 @@ install_dev_recipe(){ install_prof_recipe(){ PKG=$1 - ( cd debian/tmp-inst-ghc ; mkdir -p usr/lib/haskell-packages/ghc/lib ; find usr/lib/haskell-packages/ghc/lib/ \ + libdir=`package_libdir ${PKG}` + ( cd debian/tmp-inst-`package_hc ${PKG}` ; mkdir -p ${libdir} ; find ${libdir}/ \ ! \( ! -name "*_p.a" ! -name "*.p_hi" \) \ -exec install -Dm 644 '{}' ../${PKG}/'{}' ';' ) dh_haskell_provides -p${PKG} @@ -400,23 +459,26 @@ install_prof_recipe(){ install_doc_recipe(){ CABAL_PACKAGE=$1 - DEB_HADDOCK_DIR=$2 - DEB_HADDOCK_HTML_DIR=$3 - DEB_ENABLE_HOOGLE=$4 - DEB_HOOGLE_TXT_DIR=$5 - PKG=$6 - mkdir -p debian/${PKG}/${DEB_HADDOCK_HTML_DIR} - ( cd debian/tmp-inst-ghc/ ; find ./${DEB_HADDOCK_HTML_DIR} \ + CABAL_VERSION=$2 + DEB_ENABLE_HOOGLE=$3 + PKG=$4 + hc=`package_hc ${PKG}` + pkgid=${CABAL_PACKAGE}-${CABAL_VERSION} + docdir=`hc_docdir ${hc} ${pkgid}` + htmldir=`hc_htmldir ${hc} ${CABAL_PACKAGE}` + hoogle=`hc_hoogle ${hc}` + mkdir -p debian/${PKG}/${htmldir} + ( cd debian/tmp-inst-${hc}/ ; find ./${htmldir} \ ! -name "*.haddock" ! -type d -exec install -Dm 644 '{}' \ ../${PKG}/'{}' ';' ) - mkdir -p debian/${PKG}/${DEB_HADDOCK_DIR} - [ 0 = `ls debian/tmp-inst-ghc/${DEB_HADDOCK_DIR}/ 2>/dev/null | wc -l` ] || - cp -r debian/tmp-inst-ghc/${DEB_HADDOCK_DIR}/*.haddock \ - debian/${PKG}/${DEB_HADDOCK_DIR} + mkdir -p debian/${PKG}/${docdir} + [ 0 = `ls debian/tmp-inst-${hc}/${docdir}/ 2>/dev/null | wc -l` ] || + cp -r debian/tmp-inst-${hc}/${docdir}/*.haddock \ + debian/${PKG}/${docdir} if [ "${DEB_ENABLE_HOOGLE}" = "yes" ]; then - find debian/${PKG}/${DEB_HADDOCK_HTML_DIR} -name "*.txt" \ - -printf "%p ${DEB_HOOGLE_TXT_DIR}/${PKG}.txt\n" >> debian/libghc-${CABAL_PACKAGE}-doc.links - sed -i s,^debian/libghc-${CABAL_PACKAGE}-doc,, debian/libghc-${CABAL_PACKAGE}-doc.links + find debian/${PKG}/${htmldir} -name "*.txt" \ + -printf "%p ${hoogle}/${PKG}.txt\n" >> debian/lib${hc}-${CABAL_PACKAGE}-doc.links + sed -i s,^debian/lib${hc}-${CABAL_PACKAGE}-doc,, debian/lib${hc}-${CABAL_PACKAGE}-doc.links fi dh_haskell_depends -p${PKG} } |