summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.circleci/config.yml2
-rw-r--r--Dockerfile2
-rwxr-xr-xMakefile.PL740
3 files changed, 346 insertions, 398 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9e84e304c..061ed9903 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -7,7 +7,7 @@ version: 2
defaults:
bmo_slim_image: &bmo_slim_image
- image: mozillabteam/bmo-slim:20181008.1
+ image: mozillabteam/bmo-slim:20181011.1
user: app
mysql_image: &mysql_image
diff --git a/Dockerfile b/Dockerfile
index 17ea8a615..18c1af20e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM mozillabteam/bmo-slim:20181008.1
+FROM mozillabteam/bmo-slim:20181011.1
ARG CI
ARG CIRCLE_SHA1
diff --git a/Makefile.PL b/Makefile.PL
index c8d78f5cd..27a9e989e 100755
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -14,9 +14,13 @@ use File::Basename;
use File::Spec;
BEGIN {
- require lib;
- my $dir = File::Spec->rel2abs( dirname(__FILE__) );
- lib->import( $dir, File::Spec->catdir( $dir, 'lib' ), File::Spec->catdir( $dir, qw(local lib perl5) ) );
+ require lib;
+ my $dir = File::Spec->rel2abs(dirname(__FILE__));
+ lib->import(
+ $dir,
+ File::Spec->catdir($dir, 'lib'),
+ File::Spec->catdir($dir, qw(local lib perl5))
+ );
}
use ExtUtils::MakeMaker 7.22;
@@ -25,436 +29,380 @@ use File::Spec;
use English qw(-no_match_vars $OSNAME);
BEGIN {
- if ( $ENV{BZ_SILENT_MAKEFILE} ) {
- open STDOUT, '>>', File::Spec->devnull or die "redirecting STDOUT to /dev/null failed: $!";
- open STDERR, '>>', File::Spec->devnull or die "redirecting STDERR to /dev/null failed: $!";
- }
+ if ($ENV{BZ_SILENT_MAKEFILE}) {
+ open STDOUT, '>>', File::Spec->devnull
+ or die "redirecting STDOUT to /dev/null failed: $!";
+ open STDERR, '>>', File::Spec->devnull
+ or die "redirecting STDERR to /dev/null failed: $!";
+ }
}
# PREREQ_PM
my %requires = (
- 'Algorithm::BloomFilter' => '0.02',
- 'CGI' => '4.31',
- 'CGI::Compile' => 0,
- 'CGI::Emulate::PSGI' => 0,
- 'CPAN::Meta::Prereqs' => '2.132830',
- 'CPAN::Meta::Requirements' => '2.121',
- 'Class::XSAccessor' => '1.18',
- 'DBI' => '1.614',
- 'DBIx::Connector' => 0,
- 'Data::Password::passwdqc' => '0.08',
- 'Date::Format' => '2.23',
- 'DateTime' => '0.75',
- 'DateTime::TimeZone' => '2.11',
- 'Devel::NYTProf' => '6.04',
- 'Digest::SHA' => '5.47',
- 'Email::MIME' => '1.904',
- 'Email::Send' => '1.911',
- 'FFI::Platypus' => 0,
- 'File::Slurp' => '9999.13',
- 'File::Slurper' => '0.012',
- 'Future' => '0.34',
- 'HTML::Escape' => '1.10',
- 'IPC::System::Simple' => 0,
- 'IO::Async' => '0.71',
- 'JSON::MaybeXS' => '1.003008',
- 'JSON::XS' => '2.01',
- 'LWP::Protocol::https' => '6.07',
- 'LWP::UserAgent' => '6.26',
- 'List::MoreUtils' => '0.418',
- 'Log::Dispatch' => '2.67',
- 'Log::Log4perl' => '1.49',
- 'Math::Random::ISAAC' => '1.0.1',
- 'Module::Metadata' => '1.000033',
- 'Module::Runtime' => '0.014',
- 'Mojolicious' => '7.71',
- 'MojoX::Log::Log4perl::Tiny' => '0.01',
- 'Moo' => '2.002004',
- 'MooX::StrictConstructor' => '0.008',
- 'Mozilla::CA' => '20160104',
- 'Package::Stash' => '0.37',
- 'Parse::CPAN::Meta' => '1.44',
- 'Role::Tiny' => '2.000003',
- 'Scope::Guard' => '0.21',
- 'Sereal' => '4.004',
- 'Taint::Util' => '0.08',
- 'Template' => '2.24',
- 'Text::CSV_XS' => '1.26',
- 'Throwable' => '0.200013',
- 'Sub::Quote' => '2.005000',
- 'Type::Tiny' => '1.004002',
- 'URI' => '1.55',
- 'URI::Escape::XS' => '0.14',
- 'version' => '0.87',
- 'EV' => '4.0',
+ 'Algorithm::BloomFilter' => '0.02',
+ 'CGI' => '4.31',
+ 'CGI::Compile' => 0,
+ 'CGI::Emulate::PSGI' => 0,
+ 'CPAN::Meta::Prereqs' => '2.132830',
+ 'CPAN::Meta::Requirements' => '2.121',
+ 'Class::XSAccessor' => '1.18',
+ 'DBI' => '1.614',
+ 'DBIx::Connector' => 0,
+ 'Data::Password::passwdqc' => '0.08',
+ 'Date::Format' => '2.23',
+ 'DateTime' => '0.75',
+ 'DateTime::TimeZone' => '2.11',
+ 'Devel::NYTProf' => '6.04',
+ 'Digest::SHA' => '5.47',
+ 'Email::MIME' => '1.904',
+ 'Email::Send' => '1.911',
+ 'FFI::Platypus' => 0,
+ 'File::Slurp' => '9999.13',
+ 'File::Slurper' => '0.012',
+ 'Future' => '0.34',
+ 'HTML::Escape' => '1.10',
+ 'IPC::System::Simple' => 0,
+ 'IO::Async' => '0.71',
+ 'JSON::MaybeXS' => '1.003008',
+ 'JSON::XS' => '2.01',
+ 'LWP::Protocol::https' => '6.07',
+ 'LWP::UserAgent' => '6.26',
+ 'List::MoreUtils' => '0.418',
+ 'Log::Dispatch' => '2.67',
+ 'Log::Log4perl' => '1.49',
+ 'Math::Random::ISAAC' => '1.0.1',
+ 'Module::Metadata' => '1.000033',
+ 'Module::Runtime' => '0.014',
+ 'Mojolicious' => '8.02',
+ 'MojoX::Log::Log4perl::Tiny' => '0.01',
+ 'Mojo::JWT' => '0.07',
+ 'Mojolicious::Plugin::OAuth2::Server' => '0.42',
+ 'Moo' => '2.002004',
+ 'MooX::StrictConstructor' => '0.008',
+ 'Mozilla::CA' => '20160104',
+ 'Package::Stash' => '0.37',
+ 'Parse::CPAN::Meta' => '1.44',
+ 'Role::Tiny' => '2.000003',
+ 'Scope::Guard' => '0.21',
+ 'Sereal' => '4.004',
+ 'Taint::Util' => '0.08',
+ 'Template' => '2.24',
+ 'Text::CSV_XS' => '1.26',
+ 'Throwable' => '0.200013',
+ 'Sub::Quote' => '2.005000',
+ 'Type::Tiny' => '1.004002',
+ 'URI' => '1.55',
+ 'URI::Escape::XS' => '0.14',
+ 'version' => '0.87',
+ 'EV' => '4.0',
);
-my %build_requires = ( 'ExtUtils::MakeMaker' => '7.22', );
+my %build_requires = ('ExtUtils::MakeMaker' => '7.22',);
my %test_requires = (
- 'Capture::Tiny' => 0,
- 'DBD::SQLite' => '1.29',
- 'Perl::Critic::Freenode' => 0,
- 'Perl::Tidy' => '20180220',
- 'Pod::Coverage' => 0,
- 'Test::More' => 0,
- 'Test::Perl::Critic::Progressive' => 0,
- 'Test::Selenium::Firefox' => 0,
- 'Test::WWW::Selenium' => 0,
+ 'Capture::Tiny' => 0,
+ 'DBD::SQLite' => '1.29',
+ 'Perl::Critic::Freenode' => 0,
+ 'Perl::Tidy' => '20180220',
+ 'Pod::Coverage' => 0,
+ 'Test::More' => 0,
+ 'Test::Perl::Critic::Progressive' => 0,
+ 'Test::Selenium::Firefox' => 0,
+ 'Test::WWW::Selenium' => 0,
);
-my %recommends = ( Safe => '2.30',);
+my %recommends = (Safe => '2.30',);
# Windows requires some additional modules.
-if ( $OSNAME eq 'MSWin32' ) {
- $requires{'Win32'} = '0.35';
- $requires{'Win32::API'} = '0.55';
- $requires{'DateTime::TimeZone::Local::Win32'} = '1.64';
+if ($OSNAME eq 'MSWin32') {
+ $requires{'Win32'} = '0.35';
+ $requires{'Win32::API'} = '0.55';
+ $requires{'DateTime::TimeZone::Local::Win32'} = '1.64';
}
-if ( $OSNAME eq 'linux' && -f '/etc/debian_version' ) {
- my @extra = qw(
- Test::Pod::Coverage
- Pod::Coverage::TrustPod
- Test::CPAN::Meta
- Test::Pod
- );
- $requires{$_} = 0 for @extra;
+if ($OSNAME eq 'linux' && -f '/etc/debian_version') {
+ my @extra = qw(
+ Test::Pod::Coverage
+ Pod::Coverage::TrustPod
+ Test::CPAN::Meta
+ Test::Pod
+ );
+ $requires{$_} = 0 for @extra;
}
my %optional_features = (
- alien_cmark => {
- description => 'Support GitHub-flavored markdown',
- prereqs => {
- runtime => {
- requires => { 'Alien::libcmark_gfm' => '3' },
- },
- },
- },
- argon2 => {
- description => 'Support hashing passwords with Argon2',
- prereqs => {
- runtime => {
- requires => {
- 'Crypt::Argon2' => '0.004',
- },
- },
- },
- },
- smtp_auth => {
- description => 'SMTP Authentication',
- prereqs => { runtime => { requires => { 'Authen::SASL' => 0 } } },
- },
- detect_charset => {
- description => 'Automatic charset detection for text attachments',
- prereqs => {
- runtime => { requires => { 'Encode::Detect' => 0, Encode => '2.21' } }
- },
- },
- chart_clicker => {
- description => 'Support nice-looking charts',
- prereqs => {
- runtime => { requires => { 'Chart::Clicker' => 0 } },
- },
- },
- new_charts => {
- description => 'New Charts',
- prereqs => {
- runtime => { requires => { 'Chart::Lines' => 'v2.4.10', GD => '1.20' } }
- }
- },
- html_desc => {
- description => 'More HTML in Product/Group Descriptions',
- prereqs => {
- runtime => {
- requires => { 'HTML::Parser' => '3.67', 'HTML::Scrubber' => 0 }
- }
- }
- },
- markdown => {
- description => 'Markdown syntax support for comments',
- prereqs => {
- runtime => { requires => { 'Text::MultiMarkdown' => '1.000034' } }
- }
- },
- pg => {
- description => 'Postgres database support',
- prereqs => { runtime => { requires => { 'DBD::Pg' => 'v2.19.3' } } },
- },
- memcached => {
- description => 'Memcached Support',
- prereqs => {
- runtime => { requires => { 'Cache::Memcached::Fast' => '0.17' } }
- }
- },
- updates => {
- description => 'Automatic Update Notifications',
- prereqs => {
- runtime => { requires => { 'XML::Twig' => 0 } }
- }
- },
- auth_radius => {
- description => 'RADIUS Authentication',
- prereqs => { runtime => { requires => { 'Authen::Radius' => 0 } } }
- },
- documentation => {
- description => 'Documentation',
- prereqs => {
- runtime => {
- requires => {
- 'File::Which' => 0,
- 'File::Copy::Recursive' => 0,
- }
- }
- },
- },
- xmlrpc => {
- description => 'XML-RPC Interface',
- prereqs => {
- runtime => {
- requires => {
- 'XMLRPC::Lite' => '0.712',
- 'SOAP::Lite' => '0.712',
- 'Test::Taint' => '1.06'
- }
- }
- }
- },
- auth_ldap => {
- description => 'LDAP Authentication',
- prereqs => { runtime => { requires => { 'Net::LDAP' => 0 } } },
- },
- old_charts => {
- description => 'Old Charts',
- prereqs => {
- runtime => {
- requires => { GD => '1.20', 'Chart::Lines' => 'v2.4.10' }
- },
- },
- },
- moving => {
- description => 'Move Bugs Between Installations',
- prereqs => {
- runtime => {
- requires => { 'MIME::Parser' => '5.406', 'XML::Twig' => 0 }
- }
- },
- },
- oracle => {
- description => 'Oracle database support',
- prereqs => { runtime => { requires => { 'DBD::Oracle' => '1.19' } } }
- },
- s3 => {
- description => 'Amazon S3 Attachment Storage',
- prereqs => {
- runtime => {
- requires => {
- 'Class::Accessor::Fast' => 0,
- 'XML::Simple' => 0,
- 'URI::Escape' => 0,
- }
- }
- }
- },
- typesniffer => {
- description => 'Sniff MIME type of attachments',
- prereqs => {
- runtime => {
- requires => {
- 'IO::Scalar' => 0,
- 'File::MimeInfo::Magic' => 0,
- },
- },
- },
- },
- sqlite => {
- description => 'SQLite database support',
- prereqs => { runtime => { requires => { 'DBD::SQLite' => '1.29' } } },
- },
- mysql => {
- description => 'MySQL database support',
- prereqs => { runtime => { requires => { 'DBD::mysql' => '4.037' } } }
- },
- jsonrpc => {
- description => 'JSON-RPC Interface',
- prereqs => {
- runtime => { requires => { 'JSON::RPC' => '== 1.01', 'Test::Taint' => '1.06' } }
- }
+ alien_cmark => {
+ description => 'Support GitHub-flavored markdown',
+ prereqs => {runtime => {requires => {'Alien::libcmark_gfm' => '3'},},},
+ },
+ argon2 => {
+ description => 'Support hashing passwords with Argon2',
+ prereqs => {runtime => {requires => {'Crypt::Argon2' => '0.004',},},},
+ },
+ smtp_auth => {
+ description => 'SMTP Authentication',
+ prereqs => {runtime => {requires => {'Authen::SASL' => 0}}},
+ },
+ detect_charset => {
+ description => 'Automatic charset detection for text attachments',
+ prereqs =>
+ {runtime => {requires => {'Encode::Detect' => 0, Encode => '2.21'}}},
+ },
+ chart_clicker => {
+ description => 'Support nice-looking charts',
+ prereqs => {runtime => {requires => {'Chart::Clicker' => 0}},},
+ },
+ new_charts => {
+ description => 'New Charts',
+ prereqs =>
+ {runtime => {requires => {'Chart::Lines' => 'v2.4.10', GD => '1.20'}}}
+ },
+ html_desc => {
+ description => 'More HTML in Product/Group Descriptions',
+ prereqs => {
+ runtime => {requires => {'HTML::Parser' => '3.67', 'HTML::Scrubber' => 0}}
+ }
+ },
+ markdown => {
+ description => 'Markdown syntax support for comments',
+ prereqs => {runtime => {requires => {'Text::MultiMarkdown' => '1.000034'}}}
+ },
+ pg => {
+ description => 'Postgres database support',
+ prereqs => {runtime => {requires => {'DBD::Pg' => 'v2.19.3'}}},
+ },
+ memcached => {
+ description => 'Memcached Support',
+ prereqs => {runtime => {requires => {'Cache::Memcached::Fast' => '0.17'}}}
+ },
+ updates => {
+ description => 'Automatic Update Notifications',
+ prereqs => {runtime => {requires => {'XML::Twig' => 0}}}
+ },
+ auth_radius => {
+ description => 'RADIUS Authentication',
+ prereqs => {runtime => {requires => {'Authen::Radius' => 0}}}
+ },
+ documentation => {
+ description => 'Documentation',
+ prereqs => {
+ runtime =>
+ {requires => {'File::Which' => 0, 'File::Copy::Recursive' => 0,}}
},
- graphical_reports => {
- description => 'Graphical Reports',
- prereqs => {
- runtime => {
- requires => {
- 'GD::Text' => 0,
- 'Template::Plugin::GD::Image' => 0,
- 'GD::Graph' => 0,
- GD => '1.20',
- }
- }
+ },
+ xmlrpc => {
+ description => 'XML-RPC Interface',
+ prereqs => {
+ runtime => {
+ requires => {
+ 'XMLRPC::Lite' => '0.712',
+ 'SOAP::Lite' => '0.712',
+ 'Test::Taint' => '1.06'
}
- },
- mfa => {
- description => 'Multi-Factor Authentication',
- prereqs => {
- runtime => {
- requires => {
- 'Auth::GoogleAuth' => '1.01',
- 'GD::Barcode::QRcode' => '0',
- },
- }
- },
- },
- inbound_email => {
- description => 'Inbound Email',
- prereqs => {
- runtime => {
- requires => {
- 'Email::MIME::Attachment::Stripper' => 0,
- 'Email::Reply' => 0,
- }
- }
- },
- },
- patch_viewer => {
- description => 'Patch Viewer',
- prereqs => { runtime => { requires => { PatchReader => '0.9.6' } } }
- },
- rest => {
- description => 'REST Interface',
- prereqs => {
- runtime => {
- requires => {
- 'Test::Taint' => '1.06',
- 'JSON::RPC' => '==1.01',
- }
- }
+ }
+ }
+ },
+ auth_ldap => {
+ description => 'LDAP Authentication',
+ prereqs => {runtime => {requires => {'Net::LDAP' => 0}}},
+ },
+ old_charts => {
+ description => 'Old Charts',
+ prereqs =>
+ {runtime => {requires => {GD => '1.20', 'Chart::Lines' => 'v2.4.10'}},},
+ },
+ moving => {
+ description => 'Move Bugs Between Installations',
+ prereqs =>
+ {runtime => {requires => {'MIME::Parser' => '5.406', 'XML::Twig' => 0}}},
+ },
+ oracle => {
+ description => 'Oracle database support',
+ prereqs => {runtime => {requires => {'DBD::Oracle' => '1.19'}}}
+ },
+ s3 => {
+ description => 'Amazon S3 Attachment Storage',
+ prereqs => {
+ runtime => {
+ requires => {
+ 'Class::Accessor::Fast' => 0,
+ 'XML::Simple' => 0,
+ 'URI::Escape' => 0,
}
- },
- linux_pid => {
- description => 'Linux::PID',
- prereqs => {
- runtime => {
- requires => { 'Linux::Pid' => 0 },
- },
- },
- },
- linux_smaps => {
- description => 'Linux::Smaps for limiting memory usage',
- prereqs => {
- runtime => {
- requires => { 'Linux::Smaps' => '0' },
- }
- },
- },
- linux_pdeath => {
- description => 'Linux::Pdeathsig for a good parent/child relationships',
- prereqs => {
- runtime => {
- requires => { 'Linux::Pdeathsig' => 0 },
- },
- },
- },
- jobqueue => {
- description => 'Mail Queueing',
- prereqs => {
- runtime => {
- requires => { TheSchwartz => '1.10', 'Daemon::Generic' => 0 }
- }
+ }
+ }
+ },
+ typesniffer => {
+ description => 'Sniff MIME type of attachments',
+ prereqs => {
+ runtime =>
+ {requires => {'IO::Scalar' => 0, 'File::MimeInfo::Magic' => 0,},},
+ },
+ },
+ sqlite => {
+ description => 'SQLite database support',
+ prereqs => {runtime => {requires => {'DBD::SQLite' => '1.29'}}},
+ },
+ mysql => {
+ description => 'MySQL database support',
+ prereqs => {runtime => {requires => {'DBD::mysql' => '4.037'}}}
+ },
+ jsonrpc => {
+ description => 'JSON-RPC Interface',
+ prereqs => {
+ runtime =>
+ {requires => {'JSON::RPC' => '== 1.01', 'Test::Taint' => '1.06'}}
+ }
+ },
+ graphical_reports => {
+ description => 'Graphical Reports',
+ prereqs => {
+ runtime => {
+ requires => {
+ 'GD::Text' => 0,
+ 'Template::Plugin::GD::Image' => 0,
+ 'GD::Graph' => 0,
+ GD => '1.20',
}
- },
- elasticsearch => {
- description => 'Elasticsearch-powered searches',
- prereqs => {
- runtime => {
- recommends => { 'Term::ProgressBar' => 0 },
- requires => { 'Search::Elasticsearch' => 0 },
+ }
+ }
+ },
+ mfa => {
+ description => 'Multi-Factor Authentication',
+ prereqs => {
+ runtime => {
+ requires =>
+ {'Auth::GoogleAuth' => '1.01', 'GD::Barcode::QRcode' => '0',},
+ }
+ },
+ },
+ inbound_email => {
+ description => 'Inbound Email',
+ prereqs => {
+ runtime => {
+ requires =>
+ {'Email::MIME::Attachment::Stripper' => 0, 'Email::Reply' => 0,}
+ }
+ },
+ },
+ patch_viewer => {
+ description => 'Patch Viewer',
+ prereqs => {runtime => {requires => {PatchReader => '0.9.6'}}}
+ },
+ rest => {
+ description => 'REST Interface',
+ prereqs => {
+ runtime =>
+ {requires => {'Test::Taint' => '1.06', 'JSON::RPC' => '==1.01',}}
+ }
+ },
+ linux_pid => {
+ description => 'Linux::PID',
+ prereqs => {runtime => {requires => {'Linux::Pid' => 0},},},
+ },
+ linux_smaps => {
+ description => 'Linux::Smaps::Tiny for limiting memory usage',
+ prereqs => {runtime => {requires => {'Linux::Smaps::Tiny' => '0'}}},
+ },
+ linux_pdeath => {
+ description => 'Linux::Pdeathsig for a good parent/child relationships',
+ prereqs => {runtime => {requires => {'Linux::Pdeathsig' => 0},},},
+ },
+ jobqueue => {
+ description => 'Mail Queueing',
+ prereqs => {
+ runtime => {requires => {TheSchwartz => '1.10', 'Daemon::Generic' => 0}}
+ }
+ },
+ elasticsearch => {
+ description => 'Elasticsearch-powered searches',
+ prereqs => {
+ runtime => {
+ recommends => {'Term::ProgressBar' => 0},
+ requires => {'Search::Elasticsearch' => 0},
- },
- },
- },
- sentry => {
- description => 'Sentry Support',
- prereqs => {
- runtime => {
- requires => { 'Log::Log4perl::Appender::Raven' => '0.006' },
- },
- },
+ },
},
- datadog => {
- description => 'Data Dog support',
- prereqs => {
- runtime => {
- requires => { 'DataDog::DogStatsd' => '0.05' },
- },
- },
+ },
+ sentry => {
+ description => 'Sentry Support',
+ prereqs => {
+ runtime => {requires => {'Log::Log4perl::Appender::Raven' => '0.006'},},
},
+ },
+ datadog => {
+ description => 'Data Dog support',
+ prereqs => {runtime => {requires => {'DataDog::DogStatsd' => '0.05'},},},
+ },
);
-for my $file ( glob 'extensions/*/Config.pm' ) {
- my $dir = dirname($file);
- my $name = basename($dir);
+for my $file (glob 'extensions/*/Config.pm') {
+ my $dir = dirname($file);
+ my $name = basename($dir);
- next if -f File::Spec->catfile( $dir, 'disabled' );
- require $file;
- my $class = "Bugzilla::Extension::$name";
- if ( $class->can('REQUIRED_MODULES') ) {
- foreach my $required_module ( @{ $class->REQUIRED_MODULES() } ) {
- $requires{ $required_module->{module} }
- = $required_module->{version};
- }
+ next if -f File::Spec->catfile($dir, 'disabled');
+ require $file;
+ my $class = "Bugzilla::Extension::$name";
+ if ($class->can('REQUIRED_MODULES')) {
+ foreach my $required_module (@{$class->REQUIRED_MODULES()}) {
+ $requires{$required_module->{module}} = $required_module->{version};
}
+ }
- if ( $class->can('OPTIONAL_MODULES') ) {
- my $default_feature = 'extension_' . lc($name) . '_optional';
- foreach my $mod ( @{ $class->OPTIONAL_MODULES } ) {
- my @features
- = $mod->{feature} ? @{ $mod->{feature} } : ($default_feature);
- foreach my $feature (@features) {
- $optional_features{$feature}{prereqs}{runtime}{requires}{ $mod->{module} } = $mod->{version} // 0;
- }
- }
+ if ($class->can('OPTIONAL_MODULES')) {
+ my $default_feature = 'extension_' . lc($name) . '_optional';
+ foreach my $mod (@{$class->OPTIONAL_MODULES}) {
+ my @features = $mod->{feature} ? @{$mod->{feature}} : ($default_feature);
+ foreach my $feature (@features) {
+ $optional_features{$feature}{prereqs}{runtime}{requires}{$mod->{module}}
+ = $mod->{version} // 0;
+ }
}
+ }
}
# BMO Customization
my @bmo_features = grep { is_bmo_feature($_) } keys %optional_features;
$optional_features{bmo} = {
- description => 'features that bmo needs',
- prereqs => {
- runtime => {
- requires => { map { %{ $optional_features{$_}{prereqs}{runtime}{requires} } } @bmo_features },
- },
- },
+ description => 'features that bmo needs',
+ prereqs => {
+ runtime => {
+ requires => {
+ map { %{$optional_features{$_}{prereqs}{runtime}{requires}} }
+ @bmo_features
+ },
+ },
+ },
};
WriteMakefile(
- NAME => 'Bugzilla',
- AUTHOR => q{Bugzilla Developers <developers@bugzilla.org>},
- VERSION_FROM => 'Bugzilla.pm',
- ABSTRACT => 'Bugzilla Bug Tracking System',
- LICENSE => 'Mozilla_2_0',
- MIN_PERL_VERSION => '5.10.1',
- CONFIGURE_REQUIRES => { 'ExtUtils::MakeMaker' => $build_requires{'ExtUtils::MakeMaker'} },
- PREREQ_PM => { %requires },
- BUILD_REQUIRES => { %build_requires },
- TEST_REQUIRES => { %test_requires },
- META_MERGE => {
- 'meta-spec' => {
- url => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
- version => '2'
- },
- dynamic_config => 1,
- prereqs => {
- build => { requires => { %build_requires } },
- runtime => { requires => { %requires }, recommends => { %recommends } },
- test => { requires => { %test_requires } },
- },
- optional_features => \%optional_features,
- },
+ NAME => 'Bugzilla',
+ AUTHOR => q{Bugzilla Developers <developers@bugzilla.org>},
+ VERSION_FROM => 'Bugzilla.pm',
+ ABSTRACT => 'Bugzilla Bug Tracking System',
+ LICENSE => 'Mozilla_2_0',
+ MIN_PERL_VERSION => '5.10.1',
+ CONFIGURE_REQUIRES =>
+ {'ExtUtils::MakeMaker' => $build_requires{'ExtUtils::MakeMaker'}},
+ PREREQ_PM => {%requires},
+ BUILD_REQUIRES => {%build_requires},
+ TEST_REQUIRES => {%test_requires},
+ META_MERGE => {
+ 'meta-spec' => {
+ url => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
+ version => '2'
+ },
+ dynamic_config => 1,
+ prereqs => {
+ build => {requires => {%build_requires}},
+ runtime => {requires => {%requires}, recommends => {%recommends}},
+ test => {requires => {%test_requires}},
+ },
+ optional_features => \%optional_features,
+ },
);
sub MY::postamble {
- return <<"MAKE";
+ return <<"MAKE";
GEN_CPANFILE_ARGS = -D bmo
cpanfile: MYMETA.json
\t\$(PERLRUN) gen-cpanfile.pl \$(GEN_CPANFILE_ARGS)
@@ -468,9 +416,9 @@ MAKE
}
sub is_bmo_feature {
- local $_ = shift;
- return $OSNAME eq 'linux' if /^linux/;
- return !m{
+ local $_ = shift;
+ return $OSNAME eq 'linux' if /^linux/;
+ return !m{
^
(?: pg
| oracle