Sindbad~EG File Manager
Current Path : /usr/bin/ |
|
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