[Erp5-report] r12735 - /spec/debian/dh_installerp5zope
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Feb 15 17:26:51 CET 2007
Author: yusei
Date: Thu Feb 15 17:26:49 2007
New Revision: 12735
URL: http://svn.erp5.org?rev=12735&view=rev
Log:
commit debian(unstable) packages.
Added:
spec/debian/dh_installerp5zope (with props)
Added: spec/debian/dh_installerp5zope
URL: http://svn.erp5.org/spec/debian/dh_installerp5zope?rev=12735&view=auto
==============================================================================
--- spec/debian/dh_installerp5zope (added)
+++ spec/debian/dh_installerp5zope Thu Feb 15 17:26:49 2007
@@ -1,0 +1,363 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+dh_installzope - install zope product and extension files into package build
+directories
+
+=cut
+
+use strict;
+use Debian::Debhelper::Dh_Lib;
+
+=head1 SYNOPSIS
+
+B<dh_installzope> [S<I<debhelper options>>] [B<-n>] [B<-X>I<item>] [S<I<dir ...>>]
+
+=head1 DESCRIPTION
+
+dh_installzope is a debhelper program that is responsible for installing
+zope products and extensions into package build directories.
+
+Directory names are interpreted as zope product names and will be
+installed into the first package dh_installzope is told to act on. By
+default, this is the first binary package in debian/control, but if
+you use B<-p>, B<-i>, or B<-a> flags, it will be the first package
+specified by those flags.
+
+dh_installzope automatically installs debian/dzproduct and debian/dzextension
+if it exists. If dh_installzope is acting on multiple packages, debian/dzproduct
+and debian/dzextension files will be installed into the first package.
+Use debian/package.dzproduct and debian/package.dzextension for different
+binary packages.
+
+If your package needs to register more than one product or extension,
+you need multiple files. To accomplish this, you can use files named
+debian/package.dzproduct.* and debian/package.dzextension.*
+
+Missing dzproduct and dzextension files for the first package dh_installzope
+is told to act on are generated and installed automatically.
+
+The substitution variable zope:Depends is replaced by a list of the available
+zope versions.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-n>, B<--noscripts>
+
+Do not modify postinst/prerm scripts.
+
+=item B<-Xitem>, B<--exclude=item>
+
+Exclude files that contain "item" anywhere in their filename from
+being installed.
+
+=item I<directory ...>
+
+Install these directories as products into the first package acted on.
+
+=back
+
+=head1 EXAMPLES
+
+This is an example of a debian/package.dzproduct file:
+
+ Package: zope-cmfdefault1.4
+ Name: CMFDefault
+ Directory: CMFDefault:1.4
+ Depends: CMFTopic:1.4
+ Version: 1.4.7-1
+ ZopeVersions: 2.9 2.8
+
+The Version field is added or updated by dh_installzope. If Name
+and Directory match, the latter can be omitted. A deviating
+Directory is used to install different product versions. A Directory
+has the form <product name>[:<suffix>].
+
+It is possible to specify the list of zope versions for the 2.x serie
+using a >= relation, like in this example:
+
+ Package: zope-psycopgda
+ ZopeVersions: >= 2.7
+
+This allows bin-NMUs of zope products on new Zope 2.x major versions,
+and for this reason it should be the preferred syntax.
+
+=head1 NOTES
+
+Note that this command is not idempotent. "dh_clean B<-k>" should be called
+between invocations of this command. Otherwise, it may cause multiple
+instances of the same text to be added to maintainer scripts.
+
+=cut
+
+init();
+
+my @zope_versions = ('2.6', '2.7', '2.8', '2.9', '2.10', '3');
+my %python_versions = ('3', '2.4');
+
+sub read_dzfile {
+ my $fn = shift;
+ my %fields=();
+ open (DZ, "debian/$fn") || error("cannot read debian/$fn: $!\n");
+ while (<DZ>) {
+ chomp;
+ s/\s+$//;
+ if (/^([^:]+):\s*(.*)/) {
+ $fields{$1} = $2;
+ }
+ }
+ close DZ;
+ return %fields;
+}
+
+sub write_dzfile {
+ my ($fn, %fields) = @_;
+ my ($out) = "";
+ open (DZ, ">$fn") || error("cannot write $fn: $!\n");
+ foreach (keys %fields) {
+ $out = "$_: $fields{$_}\n" . $out;
+ }
+ print DZ $out;
+ close DZ;
+}
+
+sub addzopesubstvars {
+ my ($package, %fields) = @_;
+ my ($var) = "zope-common (>= 0.5.26), ";
+ my (@versions) = ();
+ my ($minor) = "0";
+
+ if ($fields{'ZopeVersions'}) {
+ my (@vers) = split(/ /, $fields{'ZopeVersions'});
+ if ($vers[0] eq '>=') {
+ @versions = ();
+ if ($vers[1] =~ m/^[0-9]\.([0-9]+)$/) {
+ $minor = $1;
+ }
+ foreach (@zope_versions) {
+ if ($_ =~ m/[0-9]\.([0-9]+)/ && int($1) >= int($minor)) {
+ push(@versions, $_);
+ }
+ }
+ } else {
+ @versions = @vers;
+ }
+ } else {
+ @versions = @zope_versions;
+ }
+
+ foreach (reverse(@versions)) {
+ $var .= "zope" . $_ . " | ";
+ }
+ $var = substr($var, 0, length($var)-3);
+ addsubstvar($package, "zope:Depends", $var);
+ return join(" ", reverse(@versions));
+}
+
+my @autoscripts = ('preinst', 'postinst', 'prerm', 'postrm');
+
+foreach my $package (@{$dh{DOPACKAGES}}) {
+ next if is_udeb($package);
+
+ my $tmp=tmpdir($package);
+
+ my $dzproductfile=pkgfile($package,"dzproduct");
+ my $dzextensionfile=pkgfile($package,"dzextension");
+
+ my $archdir=package_arch($package) eq 'all' ? 'share' : 'lib';
+
+ # needed to get $dh{VERSION}
+ my $isnative = isnative($package);
+
+ my $addon_version;
+
+ my @dirs;
+
+ if ($package eq $dh{FIRSTPACKAGE} && @ARGV) {
+ push @dirs, @ARGV;
+ }
+
+ if ($dh{V_FLAG}) {
+ $addon_version = $dh{V_FLAG};
+ }
+
+ # Handle dzproduct and dzextension files. There are two filename formats,
+ # the usual plus an extended format (debian/package.*).
+ my @dzpr_files;
+ my @dzex_files;
+
+ opendir(DEB,"debian/") || error("can't read debian directory: $!");
+ # If this is the main package, we need to handle unprefixed filenames.
+ # For all packages, we must support both the usual filename format plus
+ # that format with a period an something appended.
+ my $regexp="\Q$package\E\.";
+ if ($package eq $dh{MAINPACKAGE}) {
+ $regexp="(|$regexp)";
+ }
+ foreach my $fn (grep {/^${regexp}dz(product|extension)(\..*)?$/} readdir(DEB)) {
+ # .EX are example files, generated by eg, dh-make
+ next if $fn=~/\.EX$/;
+ if ($fn=~/dzproduct/) {
+ push @dzpr_files, $fn;
+ }
+ else {
+ push @dzex_files, $fn;
+ }
+ }
+ closedir(DEB);
+
+ if (@dirs > 0 && @dzpr_files > 1) {
+ error("unable to handle directories and multiple dzproduct/dzextension files");
+ }
+ if (@dirs > 1 && @dzpr_files > 0) {
+ error("unable to handle multiple directories and dzproduct/dzextension files");
+ }
+
+ if (@dirs) {
+ my %tdzproduct;
+ if (@dzpr_files) {
+ %tdzproduct = read_dzfile(shift @dzpr_files);
+ if (not exists $tdzproduct{'Package'}) {
+ $tdzproduct{'Package'} = $package;
+ }
+ }
+ else {
+ $tdzproduct{'Package'} = $package;
+ }
+ $tdzproduct{'Version'} = $dh{VERSION};
+ $tdzproduct{'ZopeVersions'} = addzopesubstvars($package, %tdzproduct);
+
+ my $exclude = '';
+ if ($dh{EXCLUDE_FIND}) {
+ $exclude = ' -and -not \( '.$dh{EXCLUDE_FIND}.' \)';
+ }
+ doit("install","-d","$tmp/usr/lib/erp5-zope/lib/python/Products");
+ foreach my $dir (@dirs) {
+ my %dzproduct = %tdzproduct;
+ my ($dir_basename) = basename($dir);
+ if (!$dzproduct{'Name'}) {
+ if ($dir ne '.') {
+ $dzproduct{'Name'} = $dir_basename;
+ } else {
+ error("you have to specify the product name in the dzproduct file");
+ }
+ }
+
+ my $target;
+ if ($dzproduct{'Directory'}) {
+ $target = $dzproduct{'Directory'};
+ }
+ else {
+ $target = $dzproduct{'Name'};
+ if ($addon_version) {
+ $dzproduct{'Directory'} = $package;
+ }
+ }
+
+ my ($exclude_debian) = '';
+ $exclude_debian = ' -and -not \( -path \'*/debian/*\' -or -path \'*-stamp\' \)' if ($dir eq ".");
+
+ doit("install","-d","$tmp/usr/lib/erp5-zope/lib/python/Products/$target");
+
+ my $pwd=`pwd`; chop($pwd);
+ if (exists $dzproduct{'Global'} && $dzproduct{'Global'} eq 'yes') {
+ if ($dzproduct{'ZopeVersions'} != '3') {
+ error("global products are supported only for zope3");
+ }
+ my ($pyver) = $python_versions{$dzproduct{'ZopeVersions'}};
+ addsubstvar($package, "zope:PythonVersion", $pyver);
+ complex_doit("cd $dir && find -type f$exclude$exclude_debian " .
+ "-exec install -D --mode=644 {} $pwd/$tmp/usr/lib/python$pyver/" .
+ "site-packages/$target/{} \\;");
+ complex_doit("mkdir -p $pwd/$tmp/usr/lib/erp5-zope/lib/python/Products/$target");
+ complex_doit("find $pwd/$tmp/usr/lib/python$pyver/site-packages/$target".
+ " \\( -name \\*-configure.zcml -o -name \\*-ftesting.meta -o -name " .
+ "\\*-meta.zcml \\) -exec mv {} $pwd/$tmp/usr/lib/erp5-zope/lib/python/Products" .
+ "/$target/ \\;");
+ } else {
+ complex_doit("cd $dir && find -type f$exclude$exclude_debian -exec install -D ".
+ "--mode=644 {} $pwd/$tmp/usr/lib/erp5-zope/lib/python/Products/$target/{} \\;");
+ }
+
+ write_dzfile("$tmp/usr/lib/erp5-zope/lib/python/Products/$target/.dzproduct", %dzproduct);
+ if (! $dh{NOSCRIPTS}) {
+ foreach my $script (@autoscripts) {
+ autoscript($package,$script,"$script-dzproduct",
+ "s,#DZ-DIR#,/usr/lib/erp5-zope/lib/python/Products/$target,;"
+ . "s,#DZ-ADDON#,$dzproduct{'Name'},;"
+ . "s,#PACKAGE#,$package,",
+ );
+ }
+ }
+ }
+ doit("chown","-R","0:0","$tmp/usr/lib/erp5-zope/lib/python/Products");
+ doit("chmod","-R","go=rX","$tmp/usr/lib/erp5-zope/lib/python/Products");
+ doit("chmod","-R","u+rw","$tmp/usr/lib/erp5-zope/lib/python/Products");
+ }
+
+ foreach my $fn (@dzpr_files) {
+ my %dzproduct = read_dzfile($fn);
+ my $target = $dzproduct{'Directory'} ? $dzproduct{'Directory'} : $dzproduct{'Name'};
+ if (! $target) {
+ error("no Name or Directory key in debian/$fn")
+ }
+ if (! -d "$tmp/usr/lib/erp5-zope/lib/python/Products/$target") {
+ doit("install","-g",0,"-o",0,"-d","$tmp/usr/lib/erp5-zope/lib/python/Products/$target");
+ }
+ doit("install","-g",0,"-o",0,"-m644","-p","debian/$fn",
+ "$tmp/usr/lib/erp5-zope/lib/python/Products/$target/.dzproduct");
+ $dzproduct{'Version'} = $dh{VERSION};
+ write_dzfile("$tmp/usr/lib/erp5-zope/lib/python/Products/$target/.dzproduct", %dzproduct);
+ if (! $dh{NOSCRIPTS}) {
+ foreach my $script (@autoscripts) {
+ autoscript($package,$script,"$script-dzproduct",
+ "s,#DZ-DIR#,/usr/lib/erp5-zope/lib/python/Products/$target,;"
+ . "s,#DZ-ADDON#,$dzproduct{'Name'},;"
+ . "s,#PACKAGE#,$package,",
+ );
+ }
+ }
+ addzopesubstvars($package, %dzproduct);
+ }
+
+ foreach my $fn (@dzex_files) {
+ my %dzext = read_dzfile($fn);
+ my $target = $dzext{'Directory'} ? $dzext{'Directory'} : $dzext{'Name'};
+ if (! $target) {
+ error("no Extension or Directory key in debian/$fn")
+ }
+ if (! -d "$tmp/usr/$archdir/erp5-zope/Extensions/$target") {
+ doit("install","-g",0,"-o",0,"-d","$tmp/usr/$archdir/erp5-zope/Extensions/$target");
+ }
+ doit("install","-g",0,"-o",0,"-m644","-p","debian/$fn",
+ "$tmp/usr/$archdir/erp5-zope/Extensions/$target/.dzextension");
+ $dzext{'Version'} = $dh{VERSION};
+ write_dzfile("$tmp/usr/$archdir/erp5-zope/Extensions/$target/.dzextension", %dzext);
+ if (! $dh{NOSCRIPTS}) {
+ foreach my $script (@autoscripts) {
+ autoscript($package,$script,"$script-dzextension",
+ "s,#DZ-DIR#,/usr/$archdir/erp5-zope/Extensions/$target,;"
+ . "s,#DZ-ADDON#,$dzext{'Name'},;"
+ . "s,#PACKAGE#,$package,",
+ );
+ }
+ }
+ addzopesubstvars($package, %dzext);
+ }
+}
+
+=head1 SEE ALSO
+
+L<debhelper(7)>
+
+This program is a part of zope-debhelper.
+
+=head1 AUTHOR
+
+Matthias Klose <doko at ubuntu.com>
+Fabio Tranchitella <kobold at debian.org>
+
+=cut
Propchange: spec/debian/dh_installerp5zope
------------------------------------------------------------------------------
svn:executable = *
More information about the Erp5-report
mailing list