#!/usr/bin/perl -w

=head1 NAME

dh_phppear - calculates PHP PEAR dependencies

=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 your 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}> and B<${phppear:Debian-Breaks}>

=back

The program will look at F<channel.xml> in your 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 your package's F<control>
file wherever you place the token B<${phppear:*}>.

=head1 FILES

=over 4

=item 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 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 php5 sourcepackage.

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

=back

=back

=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

=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 CONFORMS TO

Debian policy, version 3.9.4

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

=head1 SEE ALSO

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

L<debhelper(7)> (Note: This program is not part of debhelper)

=head1 AUTHOR

Mathieu Parent <sathieu@debian.org>

