Sindbad~EG File Manager

Current Path : /usr/bin/
Upload File :
Current File : //usr/bin/dh_phppear

#!/usr/bin/perl -w

=head1 NAME

dh_phppear - calculates PHP PEAR substvars

=head1 SYNOPSIS

B<dh_phppear> [S<I<debhelper options>>] [S<I<options>>]

=head1 DESCRIPTION

B<dh_phppear> is a debhelper program that is responsible for generating
the B<${phppear:*}> substitutions and adding them to substvars files.

The program will look at F<package.xml> (or F<package2.xml>) in the package,
and will use this information to generate:

=over 2

=item *

B<${phppear:summary}>, B<${phppear:description}> and B<${phppear:channel}>

=item *

B<${phppear:Debian-Depends}>, B<${phppear:Debian-Recommends}>,
B<${phppear:Debian-Suggests}> and B<${phppear:Debian-Breaks}>

=back

B<Deprecated:> the <pear-channels> package should be used (and updated)
instead of introducing a new standalone channel package.

The program will look at F<channel.xml> in the package,
and will use this information to generate:

=over 2

=item *

B<${phppear:channel-name}>, B<${phppear:channel-summary}> and B<${phppear:channel-alias}>

=item *

B<${phppear:channel-common-description}>

=back

Those variables will be substituted into the package's F<control>
file wherever the token B<${phppear:*}> are placed.

=head1 OPTIONS

=over 4

=item B<--sourcedirectory=>I<directory>

Assume that the original package source tree is at the specified directory
rather than the top level directory of the Debian source package tree.

This feature requires pkg-php-tools (>= 1.14~).

=back

=head1 FILES

=over 4

=item F<debian/pkg-php-tools-overrides>

Package that don't want to follow automatic PEAR package name to Debian package
name conversion can override the conversion by creating this file.

It can be installed in B</usr/share/pkg-php-tools/overrides/>I<src:package>.

This feature requires pkg-php-tools (>= 1~).

The format is a set of lines, with each line having the following fields:

=over 6

=item I<channel_url>

The channel URL as found in F<package.xml> (example: I<pear.phpunit.de>).

=item I<pear_package_name>

The PEAR package name (example: I<phpunit>).

=item I<debian_package_name>

The resulting Debian package name (example: I<phpunit>).

Use I<builtin> if the package is compiled from the php source package.

Use I<none> if the PEAR package can't be simply translated to Debian name.

=back

=back

=head1 ADVANCED USAGE

=head2 Building a PECL package

A PECL package is a PEAR package which is compiled. Extra steps are needed:

=over 2

=item *

Adding B<php-dev>, B<pkg-php-tools> (>= 1.6~) and B<dh-php> to Build-Depends.

=item *

Adding B<${shlibs:Depends}> and B<${misc:Depends}> to Depends.

=item *

Adding B<--with php> to B<dh> line in I<debian/rules>.

=back

=head2 Patching

B<dh_phppear> will remove md5sums and sha1sums to ease patching. You can patch
as usual.

=head2 Removing some files from the upstream tarball

If some files are removed from the upstream tarball, the package will be
incomplete unless they are stripped from the I<package.xml> file in the PEAR
package subdir. This can be done after the I<dh_auto_configure> step. Example:

  override_dh_auto_configure:
  	dh_auto_configure -O--buildsystem=phppear
  	# Remove references of JsMin
  	sed -i '/JsMin\.php/d' */package.xml

This feature requires pkg-php-tools (>= 1.1~).

=head2 Building a channel package (DEPRECATED)

B<Deprecated:> the B<pear-channels> package should be used (and updated)
instead of introducing a new standalone channel package.

Simply put the F<channel.xml> file downloaded from the PEAR channel in the root of
the package source and use a I<debian/rules> similar to a PEAR package.

This feature requires pkg-php-tools (>= 1.3~).

=cut

use strict;
use warnings;
use Cwd ();
use File::Spec;
use Debian::Debhelper::Dh_Lib;


sub _shell_exec {
	my $child_pid = open(my $output, "-|", @_) // error("@_ failed to fork: $!");
	if ($child_pid) {
		waitpid $child_pid, 0;
	} else {
		exit 0;
	}
	if ($? == -1) {
		error("@_ failed to execute: $!");
	}
	elsif ($? & 127) {
		error("@_ died with signal ".($? & 127));
	}
	elsif ($? != 0) {
		error("@_ returned exit code ".($? >> 8));
	}
	return $output;
}

my $opt_sourcedir = '.';
init(options => {
	"D=s" => \$opt_sourcedir,
	"sourcedirectory=s" => \$opt_sourcedir,
});

# Check and canonalize $opt_sourcedir
{
	# Get relative sourcedir abs_path (without symlinks)
	my $abspath = Cwd::abs_path($opt_sourcedir);
	my $cwd = Cwd::getcwd();
	if (! -d $abspath || $abspath !~ /^\Q$cwd\E/) {
		error("invalid or non-existing path to the source directory: ".$opt_sourcedir);
	}
	$opt_sourcedir = File::Spec->abs2rel($abspath, $cwd);
}

foreach my $package (@{$dh{DOPACKAGES}}) {
	if (-e File::Spec->catfile($opt_sourcedir, "package.xml") || -e File::Spec->catfile($opt_sourcedir, "package2.xml")) {
		my $substvars = _shell_exec('/usr/bin/pkgtools', '-v', '--sourcedirectory', $opt_sourcedir, 'phppear', 'substvars');
		while (<$substvars>) {
			/^([^=]+)=\s*(.*)$/;
			addsubstvar($package, $1, $2);
		}
	}
	if (-e File::Spec->catfile($opt_sourcedir, "channel.xml")) {
		my $substvars = _shell_exec('/usr/bin/pkgtools', '-v', '--sourcedirectory', $opt_sourcedir, 'phppearchannel', 'substvars');
		while (<$substvars>) {
			/^([^=]+)=\s*(.*)$/;
			addsubstvar($package, $1, $2);
		}
	}
}

=head1 CONFORMING TO

Debian policy, version 3.9.6.

PHP PEAR policy, version yet-to-be-written.

=head1 SEE ALSO

L<debhelper(7)>,
L<pkg-php-tools(7)>,
F</usr/share/doc/pkg-php-tools/README.PEAR>

=head1 AUTHOR

Mathieu Parent <sathieu@debian.org>


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists