[Pkg-haskell-commits] r832 - in /packages/haskell-devscripts/trunk: debian/changelog dh_haskell_buildinst
arjan at users.alioth.debian.org
arjan at users.alioth.debian.org
Sun Dec 30 18:09:54 UTC 2007
Author: arjan
Date: Sun Dec 30 18:09:54 2007
New Revision: 832
URL: http://svn.debian.org/wsvn/pkg-haskell/?sc=1&rev=832
Log:
[project @ replace dh_haskell_buildinst with simple shell script]
Original author: Arjan Oosting <arjanoosting at home.nl>
Date: 2006-10-06 21:42:14+00:00
Modified:
packages/haskell-devscripts/trunk/debian/changelog
packages/haskell-devscripts/trunk/dh_haskell_buildinst
Modified: packages/haskell-devscripts/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskell-devscripts/trunk/debian/changelog?rev=832&op=diff
==============================================================================
--- packages/haskell-devscripts/trunk/debian/changelog (original)
+++ packages/haskell-devscripts/trunk/debian/changelog Sun Dec 30 18:09:54 2007
@@ -2,7 +2,9 @@
* Move debhelper to Build-Depends as suggested by lintian.
* Change she-bang for dh_haskell to /bin/sh as does not use any
- bashims.
+ bashims.
+ * Replace dh_haskell_buildinst with simple shell script to decrease code
+ duplicity.
-- Arjan Oosting <arjanoosting at home.nl> Fri, 6 Oct 2006 22:30:10 +0200
Modified: packages/haskell-devscripts/trunk/dh_haskell_buildinst
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskell-devscripts/trunk/dh_haskell_buildinst?rev=832&op=diff
==============================================================================
--- packages/haskell-devscripts/trunk/dh_haskell_buildinst (original)
+++ packages/haskell-devscripts/trunk/dh_haskell_buildinst Sun Dec 30 18:09:54 2007
@@ -1,289 +1,26 @@
-#!/usr/bin/perl -w
-# arch-tag: Debhelper script for Haskell
-#
-# Copyright (C) 2004 John Goerzen <jgoerzen at complete.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under 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.
+#!/bin/sh
-# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
+set -e
-=head1 NAME
+OPTIONS="$@"
+FILTERED_OPTIONS=
-dh_haskell - Builds Cabalized libraries, calculates Haskell dependencies, and adds postinst and prerm Haskell scripts
+# Don't know if filtering op the options is really necessary
+# but do it just in case
+until [ -z "$1" ]
+do
+ case "$1" in
+ "-a"|"-s"|"-i"|"-p*"|"--package=*"|"-N*"|"--no-package=*")
+ ;;
+ *)
+ FILTERED_OPTIONS="$FILTERED_OPTIONS $1"
+ ;;
+ esac
+ shift
+done
-=cut
+for p in `dh_listpackages "$OPTIONS"` ; do
+ dh_haskell_build --package=$p $FILTERED_OPTIONS
+ dh_haskell_install --package=$p $FILTERED_OPTIONS
+done
-use strict;
-use File::Find;
-use Debian::Debhelper::Dh_Lib;
-
-=head1 SYNOPSIS
-
-B<dh_haskell> [S<I<debhelper options>>]
-
-=head1 DESCRIPTION
-
-dh_haskell is a debhelper program that helps with building Haskell libraries.
-
-It does several things. It can generate postinst and prerm scripts when
-necessary. It automates building libraries for the different supported
-Haskell systems in Debian. It generates substvars for your control
-file so that the library packages depend on the appropriate packages.
-In short, it can drive the entire process.
-
-=head1 REQUIREMENTS
-
-dh_haskell assumes that your packages are adhering to the draft Haskell policy.
-
-Your control file must build the binary library files using packages
-named libI<type>-I<name>-I<variation>, where I<type> is ghc5, ghc6, or
-nhc98; I<name> is the name of your package; and I<variation> is dev or
-prof. These packages should be Architecture: any.
-
-The I<prof> package contains profiling enabled libraries. Currently
-only GHC supports profiling. Due to restrictions of the GHC compiler,
-if you provide a I<dev> package you should also provide a
-corresponding I<prof> package.
-
-If you build a Hugs package, name it libhugs-I<name>. However, dh_haskell
-will also accept libhugs-I<name>-dev for consistency. Most Hugs packages
-should be Architecture: all. If your package uses foreign methods,
-maybe it should be Architecture: any (please let me know if you have
-an answer to that).
-
-dh_haskell figures out how to build your package based on the I<type>,
-so you must adhere to this naming scheme.
-
-dh_haskell assumes that the Haskell Cabal (see www.haskell.org/cabal) can
-be used to build your package. It obtains package name and version
-information from the Cabal Setup.Description file.
-
-=head1 HOW TO PACKAGE A HASKELL LIBRARY
-
-Start from a basic debian/ directory. Add entries to Build-Depends for
-haskell-devscripts and the compilers for any binaries you will build.
-
-In the clause in control for each binary package, make sure to add
-${haskell:Depends} to the Depends: line.
-
-In rules, in the install target, add dh_haskell. Your build and configure
-targets should be empty.
-
-Remember that you should add -a to all debhelper calls for multi-binary
-packages. That goes for dh_haskell too.
-
-Your clean target should contain:
-
-C<-./setup clean>
-C<--rm -rf setup Setup.hi Setup.ho Setup.o .*config* dist>
-
-That's it. dh_haskell does the rest.
-
-=head1 EXAMPLES
-
-See the Debian source package for hunit.
-
-also see:
-
-darcs get --partial http://www.n-heptane.com/nhlab/repos/cabalDebianTemplate/
-
-=cut
-
-init();
-
-sub is_handled_package {
- my $pkgname = shift;
- if ($pkgname =~ m/^lib(ghc5|ghc6|nhc98|hugs)-.+-dev$/) {
- return 1;
- } elsif ($pkgname =~ m/libhugs-.+$/) {
- return 1;
- } else {
- return 0;
- }
-}
-
-sub type_of_package {
- my $pkgname = shift;
- if ($pkgname =~ m/^libhugs-.+$/) {
- return "hugs";
- } else {
- my @pn = ($pkgname =~ m/^lib(ghc5|ghc6|nhc98|hugs)-.+-dev$/);
- return $pn[0];
- }
-}
-
-sub version_of_debpkg {
- my $pkgname = shift;
- my $retval = `dpkg -s $pkgname | grep -i ^Version | awk '{print \$2}'`;
- chomp $retval;
- return $retval;
- }
-
-sub version_of_type {
- my $pkgtype = shift;
- return version_of_debpkg($pkgtype);
-}
-
-sub upstream_version {
- my $inver = shift;
- if ($inver =~ m/-/) {
- my @v = ($inver =~ m/^(.+)-[^-]+$/);
- return $v[0];
- }
-}
-
-
-sub getcabalname {
- my $retval = `grep -i ^Name *.cabal | awk '{print \$2}'`;
- chomp $retval;
- return $retval;
-}
-
-sub getcabalversion {
- my $retval = `grep -i ^Version *.cabal | awk '{print \$2}'`;
- chomp $retval;
- return $retval;
-}
-
-sub getcabalnameversion {
- return getcabalname() . "-" . getcabalversion();
-}
-
-sub getcabalbasepath {
- my $pkgtype = shift;
- return "/usr/lib/haskell-packages/$pkgtype";
-}
-
-sub getcabalpkglibpath {
- my $pkgtype = shift;
- return getcabalbasepath($pkgtype) . "/lib/" . getcabalnameversion();
-}
-
-sub profiling_name {
- my $package = shift;
- my @pn = ($package =~ m/^lib(ghc5|ghc6|nhc98|hugs)-(.+)-dev$/);
- return "lib$pn[0]-$pn[1]-prof";
-}
-
-sub is_profiling_enabled {
- my $package = shift;
- my $packages = shift;
- my $profname = profiling_name($package);
-
- foreach my $p (@{$packages}) {
- if ($p =~ m/^$profname$/) {
- return 1;
- }
- }
- return 0;
-}
-
-sub safesystem {
- my $program = shift;
- print "Running: $program\n";
- system($program) == 0
- or die "$program files: $?";
-}
-
-print "Building setup...\n";
-
-my $setup;
-for my $candidate (qw(Setup.lhs Setup.hs)) {
- $setup = $candidate, last if -e $candidate;
-}
-die unless -e $setup;
-safesystem("ghc6 -package Cabal $setup -o setup");
-
-# Cabal currently has no way to build the -dev and -prof libraries
-# seperately. So the handling of -prof is a bit awkward. The below
-# loop handles each paragraph debian/control individually. To handle
-# -prof we:
-#
-# 1) skip over -prof paragraphs
-# 2) if we encounter a -dev paragraph we check if there is a
-# corresponding -prof package
-# 3) if so, we run configure with --enable-library-profiling
-# 4) build and install the libraries
-# 5) use find/tar to move the profiling libraries into
-# -prof deb
-#
-# One side-effect is that you can not build a -prof unless you also
-# build a -dev. But you probably should not do that anyway?
-foreach my $package (@{$dh{DOPACKAGES}}) {
- my $tmp = tmpdir($package);
- if (is_handled_package($package)) {
- my $pkgtype = type_of_package($package);
-
- print "\n ****************************************** \n";
- print " NOW BUILDING $package FOR $pkgtype\n";
- print " OUTPUT TO $tmp\n\n";
-
- print "Cleaning...\n";
- system("./setup clean");
- safesystem("rm -f .*config*");
-
- if ($pkgtype eq "hugs") {
- safesystem("./setup configure --hugs");
- # Cabal always dies here.
- print "Running: ./setup build\n";
- system("./setup build");
- } else {
- my $profiling_option = "";
- if (is_profiling_enabled($package,$dh{DOPACKAGES})) {
- $profiling_option = " --enable-library-profiling ";
- }
- safesystem("./setup configure " . $profiling_option . " --prefix=" . getcabalbasepath($pkgtype)
- . " --with-compiler=/usr/bin/$pkgtype");
- safesystem("./setup build");
- }
- if ($pkgtype eq "hugs") {
- safesystem("mkdir -p $tmp/usr/lib/hugs/libraries");
- safesystem("cp -rv dist/build/* $tmp/usr/lib/hugs/libraries/");
- } else {
- safesystem("mkdir -p $tmp/usr/share/doc/$package");
- safesystem("mkdir -p $tmp" . getcabalbasepath($pkgtype));
- safesystem("./setup copy --copy-prefix=$tmp" . getcabalbasepath($pkgtype));
- if (is_profiling_enabled($package, $dh{DOPACKAGES})) {
- # Have to move all the profiling libraries into a
- # seperate package. This seems a bit hackish though.
- my $proftmp=tmpdir(profiling_name($package));
- safesystem("mkdir -p $proftmp");
- # NOTE: you might think you can using the -C option to
- # tar instead using 'cd', but the --null disables -C
- safesystem("find $tmp \\( -name \"*_p.a\" -o -name \"*.p_hi\" -o -name \"*.p_o\" \\) -printf \"%P\\0\" | " .
- "(cd $tmp ; tar -c --null --preserve --remove-files -T - ) | " .
- "tar -C $proftmp -x");
- }
- safesystem("cp .installed-pkg-config $tmp" . getcabalpkglibpath($pkgtype) . "/installed-pkg-config");
- }
- }
-}
-
-=head1 BUGS
-
-hugs, ghc6, and ghc5 are the only supported targets at the moment. Cabal does
-not yet support nhc98. Note though that there are some known bugs in
-Cabal relating to ghc5 support.
-
-=head1 SEE ALSO
-
-L<debhelper(7)>
-
-=head1 AUTHOR
-
-John Goerzen <jgoerzen at complete.org>
-
-Based on ideas in dh_python by Josselin Mouette <joss at debian.org>
-
-=cut
More information about the Pkg-haskell-commits
mailing list