#!/usr/bin/perl -w =head1 NAME dh_phpcomposer - calculates PHP Composer substvars =head1 SYNOPSIS B [S>] [S>] =head1 DESCRIPTION B is a debhelper program that is responsible for generating the B<${phpcomposer:*}> substitutions and adding them to substvars files. The program will look for F file in your package root, and will use this information to generate: This feature requires pkg-php-tools (>= 1.7~). =over 2 =item * B<${phpcomposer:name}> and B<${phpcomposer:description}> =item * B<${phpcomposer:Debian-require}>, B<${phpcomposer:Debian-require-dev}>, B<${phpcomposer:Debian-conflict}>, B<${phpcomposer:Debian-replace}>, B<${phpcomposer:Debian-provide}> and B<${phpcomposer:Debian-suggest}> =back Those variables will be substituted into your package's F file wherever you place the token B<${phpcomposer:*}>. =head1 FILES =over 4 =item debian/pkg-php-tools-overrides Package that don't want to follow automatic Composer package name to Debian package name conversion can override the conversion by creating this file. More information is available L =back =head1 OPTIONS =over 4 =item B<--sourcedirectory=>I 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 { open(my $output, "-|", @_) or error("@_ failed to execute: $!"); 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, "composer.json")) { my $substvars = _shell_exec('/usr/bin/pkgtools', '-v', '--sourcedirectory', $opt_sourcedir, 'phpcomposer', 'substvars'); while (<$substvars>) { if (/^([^=]+)=\s*(.*)$/) { addsubstvar($package, $1, $2); } else { warning("Malformed line: $_"); } } } } =head1 CONFORMS TO Debian policy, version 3.9.4 PHP PEAR policy, version yet-to-be-written =head1 SEE ALSO F, L L (Note: This program is not part of debhelper) =head1 AUTHOR Mathieu Parent