#!/usr/local/bin/perl
# Install the package for a given PHP module, based on the version
require './phpini-lib.pl';
&foreign_require("software");
&ReadParse();
&error_setup($text{'imod_err'});
&can_php_config($in{'file'}) || &error($text{'list_ecannot'});
$access{'global'} || &error($text{'mods_ecannot'});
&trim($in{'mod'}) || &error($text{'imod_emod'});
my $filever = &get_php_ini_version($in{'file'});
my $ver = $filever || &get_php_binary_version($in{'file'});
$ver || &error(&text('mods_egetver', "".&html_escape($in{'file'}).""));
# Work out possible package names
my @mods = &unique(split /(?:\s*,\s*|\s+)/, ($in{'mod'}));
my %want = map { lc($_) => 1 } grep { length } @mods;
my @poss;
foreach my $mod (@mods) {
push(@poss,
{ mod => $mod,
packages => [&php_module_packages($mod, $ver, $filever)] });
}
(grep { @{ $_->{packages} } } @poss) or &error($text{'mods_eposs'});
# Is it already installed?
$inidir = &get_php_ini_dir($in{'file'});
my @got = grep { $want{ lc($_->{'mod'}) } } &list_php_ini_modules($inidir);
my @already;
if (@got) {
foreach my $g (@got) {
my ($p) = grep { $_->{'mod'} eq $g->{'mod'} } @poss;
next unless $p && @{$p->{'packages'}};
foreach my $pkg (@{$p->{'packages'}}) {
my @pinfo = &software::package_info($pkg);
@pinfo = &software::virtual_package_info($pkg)
if (!@pinfo);
if (@pinfo) {
# Update list of modules to install
@mods = grep { lc($_) ne lc($g->{'mod'}) }
@mods;
push(@already, $g->{'mod'});
}
}
}
}
# Print header
&ui_print_unbuffered_header(
"".&html_escape($in{'file'})."",
$text{'imod_title'}, "");
if (@already) {
print &text('imod_skipwhy')."
\n";
print &text('imod_skipwhich', "".
&html_escape(join(", ", &unique(@already)))."",
$ver)."