summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Install
diff options
context:
space:
mode:
authorEd Morley <emorley@mozilla.com>2015-06-19 21:00:15 +0200
committerDavid Lawrence <dkl@mozilla.com>2015-06-19 21:00:27 +0200
commite85aa1b9584edce2f7f095c5fbeff4da13a1c2d1 (patch)
tree6fa97172a474edb9af8e1221b6def392e7b749c9 /Bugzilla/Install
parentf53defbc217f63e9504da972aa05664ab0bd9336 (diff)
downloadbugzilla-e85aa1b9584edce2f7f095c5fbeff4da13a1c2d1.tar.gz
bugzilla-e85aa1b9584edce2f7f095c5fbeff4da13a1c2d1.tar.xz
Bug 1174695: The cpanfile created by checksetup.pl defines the same feature multiple times, breaking cpanm
r=dkl,a=glob
Diffstat (limited to 'Bugzilla/Install')
-rw-r--r--Bugzilla/Install/Requirements.pm27
1 files changed, 21 insertions, 6 deletions
diff --git a/Bugzilla/Install/Requirements.pm b/Bugzilla/Install/Requirements.pm
index bbf7d1037..b48487c31 100644
--- a/Bugzilla/Install/Requirements.pm
+++ b/Bugzilla/Install/Requirements.pm
@@ -887,28 +887,43 @@ sub export_cpanfile {
$cpanfile .= $requires;
}
# Recommended modules
+ $cpanfile .= "\n# Optional\n";
+ my %features;
foreach my $module (@{ OPTIONAL_MODULES() }) {
- my $recommends = "";
if (exists $module->{feature}) {
foreach my $feature (@{ $module->{feature} }) {
- $recommends .= "feature '" . $feature . "', '" . $module->{package} . "' => sub {\n";
- $recommends .= " recommends '" . $module->{module} . "'";
- $recommends .= ", '" . $module->{version} . "'" if $module->{version};
- $recommends .= ";\n};\n";
+ # cpanm requires that each feature only be defined in the cpanfile
+ # once, so we use an intermediate hash to consolidate/de-dupe the
+ # modules associated with each feature.
+ $features{$feature}{$module->{module}} = $module->{version};
}
}
else {
+ my $recommends = "";
$recommends .= "recommends '" . $module->{module} . "'";
$recommends .= ", '" . $module->{version} . "'" if $module->{version};
$recommends .= ";\n";
+ $cpanfile .= $recommends;
+ }
+ }
+ foreach my $feature (sort keys %features) {
+ my $recommends = "";
+ $recommends .= "feature '" . $feature . "' => sub {\n";
+ foreach my $module (sort keys %{ $features{$feature} }) {
+ my $version = $features{$feature}{$module};
+ $recommends .= " recommends '" . $module . "'";
+ $recommends .= ", '$version'" if $version;
+ $recommends .= ";\n";
}
+ $recommends .= "};\n";
$cpanfile .= $recommends;
}
# Database modules
+ $cpanfile .= "\n# Database support\n";
foreach my $db (keys %{ DB_MODULE() }) {
next if !exists DB_MODULE->{$db}->{dbd};
my $dbd = DB_MODULE->{$db}->{dbd};
- my $recommends .= "feature '$db', '" . $dbd->{package} . "' => sub {\n";
+ my $recommends .= "feature '$db' => sub {\n";
$recommends .= " recommends '" . $dbd->{module} . "'";
$recommends .= ", '" . $dbd->{version} . "'" if $dbd->{version};
$recommends .= ";\n};\n";