[Pkg-haskell-commits] r814 - in /packages/haskell-devscripts/trunk: dh_haskell dh_haskell_build dh_haskell_install
arjan at users.alioth.debian.org
arjan at users.alioth.debian.org
Sun Dec 30 18:08:30 UTC 2007
Author: arjan
Date: Sun Dec 30 18:08:30 2007
New Revision: 814
URL: http://svn.debian.org/wsvn/pkg-haskell/?sc=1&rev=814
Log:
[project @ More tweaks]
Original author: John Goerzen <jgoerzen at complete.org>
Date: 2005-08-17 20:38:52+00:00
Modified:
packages/haskell-devscripts/trunk/dh_haskell
packages/haskell-devscripts/trunk/dh_haskell_build
packages/haskell-devscripts/trunk/dh_haskell_install
Modified: packages/haskell-devscripts/trunk/dh_haskell
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskell-devscripts/trunk/dh_haskell?rev=814&op=diff
==============================================================================
--- packages/haskell-devscripts/trunk/dh_haskell (original)
+++ packages/haskell-devscripts/trunk/dh_haskell Sun Dec 30 18:08:30 2007
@@ -5,3 +5,205 @@
dh_haskell_build "$@"
dh_haskell_install "$@"
+v v v v v v v
+*************
+=head1 NAME
+
+dh_haskell - Builds Cabalized libraries, calculates Haskell dependencies, and adds postinst and prerm Haskell scripts
+
+=cut
+
+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 generat 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>-dev, where I<type> is ghc5, ghc6, or nhc98; and
+I<name> is the name of your package. These packages should be Architecture:
+any.
+
+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 EXAMPLE
+
+See the Debian source package for hunit.
+
+=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 safesystem {
+ my $program = shift;
+ print "Running: $program\n";
+ system($program) == 0
+ or die "$program files: $?";
+}
+
+print "Generating meta-information...\n";
+
+foreach my $package (@{$dh{DOPACKAGES}}) {
+ my $tmp = tmpdir($package);
+
+ if (is_handled_package($package)) {
+ my $pkgtype = type_of_package($package);
+ delsubstvar($package, "haskell:Depends");
+ addsubstvar($package, "haskell:Depends",
+ $pkgtype, ">= " . upstream_version(version_of_type($pkgtype)));
+ if (! ($pkgtype eq "hugs")) {
+ addsubstvar($package, "haskell:Depends",
+ $pkgtype, "<< " . upstream_version(version_of_type($pkgtype)) . "-999");
+ }
+
+ if ($pkgtype eq "ghc5" || $pkgtype eq "ghc6") {
+ # Build scripts
+ my $ghcver = "ghc-" . upstream_version(version_of_type($pkgtype));
+ my $pkglibdir = getcabalpkglibpath($pkgtype);
+ my $cabalname = getcabalname();
+ my $cabalversion = getcabalversion();
+
+ print "$ghcver $pkglibdir $cabalname $cabalversion\n";
+ autoscript($package,"postinst","postinst-ghc",
+ "s%#GHCVER#%$ghcver%;s%#PKGLIBDIR#%$pkglibdir%");
+ autoscript($package,"prerm","prerm-ghc",
+ "s%#GHCVER#%$ghcver%;s%#PKGLIBDIR#%$pkglibdir%;s%#CABALNAME#%$cabalname%;s%#CABALVERSION#%$cabalversion%");
+ }
+ }
+
+}
+
+=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
+^ ^ ^ ^ ^ ^ ^
Modified: packages/haskell-devscripts/trunk/dh_haskell_build
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskell-devscripts/trunk/dh_haskell_build?rev=814&op=diff
==============================================================================
--- packages/haskell-devscripts/trunk/dh_haskell_build (original)
+++ packages/haskell-devscripts/trunk/dh_haskell_build Sun Dec 30 18:08:30 2007
@@ -116,7 +116,7 @@
sub version_of_debpkg {
my $pkgname = shift;
- my $retval = `dpkg -s $pkgname | grep ^Version | awk '{print \$2}'`;
+ my $retval = `dpkg -s $pkgname | grep -i ^Version | awk '{print \$2}'`;
chomp $retval;
return $retval;
}
@@ -136,13 +136,13 @@
sub getcabalname {
- my $retval = `grep ^Name *.cabal | awk '{print \$2}'`;
+ my $retval = `grep -i ^Name *.cabal | awk '{print \$2}'`;
chomp $retval;
return $retval;
}
sub getcabalversion {
- my $retval = `grep ^Version *.cabal | awk '{print \$2}'`;
+ my $retval = `grep -i ^Version *.cabal | awk '{print \$2}'`;
chomp $retval;
return $retval;
}
Modified: packages/haskell-devscripts/trunk/dh_haskell_install
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskell-devscripts/trunk/dh_haskell_install?rev=814&op=diff
==============================================================================
--- packages/haskell-devscripts/trunk/dh_haskell_install (original)
+++ packages/haskell-devscripts/trunk/dh_haskell_install Sun Dec 30 18:08:30 2007
@@ -116,7 +116,7 @@
sub version_of_debpkg {
my $pkgname = shift;
- my $retval = `dpkg -s $pkgname | grep ^Version | awk '{print \$2}'`;
+ my $retval = `dpkg -s $pkgname | grep -i ^Version | awk '{print \$2}'`;
chomp $retval;
return $retval;
}
@@ -136,13 +136,13 @@
sub getcabalname {
- my $retval = `grep ^Name *.cabal | awk '{print \$2}'`;
+ my $retval = `grep -i ^Name *.cabal | awk '{print \$2}'`;
chomp $retval;
return $retval;
}
sub getcabalversion {
- my $retval = `grep ^Version *.cabal | awk '{print \$2}'`;
+ my $retval = `grep -i ^Version *.cabal | awk '{print \$2}'`;
chomp $retval;
return $retval;
}
More information about the Pkg-haskell-commits
mailing list