diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1bafd09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/perl-5.26.3.tar.bz2 diff --git a/EMPTY b/EMPTY deleted file mode 100644 index 0519ecb..0000000 --- a/EMPTY +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Pod-Html-license-clarification b/Pod-Html-license-clarification new file mode 100644 index 0000000..bd567f1 --- /dev/null +++ b/Pod-Html-license-clarification @@ -0,0 +1,41 @@ +Date: Sun, 15 Mar 2015 21:22:10 -0600 +Subject: Re: Pod::Html license +From: Tom Christiansen +To: Petr Šabata +Cc: Tom Christiansen , marcgreen@cpan.org, + jplesnik@redhat.com +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Content-Type: text/plain; charset=utf-8 + +Yes, it was supposed to be licensed just like the rest of Perl. + +Sent from my Sprint phone + +Petr Šabata wrote: + +>Marc, Tom, +> +>I'm reviewing licensing of our perl package in Fedora and +>noticed Pod::HTML and its pod2html script are licensed under +>the Artistic license (only). +> +>This is an issue for us as this license isn't considered free by +>FSF [0]. Unless the license of this core component changes, we +>will have to drop it from the tarball and remove support for it +>from all the modules we ship that use it, such as Module::Build +>or Module::Install. +> +>What I've seen in the past is authors originally claiming their +>module was released under Artistic while what they actually meant +>was the common `the same as perl itself', i.e. `GPL+/Aristic' [1], +>an FSF free license. Is it possible this is also the case +>of Pod::Html? +> +>Thanks, +>Petr +> +>(also CC'ing Jitka, the primary package maintainer in Fedora) +> +>[0] https://www.gnu.org/licenses/license-list.html#ArtisticLicense +>[1] https://www.gnu.org/licenses/license-list.html#PerlLicense diff --git a/gendep.macros b/gendep.macros new file mode 100644 index 0000000..4b7f07b --- /dev/null +++ b/gendep.macros @@ -0,0 +1,2100 @@ +%global gendep_perl \ +%{nil} +%global gendep_perl_Archive_Tar \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(Archive::Tar) \ +Requires: perl(Archive::Tar::Constant) \ +Requires: perl(Archive::Tar::File) \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(Data::Dumper) \ +Requires: perl(Exporter) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Find) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Unix) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Getopt::Std) \ +Requires: perl(IO::File) \ +Requires: perl(IO::Handle) \ +Requires: perl(IO::Zlib) \ +Requires: perl(Pod::Usage) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Archive::Tar) = 2.24 \ +Provides: perl(Archive::Tar::Constant) = 2.24 \ +Provides: perl(Archive::Tar::File) = 2.24 \ +%{nil} +%global gendep_perl_Attribute_Handlers \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Attribute::Handlers) = 0.99 \ +%{nil} +%global gendep_perl_B_Debug \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(B) \ +Requires: perl(Config) \ +Requires: perl(strict) \ +Provides: perl(B::Debug) = 1.24 \ +%{nil} +%global gendep_perl_CPAN \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(App::Cpan) \ +Requires: perl(CPAN) >= 1.80 \ +Requires: perl(CPAN::Author) \ +Requires: perl(CPAN::Bundle) \ +Requires: perl(CPAN::CacheMgr) \ +Requires: perl(CPAN::Complete) \ +Requires: perl(CPAN::Debug) \ +Requires: perl(CPAN::DeferredCode) \ +Requires: perl(CPAN::Distribution) \ +Requires: perl(CPAN::Distroprefs) \ +Requires: perl(CPAN::Distrostatus) \ +Requires: perl(CPAN::Exception::RecursiveDependency) \ +Requires: perl(CPAN::Exception::yaml_not_installed) \ +Requires: perl(CPAN::Exception::yaml_process_error) \ +Requires: perl(CPAN::FTP) \ +Requires: perl(CPAN::FTP::netrc) \ +Requires: perl(CPAN::HTTP::Credentials) \ +Requires: perl(CPAN::HandleConfig) \ +Requires: perl(CPAN::Index) >= 1.93 \ +Requires: perl(CPAN::InfoObj) \ +Requires: perl(CPAN::LWP::UserAgent) \ +Requires: perl(CPAN::Mirrors) \ +Requires: perl(CPAN::Module) \ +Requires: perl(CPAN::Prompt) \ +Requires: perl(CPAN::Queue) \ +Requires: perl(CPAN::Shell) \ +Requires: perl(CPAN::Tarzip) \ +Requires: perl(CPAN::URL) \ +Requires: perl(CPAN::Version) \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(DirHandle) \ +Requires: perl(Exporter) \ +Requires: perl(ExtUtils::MakeMaker) \ +Requires: perl(Fcntl) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Copy) \ +Requires: perl(File::Find) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Functions) \ +Requires: perl(FileHandle) \ +Requires: perl(Getopt::Std) \ +Requires: perl(HTTP::Tiny) >= 0.005 \ +Requires: perl(Net::Ping) \ +Requires: perl(Safe) \ +Requires: perl(Sys::Hostname) \ +Requires: perl(Text::ParseWords) \ +Requires: perl(Text::Wrap) \ +Requires: perl(autouse) \ +Requires: perl(constant) \ +Requires: perl(if) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(App::Cpan) = 1.66 \ +Provides: perl(CPAN) = 2.18 \ +Provides: perl(CPAN::Author) = 5.5002 \ +Provides: perl(CPAN::Bundle) = 5.5003 \ +Provides: perl(CPAN::CacheMgr) = 5.5002 \ +Provides: perl(CPAN::Complete) = 5.5001 \ +Provides: perl(CPAN::Debug) = 5.5001 \ +Provides: perl(CPAN::DeferredCode) = 5.50 \ +Provides: perl(CPAN::Distribution) = 2.18 \ +Provides: perl(CPAN::Distroprefs) = 6.0001 \ +Provides: perl(CPAN::Distroprefs::Iterator) \ +Provides: perl(CPAN::Distroprefs::Pref) \ +Provides: perl(CPAN::Distroprefs::Result) \ +Provides: perl(CPAN::Distroprefs::Result::Error) \ +Provides: perl(CPAN::Distroprefs::Result::Fatal) \ +Provides: perl(CPAN::Distroprefs::Result::Success) \ +Provides: perl(CPAN::Distroprefs::Result::Warning) \ +Provides: perl(CPAN::Distrostatus) = 5.5 \ +Provides: perl(CPAN::Eval) \ +Provides: perl(CPAN::Exception::RecursiveDependency) = 5.5001 \ +Provides: perl(CPAN::Exception::RecursiveDependency::na) \ +Provides: perl(CPAN::Exception::blocked_urllist) = 1.001 \ +Provides: perl(CPAN::Exception::yaml_not_installed) = 5.5 \ +Provides: perl(CPAN::Exception::yaml_process_error) = 5.5 \ +Provides: perl(CPAN::FTP) = 5.5008 \ +Provides: perl(CPAN::FTP::netrc) = 1.01 \ +Provides: perl(CPAN::FirstTime) = 5.5310 \ +Provides: perl(CPAN::HTTP::Client) = 1.9601 \ +Provides: perl(CPAN::HTTP::Credentials) = 1.9601 \ +Provides: perl(CPAN::HandleConfig) = 5.5008 \ +Provides: perl(CPAN::Index) = 2.12 \ +Provides: perl(CPAN::InfoObj) = 5.5 \ +Provides: perl(CPAN::Kwalify) = 5.50 \ +Provides: perl(CPAN::LWP::UserAgent) = 1.9601 \ +Provides: perl(CPAN::Mirrored::By) \ +Provides: perl(CPAN::Mirrors) = 2.12 \ +Provides: perl(CPAN::Module) = 5.5003 \ +Provides: perl(CPAN::Nox) = 5.5001 \ +Provides: perl(CPAN::Plugin) = 0.96 \ +Provides: perl(CPAN::Plugin::Specfile) = 0.01 \ +Provides: perl(CPAN::Prompt) = 5.5 \ +Provides: perl(CPAN::Queue) = 5.5002 \ +Provides: perl(CPAN::Queue::Item) \ +Provides: perl(CPAN::Shell) = 5.5006 \ +Provides: perl(CPAN::Tarzip) = 5.5012 \ +Provides: perl(CPAN::URL) = 5.5 \ +Provides: perl(CPAN::Version) = 5.5003 \ +%{nil} +%global gendep_perl_CPAN_Meta \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(:VERSION) >= 5.8.1 \ +Requires: perl(CPAN::Meta::Converter) >= 2.141170 \ +Requires: perl(CPAN::Meta::Feature) \ +Requires: perl(CPAN::Meta::Prereqs) \ +Requires: perl(CPAN::Meta::Requirements) >= 2.121 \ +Requires: perl(CPAN::Meta::Validator) \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Parse::CPAN::Meta) >= 1.4400 \ +Requires: perl(Parse::CPAN::Meta) >= 1.4414 \ +Requires: perl(Scalar::Util) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(CPAN::Meta) = 2.150010 \ +Provides: perl(CPAN::Meta::Converter) = 2.150010 \ +Provides: perl(CPAN::Meta::Feature) = 2.150010 \ +Provides: perl(CPAN::Meta::History) = 2.150010 \ +Provides: perl(CPAN::Meta::Merge) = 2.150010 \ +Provides: perl(CPAN::Meta::Prereqs) = 2.150010 \ +Provides: perl(CPAN::Meta::Spec) = 2.150010 \ +Provides: perl(CPAN::Meta::Validator) = 2.150010 \ +Provides: perl(Parse::CPAN::Meta) = 2.150010 \ +%{nil} +%global gendep_perl_CPAN_Meta_Requirements \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(CPAN::Meta::Requirements) = 2.140000 \ +%{nil} +%global gendep_perl_CPAN_Meta_YAML \ +Requires: perl(:VERSION) >= 5.8.1 \ +Requires: perl(B) \ +Requires: perl(Exporter) \ +Requires: perl(Scalar::Util) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(CPAN::Meta::YAML) = 0.018 \ +%{nil} +%global gendep_perl_Carp \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Carp) = 1.42 \ +Provides: perl(Carp::Heavy) = 1.42 \ +Provides: perl(Carp::Heavy) = 1.42 \ +%{nil} +%global gendep_perl_Compress_Raw_Bzip2 \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(bytes) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Compress::Raw::Bzip2) = 2.074 \ +%{nil} +%global gendep_perl_Compress_Raw_Bzip2_debuginfo \ +%{nil} +%global gendep_perl_Compress_Raw_Zlib \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(bytes) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Compress::Raw::Zlib) = 2.074 \ +%{nil} +%global gendep_perl_Compress_Raw_Zlib_debuginfo \ +%{nil} +%global gendep_perl_Config_Perl_V \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Config::Perl::V) = 0.28 \ +%{nil} +%global gendep_perl_DB_File \ +Requires: perl(:VERSION) >= 5.8.3 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(Tie::Hash) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(DB_File) = 1.840 \ +Provides: perl(DB_File::BTREEINFO) \ +Provides: perl(DB_File::HASHINFO) \ +Provides: perl(DB_File::RECNOINFO) \ +%{nil} +%global gendep_perl_DB_File_debuginfo \ +%{nil} +%global gendep_perl_Data_Dumper \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(constant) \ +Provides: perl(Data::Dumper) = 2.167 \ +%{nil} +%global gendep_perl_Data_Dumper_debuginfo \ +%{nil} +%global gendep_perl_Devel_PPPort \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Devel::PPPort) = 3.35 \ +%{nil} +%global gendep_perl_Devel_Peek \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Provides: perl(Devel::Peek) = 1.26 \ +%{nil} +%global gendep_perl_Devel_Peek_debuginfo \ +%{nil} +%global gendep_perl_Devel_SelfStubber \ +Requires: perl(File::Spec) \ +Requires: perl(SelfLoader) \ +Provides: perl(Devel::SelfStubber) = 1.06 \ +%{nil} +%global gendep_perl_Digest \ +Requires: perl(Carp) \ +Requires: perl(Digest) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Digest) = 1.17 \ +Provides: perl(Digest::base) = 1.16 \ +Provides: perl(Digest::file) = 1.16 \ +%{nil} +%global gendep_perl_Digest_MD5 \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Digest::MD5) = 2.55 \ +%{nil} +%global gendep_perl_Digest_MD5_debuginfo \ +%{nil} +%global gendep_perl_Digest_SHA \ +Requires: perl(:VERSION) >= 5.3.0 \ +Requires: perl(DynaLoader) \ +Requires: perl(Exporter) \ +Requires: perl(Fcntl) \ +Requires: perl(Getopt::Long) \ +Requires: perl(integer) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Digest::SHA) = 5.96 \ +%{nil} +%global gendep_perl_Digest_SHA_debuginfo \ +%{nil} +%global gendep_perl_Encode \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(:VERSION) >= 5.8.1 \ +Requires: perl(Carp) \ +Requires: perl(Encode) \ +Requires: perl(Encode::Alias) \ +Requires: perl(Encode::CJKConstants) \ +Requires: perl(Encode::CN::HZ) \ +Requires: perl(Encode::Config) \ +Requires: perl(Encode::Encoding) \ +Requires: perl(Encode::Guess) \ +Requires: perl(Encode::JP::JIS7) \ +Requires: perl(Encode::KR::2022_KR) \ +Requires: perl(Encode::MIME::Header) \ +Requires: perl(Encode::Unicode) \ +Requires: perl(Exporter) >= 5.57 \ +Requires: perl(File::Basename) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Getopt::Std) \ +Requires: perl(MIME::Base64) \ +Requires: perl(XSLoader) \ +Requires: perl(bytes) \ +Requires: perl(constant) \ +Requires: perl(overload) \ +Requires: perl(parent) \ +Requires: perl(re) \ +Requires: perl(strict) \ +Requires: perl(utf8) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Encode) = 2.88 \ +Provides: perl(Encode::Alias) = 2.21 \ +Provides: perl(Encode::Byte) = 2.4 \ +Provides: perl(Encode::CJKConstants) = 2.2 \ +Provides: perl(Encode::CN) = 2.3 \ +Provides: perl(Encode::CN::HZ) = 2.8 \ +Provides: perl(Encode::Config) = 2.5 \ +Provides: perl(Encode::EBCDIC) = 2.2 \ +Provides: perl(Encode::Encoder) = 2.3 \ +Provides: perl(Encode::Encoding) = 2.7 \ +Provides: perl(Encode::GSM0338) = 2.5 \ +Provides: perl(Encode::Guess) = 2.6 \ +Provides: perl(Encode::Internal) \ +Provides: perl(Encode::JP) = 2.4 \ +Provides: perl(Encode::JP::H2Z) = 2.2 \ +Provides: perl(Encode::JP::JIS7) = 2.5 \ +Provides: perl(Encode::KR) = 2.3 \ +Provides: perl(Encode::KR::2022_KR) = 2.3 \ +Provides: perl(Encode::MIME::Header) = 2.24 \ +Provides: perl(Encode::MIME::Header::ISO_2022_JP) = 1.7 \ +Provides: perl(Encode::MIME::Name) = 1.2 \ +Provides: perl(Encode::Symbol) = 2.2 \ +Provides: perl(Encode::TW) = 2.3 \ +Provides: perl(Encode::UTF_EBCDIC) \ +Provides: perl(Encode::Unicode) = 2.15 \ +Provides: perl(Encode::Unicode::UTF7) = 2.8 \ +Provides: perl(Encode::XS) \ +Provides: perl(Encode::utf8) \ +%{nil} +%global gendep_perl_Encode_debuginfo \ +%{nil} +%global gendep_perl_Encode_devel \ +Requires: perl(Config) \ +Requires: perl(File::Find) \ +Requires: perl(Getopt::Std) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +%{nil} +%global gendep_perl_Env \ +Requires: perl(Config) \ +Requires: perl(Tie::Array) \ +Provides: perl(Env) = 1.04 \ +Provides: perl(Env::Array) \ +Provides: perl(Env::Array::VMS) \ +%{nil} +%global gendep_perl_Errno \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Provides: perl(Errno) = 1.28 \ +%{nil} +%global gendep_perl_Exporter \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Provides: perl(Exporter) = 5.72 \ +Provides: perl(Exporter::Heavy) \ +%{nil} +%global gendep_perl_ExtUtils_CBuilder \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(ExtUtils::CBuilder::Base) \ +Requires: perl(ExtUtils::CBuilder::Platform::Unix) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Functions) \ +Requires: perl(File::Temp) \ +Requires: perl(IO::File) \ +Requires: perl(IPC::Cmd) \ +Requires: perl(Perl::OSType) \ +Requires: perl(Text::ParseWords) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(ExtUtils::CBuilder) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Base) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::Unix) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::VMS) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows::BCC) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows::GCC) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows::MSVC) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::aix) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::android) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::cygwin) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::darwin) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::dec_osf) = 0.280225 \ +Provides: perl(ExtUtils::CBuilder::Platform::linux) = 0.280206 \ +Provides: perl(ExtUtils::CBuilder::Platform::os2) = 0.280225 \ +%{nil} +%global gendep_perl_ExtUtils_Command \ +Requires: perl(:VERSION) >= 5.5.30 \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(ExtUtils::Command) = 7.24 \ +%{nil} +%global gendep_perl_ExtUtils_Embed \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(ExtUtils::Embed) = 1.34 \ +%{nil} +%global gendep_perl_ExtUtils_Install \ +Requires: perl(:VERSION) >= 5.5.30 \ +Requires: perl(AutoSplit) \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(Exporter) \ +Requires: perl(ExtUtils::MakeMaker) \ +Requires: perl(ExtUtils::Packlist) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Compare) \ +Requires: perl(File::Copy) \ +Requires: perl(File::Find) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(ExtUtils::Install) = 2.04 \ +Provides: perl(ExtUtils::Install::Warn) \ +Provides: perl(ExtUtils::Installed) = 2.04 \ +Provides: perl(ExtUtils::Packlist) = 2.04 \ +%{nil} +%global gendep_perl_ExtUtils_MM_Utils \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(ExtUtils::MM::Utils) = 7.11 \ +%{nil} +%global gendep_perl_ExtUtils_MakeMaker \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(:VERSION) >= 5.6.1 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(Encode) \ +Requires: perl(Encode::Alias) \ +Requires: perl(Exporter) \ +Requires: perl(ExtUtils::Installed) \ +Requires: perl(ExtUtils::Liblist) \ +Requires: perl(ExtUtils::Liblist::Kid) \ +Requires: perl(ExtUtils::MM) \ +Requires: perl(ExtUtils::MM_Any) \ +Requires: perl(ExtUtils::MM_Unix) \ +Requires: perl(ExtUtils::MM_Win32) \ +Requires: perl(ExtUtils::MY) \ +Requires: perl(ExtUtils::MakeMaker) \ +Requires: perl(ExtUtils::MakeMaker::Config) \ +Requires: perl(ExtUtils::MakeMaker::version) \ +Requires: perl(ExtUtils::Packlist) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(IO::File) \ +Requires: perl(base) \ +Requires: perl(lib) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(ExtUtils::Command::MM) = 7.24 \ +Provides: perl(ExtUtils::Liblist) = 7.24 \ +Provides: perl(ExtUtils::Liblist::Kid) = 7.24 \ +Provides: perl(ExtUtils::MM) = 7.24 \ +Provides: perl(ExtUtils::MM_AIX) = 7.24 \ +Provides: perl(ExtUtils::MM_Any) = 7.24 \ +Provides: perl(ExtUtils::MM_BeOS) = 7.24 \ +Provides: perl(ExtUtils::MM_Cygwin) = 7.24 \ +Provides: perl(ExtUtils::MM_DOS) = 7.24 \ +Provides: perl(ExtUtils::MM_Darwin) = 7.24 \ +Provides: perl(ExtUtils::MM_MacOS) = 7.24 \ +Provides: perl(ExtUtils::MM_NW5) = 7.24 \ +Provides: perl(ExtUtils::MM_OS2) = 7.24 \ +Provides: perl(ExtUtils::MM_QNX) = 7.24 \ +Provides: perl(ExtUtils::MM_UWIN) = 7.24 \ +Provides: perl(ExtUtils::MM_Unix) = 7.24 \ +Provides: perl(ExtUtils::MM_VMS) = 7.24 \ +Provides: perl(ExtUtils::MM_VOS) = 7.24 \ +Provides: perl(ExtUtils::MM_Win32) = 7.24 \ +Provides: perl(ExtUtils::MM_Win95) = 7.24 \ +Provides: perl(ExtUtils::MY) = 7.24 \ +Provides: perl(ExtUtils::MakeMaker) = 7.24 \ +Provides: perl(ExtUtils::MakeMaker::Config) = 7.24 \ +Provides: perl(ExtUtils::MakeMaker::Locale) = 7.24 \ +Provides: perl(ExtUtils::MakeMaker::version) = 7.24 \ +Provides: perl(ExtUtils::Mkbootstrap) = 7.24 \ +Provides: perl(ExtUtils::Mksymlists) = 7.24 \ +Provides: perl(ExtUtils::testlib) = 7.24 \ +Provides: perl(MM) \ +Provides: perl(MY) \ +%{nil} +%global gendep_perl_ExtUtils_Manifest \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Copy) \ +Requires: perl(File::Find) \ +Requires: perl(File::Spec) >= 0.8 \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(ExtUtils::Manifest) = 1.70 \ +%{nil} +%global gendep_perl_ExtUtils_Miniperl \ +Requires: perl(Exporter) \ +Requires: perl(ExtUtils::Embed) >= 1.31 \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(ExtUtils::Miniperl) = 1.06 \ +%{nil} +%global gendep_perl_ExtUtils_ParseXS \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(:VERSION) >= 5.6.1 \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(Exporter) \ +Requires: perl(ExtUtils::ParseXS) \ +Requires: perl(ExtUtils::ParseXS::Constants) \ +Requires: perl(ExtUtils::ParseXS::CountLines) \ +Requires: perl(ExtUtils::ParseXS::Eval) \ +Requires: perl(ExtUtils::ParseXS::Utilities) \ +Requires: perl(ExtUtils::Typemaps) \ +Requires: perl(ExtUtils::Typemaps::InputMap) \ +Requires: perl(ExtUtils::Typemaps::OutputMap) \ +Requires: perl(ExtUtils::Typemaps::Type) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Symbol) \ +Requires: perl(re) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(ExtUtils::ParseXS) = 3.34 \ +Provides: perl(ExtUtils::ParseXS::Constants) = 3.34 \ +Provides: perl(ExtUtils::ParseXS::CountLines) = 3.34 \ +Provides: perl(ExtUtils::ParseXS::Eval) = 3.34 \ +Provides: perl(ExtUtils::ParseXS::Utilities) = 3.34 \ +Provides: perl(ExtUtils::Typemaps) = 3.34 \ +Provides: perl(ExtUtils::Typemaps::Cmd) = 3.34 \ +Provides: perl(ExtUtils::Typemaps::InputMap) = 3.34 \ +Provides: perl(ExtUtils::Typemaps::OutputMap) = 3.34 \ +Provides: perl(ExtUtils::Typemaps::Type) = 3.34 \ +%{nil} +%global gendep_perl_File_Fetch \ +Requires: perl(Carp) \ +Requires: perl(Cwd) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Copy) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Unix) \ +Requires: perl(File::Temp) \ +Requires: perl(FileHandle) \ +Requires: perl(IPC::Cmd) \ +Requires: perl(Locale::Maketext::Simple) \ +Requires: perl(Module::Load::Conditional) \ +Requires: perl(Params::Check) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(File::Fetch) = 0.52 \ +%{nil} +%global gendep_perl_File_Path \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(Cwd) \ +Requires: perl(Exporter) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Spec) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(File::Path) = 2.12 \ +%{nil} +%global gendep_perl_File_Temp \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Cwd) \ +Requires: perl(Errno) \ +Requires: perl(Exporter) >= 5.57 \ +Requires: perl(Fcntl) >= 1.03 \ +Requires: perl(File::Path) >= 2.06 \ +Requires: perl(File::Spec) >= 0.8 \ +Requires: perl(IO::Handle) \ +Requires: perl(IO::Seekable) \ +Requires: perl(Scalar::Util) \ +Requires: perl(Symbol) \ +Requires: perl(constant) \ +Requires: perl(overload) \ +Requires: perl(parent) >= 0.221 \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(File::Temp) = 0.2304 \ +Provides: perl(File::Temp::Dir) \ +%{nil} +%global gendep_perl_Filter \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(Carp) \ +Requires: perl(DynaLoader) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Filter::Util::Call) = 1.55 \ +%{nil} +%global gendep_perl_Filter_Simple \ +Requires: perl(Carp) \ +Requires: perl(Filter::Util::Call) \ +Requires: perl(Text::Balanced) \ +Requires: perl(vars) \ +Provides: perl(Filter::Simple) = 0.93 \ +%{nil} +%global gendep_perl_Filter_debuginfo \ +%{nil} +%global gendep_perl_Getopt_Long \ +Requires: perl(:VERSION) >= 5.4.0 \ +Requires: perl(Exporter) \ +Requires: perl(constant) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Getopt::Long) = 2.49 \ +Provides: perl(Getopt::Long::CallBack) \ +Provides: perl(Getopt::Long::Parser) \ +%{nil} +%global gendep_perl_HTTP_Tiny \ +Requires: perl(Errno) \ +Requires: perl(IO::Socket) \ +Requires: perl(Socket) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(HTTP::Tiny) = 0.070 \ +%{nil} +%global gendep_perl_IO \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Errno) \ +Requires: perl(Exporter) \ +Requires: perl(Fcntl) \ +Requires: perl(File::Spec) \ +Requires: perl(File::stat) \ +Requires: perl(IO) \ +Requires: perl(IO::File) \ +Requires: perl(IO::Handle) \ +Requires: perl(IO::Seekable) \ +Requires: perl(IO::Socket) \ +Requires: perl(IO::Socket::INET) \ +Requires: perl(IO::Socket::UNIX) \ +Requires: perl(SelectSaver) \ +Requires: perl(Socket) >= 1.3 \ +Requires: perl(Symbol) \ +Requires: perl(Tie::Hash) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Requires: perl(warnings::register) \ +Provides: perl(IO) = 1.38 \ +Provides: perl(IO::Dir) = 1.10 \ +Provides: perl(IO::File) = 1.16 \ +Provides: perl(IO::Handle) = 1.36 \ +Provides: perl(IO::Pipe) = 1.15 \ +Provides: perl(IO::Pipe::End) \ +Provides: perl(IO::Poll) = 0.10 \ +Provides: perl(IO::Seekable) = 1.10 \ +Provides: perl(IO::Select) = 1.22 \ +Provides: perl(IO::Socket) = 1.38 \ +Provides: perl(IO::Socket::INET) = 1.35 \ +Provides: perl(IO::Socket::UNIX) = 1.26 \ +%{nil} +%global gendep_perl_IO_Compress \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Compress::Raw::Bzip2) >= 2.074 \ +Requires: perl(Compress::Raw::Zlib) >= 2.074 \ +Requires: perl(Config) \ +Requires: perl(Encode) \ +Requires: perl(Exporter) \ +Requires: perl(Fcntl) \ +Requires: perl(File::GlobMapper) \ +Requires: perl(File::Spec) \ +Requires: perl(IO::Compress::Adapter::Bzip2) >= 2.074 \ +Requires: perl(IO::Compress::Adapter::Deflate) >= 2.074 \ +Requires: perl(IO::Compress::Adapter::Identity) >= 2.074 \ +Requires: perl(IO::Compress::Base) >= 2.074 \ +Requires: perl(IO::Compress::Base::Common) >= 2.074 \ +Requires: perl(IO::Compress::Gzip) >= 2.074 \ +Requires: perl(IO::Compress::Gzip::Constants) >= 2.074 \ +Requires: perl(IO::Compress::RawDeflate) >= 2.074 \ +Requires: perl(IO::Compress::Zip::Constants) >= 2.074 \ +Requires: perl(IO::Compress::Zlib::Constants) >= 2.074 \ +Requires: perl(IO::Compress::Zlib::Extra) >= 2.074 \ +Requires: perl(IO::File) \ +Requires: perl(IO::Handle) \ +Requires: perl(IO::Uncompress::Adapter::Bunzip2) >= 2.074 \ +Requires: perl(IO::Uncompress::Adapter::Identity) >= 2.074 \ +Requires: perl(IO::Uncompress::Adapter::Inflate) >= 2.074 \ +Requires: perl(IO::Uncompress::Base) >= 2.074 \ +Requires: perl(IO::Uncompress::Gunzip) >= 2.074 \ +Requires: perl(IO::Uncompress::Inflate) >= 2.074 \ +Requires: perl(IO::Uncompress::RawInflate) >= 2.074 \ +Requires: perl(IO::Uncompress::Unzip) >= 2.074 \ +Requires: perl(List::Util) \ +Requires: perl(POSIX) \ +Requires: perl(Scalar::Util) \ +Requires: perl(Symbol) \ +Requires: perl(bytes) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(utf8) \ +Requires: perl(warnings) \ +Provides: perl(Compress::Zlib) = 2.074 \ +Provides: perl(File::GlobMapper) = 1.000 \ +Provides: perl(IO::Compress::Adapter::Bzip2) = 2.074 \ +Provides: perl(IO::Compress::Adapter::Deflate) = 2.074 \ +Provides: perl(IO::Compress::Adapter::Identity) = 2.074 \ +Provides: perl(IO::Compress::Base) = 2.074 \ +Provides: perl(IO::Compress::Base::Common) = 2.074 \ +Provides: perl(IO::Compress::Bzip2) = 2.074 \ +Provides: perl(IO::Compress::Deflate) = 2.074 \ +Provides: perl(IO::Compress::Gzip) = 2.074 \ +Provides: perl(IO::Compress::Gzip::Constants) = 2.074 \ +Provides: perl(IO::Compress::RawDeflate) = 2.074 \ +Provides: perl(IO::Compress::Zip) = 2.074 \ +Provides: perl(IO::Compress::Zip::Constants) = 2.074 \ +Provides: perl(IO::Compress::Zlib::Constants) = 2.074 \ +Provides: perl(IO::Compress::Zlib::Extra) = 2.074 \ +Provides: perl(IO::Uncompress::Adapter::Bunzip2) = 2.074 \ +Provides: perl(IO::Uncompress::Adapter::Identity) = 2.074 \ +Provides: perl(IO::Uncompress::Adapter::Inflate) = 2.074 \ +Provides: perl(IO::Uncompress::AnyInflate) = 2.074 \ +Provides: perl(IO::Uncompress::AnyUncompress) = 2.074 \ +Provides: perl(IO::Uncompress::Base) = 2.074 \ +Provides: perl(IO::Uncompress::Bunzip2) \ +Provides: perl(IO::Uncompress::Bunzip2) = 2.074 \ +Provides: perl(IO::Uncompress::Gunzip) = 2.074 \ +Provides: perl(IO::Uncompress::Inflate) = 2.074 \ +Provides: perl(IO::Uncompress::RawInflate) = 2.074 \ +Provides: perl(IO::Uncompress::Unzip) = 2.074 \ +Provides: perl(U64) \ +Provides: perl(Zlib::OldDeflate) \ +Provides: perl(Zlib::OldInflate) \ +%{nil} +%global gendep_perl_IO_Socket_IP \ +Requires: perl(Carp) \ +Requires: perl(Errno) \ +Requires: perl(IO::Socket) \ +Requires: perl(IO::Socket::IP) \ +Requires: perl(POSIX) \ +Requires: perl(Socket) >= 1.97 \ +Requires: perl(base) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(IO::Socket::IP) = 0.38 \ +%{nil} +%global gendep_perl_IO_Zlib \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Fcntl) \ +Requires: perl(Symbol) \ +Requires: perl(Tie::Handle) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(IO::Zlib) = 1.10 \ +%{nil} +%global gendep_perl_IO_debuginfo \ +%{nil} +%global gendep_perl_IPC_Cmd \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(Locale::Maketext::Simple) \ +Requires: perl(Module::Load::Conditional) \ +Requires: perl(Params::Check) \ +Requires: perl(Symbol) \ +Requires: perl(Text::ParseWords) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(IPC::Cmd) = 0.96 \ +%{nil} +%global gendep_perl_IPC_SysV \ +Requires: perl(Carp) \ +Requires: perl(Class::Struct) \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(IPC::SysV) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(IPC::Msg) = 2.07 \ +Provides: perl(IPC::Msg::stat) \ +Provides: perl(IPC::Semaphore) = 2.07 \ +Provides: perl(IPC::Semaphore::stat) \ +Provides: perl(IPC::SharedMem) = 2.07 \ +Provides: perl(IPC::SharedMem::stat) \ +Provides: perl(IPC::SysV) = 2.07 \ +%{nil} +%global gendep_perl_IPC_SysV_debuginfo \ +%{nil} +%global gendep_perl_JSON_PP \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(B) \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Getopt::Long) \ +Requires: perl(JSON::PP) \ +Requires: perl(base) \ +Requires: perl(bytes) \ +Requires: perl(constant) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Provides: perl(JSON::PP) = 2.27400 \ +Provides: perl(JSON::PP::Boolean) \ +Provides: perl(JSON::PP::IncrParser) = 1.01 \ +%{nil} +%global gendep_perl_Locale_Codes \ +Requires: perl(:VERSION) >= 5.2.0 \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Locale::Codes) \ +Requires: perl(Locale::Codes::Constants) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(utf8) \ +Requires: perl(warnings) \ +Provides: perl(Locale::Codes) = 3.25 \ +Provides: perl(Locale::Codes) = 3.42 \ +Provides: perl(Locale::Codes::Constants) = 3.42 \ +Provides: perl(Locale::Codes::Country) = 3.42 \ +Provides: perl(Locale::Codes::Currency) = 3.42 \ +Provides: perl(Locale::Codes::LangExt) = 3.42 \ +Provides: perl(Locale::Codes::LangFam) = 3.42 \ +Provides: perl(Locale::Codes::LangVar) = 3.42 \ +Provides: perl(Locale::Codes::Language) = 3.42 \ +Provides: perl(Locale::Codes::Script) = 3.42 \ +Provides: perl(Locale::Country) = 3.42 \ +Provides: perl(Locale::Currency) = 3.42 \ +Provides: perl(Locale::Language) = 3.42 \ +Provides: perl(Locale::Script) = 3.42 \ +%{nil} +%global gendep_perl_Locale_Maketext \ +Requires: perl(Carp) \ +Requires: perl(I18N::LangTags) \ +Requires: perl(I18N::LangTags::Detect) \ +Requires: perl(Locale::Maketext) \ +Requires: perl(integer) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Locale::Maketext) = 1.28 \ +Provides: perl(Locale::Maketext::Guts) = 1.20 \ +Provides: perl(Locale::Maketext::GutsLoader) = 1.20 \ +%{nil} +%global gendep_perl_Locale_Maketext_Simple \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(Locale::Maketext) \ +Requires: perl(base) \ +Requires: perl(strict) \ +Provides: perl(Locale::Maketext::Simple) = 0.21 \ +%{nil} +%global gendep_perl_MIME_Base64 \ +Requires: perl(Exporter) \ +Requires: perl(MIME::Base64) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(MIME::Base64) = 3.15 \ +Provides: perl(MIME::QuotedPrint) = 3.13 \ +%{nil} +%global gendep_perl_MIME_Base64_debuginfo \ +%{nil} +%global gendep_perl_Math_BigInt \ +Requires: perl(:VERSION) >= 5.6.1 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Math::BigInt) \ +Requires: perl(Math::BigInt::Lib) \ +Requires: perl(constant) \ +Requires: perl(integer) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Math::BigFloat) = 1.999806 \ +Provides: perl(Math::BigInt) = 1.999806 \ +Provides: perl(Math::BigInt::Calc) = 1.999806 \ +Provides: perl(Math::BigInt::CalcEmu) = 1.999806 \ +Provides: perl(Math::BigInt::Lib) = 1.999806 \ +%{nil} +%global gendep_perl_Math_BigInt_FastCalc \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Math::BigInt::Calc) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Math::BigInt::FastCalc) = 0.5005 \ +%{nil} +%global gendep_perl_Math_BigInt_FastCalc_debuginfo \ +%{nil} +%global gendep_perl_Math_BigRat \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Math::BigFloat) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Math::BigRat) = 0.2611 \ +%{nil} +%global gendep_perl_Math_Complex \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(Math::Complex) >= 1.59 \ +Requires: perl(Scalar::Util) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Math::Complex) = 1.59 \ +Provides: perl(Math::Trig) = 1.23 \ +%{nil} +%global gendep_perl_Memoize \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(NDBM_File) \ +Requires: perl(SDBM_File) \ +Requires: perl(Storable) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Memoize) = 1.03 \ +Provides: perl(Memoize::AnyDBM_File) = 1.03 \ +Provides: perl(Memoize::Expire) = 1.03 \ +Provides: perl(Memoize::ExpireFile) = 1.03 \ +Provides: perl(Memoize::ExpireTest) = 1.03 \ +Provides: perl(Memoize::NDBM_File) = 1.03 \ +Provides: perl(Memoize::SDBM_File) = 1.03 \ +Provides: perl(Memoize::Storable) = 1.03 \ +%{nil} +%global gendep_perl_Module_CoreList \ +Requires: perl(Module::CoreList) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(version) \ +Requires: perl(warnings) \ +Provides: perl(Module::CoreList) = 5.20180414 \ +Provides: perl(Module::CoreList::TieHashDelta) = 5.20180414 \ +Provides: perl(Module::CoreList::Utils) = 5.20180414 \ +%{nil} +%global gendep_perl_Module_CoreList_tools \ +Requires: perl(Getopt::Long) \ +Requires: perl(List::Util) \ +Requires: perl(Module::CoreList) \ +Requires: perl(Pod::Usage) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +%{nil} +%global gendep_perl_Module_Load \ +Requires: perl(File::Spec) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Module::Load) = 0.32 \ +%{nil} +%global gendep_perl_Module_Load_Conditional \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(FileHandle) \ +Requires: perl(Locale::Maketext::Simple) \ +Requires: perl(Module::Load) \ +Requires: perl(Module::Metadata) \ +Requires: perl(Params::Check) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(version) \ +Provides: perl(Module::Load::Conditional) = 0.68 \ +%{nil} +%global gendep_perl_Module_Loaded \ +Requires: perl(Carp) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Module::Loaded) = 0.08 \ +%{nil} +%global gendep_perl_Module_Metadata \ +Requires: perl(Carp) \ +Requires: perl(File::Find) \ +Requires: perl(File::Spec) \ +Requires: perl(strict) \ +Requires: perl(version) >= 0.87 \ +Requires: perl(warnings) \ +Provides: perl(Module::Metadata) = 1.000033 \ +%{nil} +%global gendep_perl_Net_Ping \ +Requires: perl(:VERSION) >= 5.2.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Fcntl) \ +Requires: perl(FileHandle) \ +Requires: perl(POSIX) \ +Requires: perl(Socket) \ +Requires: perl(Time::HiRes) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Net::Ping) = 2.55 \ +%{nil} +%global gendep_perl_Params_Check \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Locale::Maketext::Simple) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Params::Check) = 0.38 \ +%{nil} +%global gendep_perl_PathTools \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Unix) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Cwd) = 3.67 \ +Provides: perl(File::Spec) = 3.67 \ +Provides: perl(File::Spec::AmigaOS) = 3.67 \ +Provides: perl(File::Spec::Cygwin) = 3.67 \ +Provides: perl(File::Spec::Epoc) = 3.67 \ +Provides: perl(File::Spec::Functions) = 3.67 \ +Provides: perl(File::Spec::Mac) = 3.67 \ +Provides: perl(File::Spec::OS2) = 3.67 \ +Provides: perl(File::Spec::Unix) = 3.67 \ +Provides: perl(File::Spec::Win32) = 3.67 \ +%{nil} +%global gendep_perl_PathTools_debuginfo \ +%{nil} +%global gendep_perl_Perl_OSType \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Perl::OSType) = 1.010 \ +%{nil} +%global gendep_perl_PerlIO_via_QuotedPrint \ +Requires: perl(MIME::QuotedPrint) \ +Requires: perl(strict) \ +Provides: perl(PerlIO::via::QuotedPrint) = 0.08 \ +%{nil} +%global gendep_perl_Pod_Checker \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Pod::Checker) \ +Requires: perl(Pod::Simple::Methody) \ +Requires: perl(Pod::Usage) \ +Requires: perl(base) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Pod::Checker) = 1.73 \ +%{nil} +%global gendep_perl_Pod_Escapes \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Pod::Escapes) = 1.07 \ +%{nil} +%global gendep_perl_Pod_Html \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(Exporter) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Unix) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Pod::Html) \ +Requires: perl(Pod::Simple::Search) \ +Requires: perl(Pod::Simple::XHTML) \ +Requires: perl(locale) \ +Requires: perl(parent) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Pod::Html) = 1.2202 \ +Provides: perl(Pod::Simple::XHTML::LocalPodLinks) \ +%{nil} +%global gendep_perl_Pod_Parser \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(Carp) \ +Requires: perl(Cwd) \ +Requires: perl(Exporter) \ +Requires: perl(File::Find) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Pod::InputObjects) \ +Requires: perl(Pod::Parser) >= 1.04 \ +Requires: perl(Pod::Select) \ +Requires: perl(Pod::Usage) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Pod::Cache) \ +Provides: perl(Pod::Cache::Item) \ +Provides: perl(Pod::Find) = 1.63 \ +Provides: perl(Pod::Hyperlink) \ +Provides: perl(Pod::InputObjects) = 1.63 \ +Provides: perl(Pod::InputSource) \ +Provides: perl(Pod::InteriorSequence) \ +Provides: perl(Pod::List) \ +Provides: perl(Pod::Paragraph) \ +Provides: perl(Pod::ParseTree) \ +Provides: perl(Pod::ParseUtils) = 1.63 \ +Provides: perl(Pod::Parser) = 1.63 \ +Provides: perl(Pod::PlainText) = 2.07 \ +Provides: perl(Pod::Select) = 1.63 \ +%{nil} +%global gendep_perl_Pod_Perldoc \ +Requires: perl(:VERSION) >= 5.0.0 \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Encode) \ +Requires: perl(Fcntl) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Spec::Functions) \ +Requires: perl(IO::Select) \ +Requires: perl(Pod::Man) >= 2.18 \ +Requires: perl(Pod::Perldoc) \ +Requires: perl(Pod::Perldoc::BaseTo) \ +Requires: perl(Pod::Perldoc::GetOptsOO) \ +Requires: perl(Pod::Simple::RTF) \ +Requires: perl(Pod::Simple::XMLOutStream) \ +Requires: perl(Pod::Text) \ +Requires: perl(Pod::Text::Color) \ +Requires: perl(Pod::Text::Termcap) \ +Requires: perl(parent) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Pod::Perldoc) = 3.28 \ +Provides: perl(Pod::Perldoc::BaseTo) = 3.28 \ +Provides: perl(Pod::Perldoc::GetOptsOO) = 3.28 \ +Provides: perl(Pod::Perldoc::ToANSI) = 3.28 \ +Provides: perl(Pod::Perldoc::ToChecker) = 3.28 \ +Provides: perl(Pod::Perldoc::ToMan) = 3.28 \ +Provides: perl(Pod::Perldoc::ToNroff) = 3.28 \ +Provides: perl(Pod::Perldoc::ToPod) = 3.28 \ +Provides: perl(Pod::Perldoc::ToRtf) = 3.28 \ +Provides: perl(Pod::Perldoc::ToTerm) = 3.28 \ +Provides: perl(Pod::Perldoc::ToText) = 3.28 \ +Provides: perl(Pod::Perldoc::ToTk) = 3.28 \ +Provides: perl(Pod::Perldoc::ToXml) = 3.28 \ +%{nil} +%global gendep_perl_Pod_Simple \ +Requires: perl(:VERSION) >= 5.0.0 \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(Encode) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Pod::Escapes) >= 1.04 \ +Requires: perl(Pod::Simple) \ +Requires: perl(Pod::Simple::BlackBox) \ +Requires: perl(Pod::Simple::HTML) \ +Requires: perl(Pod::Simple::LinkSection) \ +Requires: perl(Pod::Simple::Methody) \ +Requires: perl(Pod::Simple::PullParser) \ +Requires: perl(Pod::Simple::PullParserEndToken) \ +Requires: perl(Pod::Simple::PullParserStartToken) \ +Requires: perl(Pod::Simple::PullParserTextToken) \ +Requires: perl(Pod::Simple::PullParserToken) \ +Requires: perl(Pod::Simple::Search) \ +Requires: perl(Symbol) \ +Requires: perl(Text::Wrap) >= 98.112902 \ +Requires: perl(integer) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Pod::Simple) = 3.35 \ +Provides: perl(Pod::Simple::BlackBox) = 3.35 \ +Provides: perl(Pod::Simple::Checker) = 3.35 \ +Provides: perl(Pod::Simple::Debug) = 3.35 \ +Provides: perl(Pod::Simple::DumpAsText) = 3.35 \ +Provides: perl(Pod::Simple::DumpAsXML) = 3.35 \ +Provides: perl(Pod::Simple::HTML) = 3.35 \ +Provides: perl(Pod::Simple::HTMLBatch) = 3.35 \ +Provides: perl(Pod::Simple::HTMLLegacy) = 5.01 \ +Provides: perl(Pod::Simple::LinkSection) = 3.35 \ +Provides: perl(Pod::Simple::Methody) = 3.35 \ +Provides: perl(Pod::Simple::Progress) = 3.35 \ +Provides: perl(Pod::Simple::PullParser) = 3.35 \ +Provides: perl(Pod::Simple::PullParserEndToken) = 3.35 \ +Provides: perl(Pod::Simple::PullParserStartToken) = 3.35 \ +Provides: perl(Pod::Simple::PullParserTextToken) = 3.35 \ +Provides: perl(Pod::Simple::PullParserToken) = 3.35 \ +Provides: perl(Pod::Simple::RTF) = 3.35 \ +Provides: perl(Pod::Simple::Search) = 3.35 \ +Provides: perl(Pod::Simple::SimpleTree) = 3.35 \ +Provides: perl(Pod::Simple::Text) = 3.35 \ +Provides: perl(Pod::Simple::TextContent) = 3.35 \ +Provides: perl(Pod::Simple::TiedOutFH) = 3.35 \ +Provides: perl(Pod::Simple::Transcode) = 3.35 \ +Provides: perl(Pod::Simple::TranscodeDumb) = 3.35 \ +Provides: perl(Pod::Simple::TranscodeSmart) = 3.35 \ +Provides: perl(Pod::Simple::XHTML) = 3.35 \ +Provides: perl(Pod::Simple::XMLOutStream) = 3.35 \ +%{nil} +%global gendep_perl_Pod_Usage \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Pod::Usage) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Pod::Usage) = 1.69 \ +%{nil} +%global gendep_perl_Scalar_List_Utils \ +Requires: perl(Exporter) \ +Requires: perl(List::Util) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(List::Util) = 1.46 \ +Provides: perl(List::Util::XS) = 1.46 \ +Provides: perl(Scalar::Util) = 1.46 \ +Provides: perl(Sub::Util) = 1.46 \ +%{nil} +%global gendep_perl_Scalar_List_Utils_debuginfo \ +%{nil} +%global gendep_perl_SelfLoader \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(Exporter) \ +Requires: perl(IO::Handle) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(SelfLoader) = 1.23 \ +%{nil} +%global gendep_perl_Socket \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(warnings::register) \ +Provides: perl(Socket) = 2.020 \ +%{nil} +%global gendep_perl_Socket_debuginfo \ +%{nil} +%global gendep_perl_Storable \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Requires: perl(vars) \ +Provides: perl(Storable) = 2.62 \ +%{nil} +%global gendep_perl_Storable_debuginfo \ +%{nil} +%global gendep_perl_Sys_Syslog \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(File::Basename) \ +Requires: perl(POSIX) \ +Requires: perl(Socket) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Requires: perl(warnings::register) \ +Provides: perl(Sys::Syslog) = 0.35 \ +%{nil} +%global gendep_perl_Sys_Syslog_debuginfo \ +%{nil} +%global gendep_perl_Term_ANSIColor \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Term::ANSIColor) = 4.06 \ +%{nil} +%global gendep_perl_Term_Cap \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Term::Cap) = 1.17 \ +%{nil} +%global gendep_perl_Test \ +Requires: perl(:VERSION) >= 5.4.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Test) = 1.30 \ +%{nil} +%global gendep_perl_Test_Harness \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(App::Prove) \ +Requires: perl(App::Prove::State) \ +Requires: perl(App::Prove::State::Result) \ +Requires: perl(App::Prove::State::Result::Test) \ +Requires: perl(Benchmark) \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Find) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Long) \ +Requires: perl(IO::Handle) \ +Requires: perl(IO::Select) \ +Requires: perl(POSIX) \ +Requires: perl(TAP::Base) \ +Requires: perl(TAP::Formatter::Base) \ +Requires: perl(TAP::Formatter::Console::Session) \ +Requires: perl(TAP::Formatter::File::Session) \ +Requires: perl(TAP::Formatter::Session) \ +Requires: perl(TAP::Harness) \ +Requires: perl(TAP::Harness::Env) \ +Requires: perl(TAP::Object) \ +Requires: perl(TAP::Parser::Aggregator) \ +Requires: perl(TAP::Parser::Grammar) \ +Requires: perl(TAP::Parser::Iterator) \ +Requires: perl(TAP::Parser::Iterator::Array) \ +Requires: perl(TAP::Parser::Iterator::Process) \ +Requires: perl(TAP::Parser::Iterator::Stream) \ +Requires: perl(TAP::Parser::IteratorFactory) \ +Requires: perl(TAP::Parser::Result) \ +Requires: perl(TAP::Parser::Result::Bailout) \ +Requires: perl(TAP::Parser::Result::Comment) \ +Requires: perl(TAP::Parser::Result::Plan) \ +Requires: perl(TAP::Parser::Result::Pragma) \ +Requires: perl(TAP::Parser::Result::Test) \ +Requires: perl(TAP::Parser::Result::Unknown) \ +Requires: perl(TAP::Parser::Result::Version) \ +Requires: perl(TAP::Parser::Result::YAML) \ +Requires: perl(TAP::Parser::ResultFactory) \ +Requires: perl(TAP::Parser::Scheduler::Job) \ +Requires: perl(TAP::Parser::Scheduler::Spinner) \ +Requires: perl(TAP::Parser::Source) \ +Requires: perl(TAP::Parser::SourceHandler) \ +Requires: perl(TAP::Parser::SourceHandler::Executable) \ +Requires: perl(TAP::Parser::SourceHandler::File) \ +Requires: perl(TAP::Parser::SourceHandler::Handle) \ +Requires: perl(TAP::Parser::SourceHandler::Perl) \ +Requires: perl(TAP::Parser::SourceHandler::RawTAP) \ +Requires: perl(TAP::Parser::YAMLish::Reader) \ +Requires: perl(TAP::Parser::YAMLish::Writer) \ +Requires: perl(Text::ParseWords) \ +Requires: perl(base) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(App::Prove) = 3.38 \ +Provides: perl(App::Prove::State) = 3.38 \ +Provides: perl(App::Prove::State::Result) = 3.38 \ +Provides: perl(App::Prove::State::Result::Test) = 3.38 \ +Provides: perl(TAP::Base) = 3.38 \ +Provides: perl(TAP::Formatter::Base) = 3.38 \ +Provides: perl(TAP::Formatter::Color) = 3.38 \ +Provides: perl(TAP::Formatter::Console) = 3.38 \ +Provides: perl(TAP::Formatter::Console::ParallelSession) = 3.38 \ +Provides: perl(TAP::Formatter::Console::Session) = 3.38 \ +Provides: perl(TAP::Formatter::File) = 3.38 \ +Provides: perl(TAP::Formatter::File::Session) = 3.38 \ +Provides: perl(TAP::Formatter::Session) = 3.38 \ +Provides: perl(TAP::Harness) = 3.38 \ +Provides: perl(TAP::Harness::Env) = 3.38 \ +Provides: perl(TAP::Object) = 3.38 \ +Provides: perl(TAP::Parser) = 3.38 \ +Provides: perl(TAP::Parser::Aggregator) = 3.38 \ +Provides: perl(TAP::Parser::Grammar) = 3.38 \ +Provides: perl(TAP::Parser::Iterator) = 3.38 \ +Provides: perl(TAP::Parser::Iterator::Array) = 3.38 \ +Provides: perl(TAP::Parser::Iterator::Process) = 3.38 \ +Provides: perl(TAP::Parser::Iterator::Stream) = 3.38 \ +Provides: perl(TAP::Parser::IteratorFactory) = 3.38 \ +Provides: perl(TAP::Parser::Multiplexer) = 3.38 \ +Provides: perl(TAP::Parser::Result) = 3.38 \ +Provides: perl(TAP::Parser::Result::Bailout) = 3.38 \ +Provides: perl(TAP::Parser::Result::Comment) = 3.38 \ +Provides: perl(TAP::Parser::Result::Plan) = 3.38 \ +Provides: perl(TAP::Parser::Result::Pragma) = 3.38 \ +Provides: perl(TAP::Parser::Result::Test) = 3.38 \ +Provides: perl(TAP::Parser::Result::Unknown) = 3.38 \ +Provides: perl(TAP::Parser::Result::Version) = 3.38 \ +Provides: perl(TAP::Parser::Result::YAML) = 3.38 \ +Provides: perl(TAP::Parser::ResultFactory) = 3.38 \ +Provides: perl(TAP::Parser::Scheduler) = 3.38 \ +Provides: perl(TAP::Parser::Scheduler::Job) = 3.38 \ +Provides: perl(TAP::Parser::Scheduler::Spinner) = 3.38 \ +Provides: perl(TAP::Parser::Source) = 3.38 \ +Provides: perl(TAP::Parser::SourceHandler) = 3.38 \ +Provides: perl(TAP::Parser::SourceHandler::Executable) = 3.38 \ +Provides: perl(TAP::Parser::SourceHandler::File) = 3.38 \ +Provides: perl(TAP::Parser::SourceHandler::Handle) = 3.38 \ +Provides: perl(TAP::Parser::SourceHandler::Perl) = 3.38 \ +Provides: perl(TAP::Parser::SourceHandler::RawTAP) = 3.38 \ +Provides: perl(TAP::Parser::YAMLish::Reader) = 3.38 \ +Provides: perl(TAP::Parser::YAMLish::Writer) = 3.38 \ +Provides: perl(Test::Harness) = 3.38 \ +%{nil} +%global gendep_perl_Test_Simple \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Temp) \ +Requires: perl(IO::Handle) \ +Requires: perl(POSIX) \ +Requires: perl(PerlIO) \ +Requires: perl(Scalar::Util) \ +Requires: perl(Storable) \ +Requires: perl(Symbol) \ +Requires: perl(Test2::API) \ +Requires: perl(Test2::API::Context) \ +Requires: perl(Test2::API::Instance) \ +Requires: perl(Test2::API::Stack) \ +Requires: perl(Test2::Event::Bail) \ +Requires: perl(Test2::Event::Diag) \ +Requires: perl(Test2::Event::Exception) \ +Requires: perl(Test2::Event::Note) \ +Requires: perl(Test2::Event::Ok) \ +Requires: perl(Test2::Event::Plan) \ +Requires: perl(Test2::Event::Skip) \ +Requires: perl(Test2::Event::Subtest) \ +Requires: perl(Test2::Event::Waiting) \ +Requires: perl(Test2::Hub) \ +Requires: perl(Test2::Hub::Interceptor) \ +Requires: perl(Test2::Hub::Interceptor::Terminator) \ +Requires: perl(Test2::Hub::Subtest) \ +Requires: perl(Test2::Util) \ +Requires: perl(Test2::Util::ExternalMeta) \ +Requires: perl(Test2::Util::HashBase) \ +Requires: perl(Test2::Util::Trace) \ +Requires: perl(Test::Builder) \ +Requires: perl(Test::Builder::Formatter) \ +Requires: perl(Test::Builder::Module) \ +Requires: perl(Test::Builder::Tester) \ +Requires: perl(Test::Builder::TodoDiag) \ +Requires: perl(Test::More) \ +Requires: perl(Test::Tester::Capture) \ +Requires: perl(Test::Tester::CaptureRunner) \ +Requires: perl(Test::Tester::Delegate) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Test2) = 1.302073 \ +Provides: perl(Test2::API) = 1.302073 \ +Provides: perl(Test2::API::Breakage) = 1.302073 \ +Provides: perl(Test2::API::Context) = 1.302073 \ +Provides: perl(Test2::API::Instance) = 1.302073 \ +Provides: perl(Test2::API::Stack) = 1.302073 \ +Provides: perl(Test2::Event) = 1.302073 \ +Provides: perl(Test2::Event::Bail) = 1.302073 \ +Provides: perl(Test2::Event::Diag) = 1.302073 \ +Provides: perl(Test2::Event::Encoding) = 1.302073 \ +Provides: perl(Test2::Event::Exception) = 1.302073 \ +Provides: perl(Test2::Event::Generic) = 1.302073 \ +Provides: perl(Test2::Event::Info) = 1.302073 \ +Provides: perl(Test2::Event::Note) = 1.302073 \ +Provides: perl(Test2::Event::Ok) = 1.302073 \ +Provides: perl(Test2::Event::Plan) = 1.302073 \ +Provides: perl(Test2::Event::Skip) = 1.302073 \ +Provides: perl(Test2::Event::Subtest) = 1.302073 \ +Provides: perl(Test2::Event::TAP::Version) = 1.302073 \ +Provides: perl(Test2::Event::Waiting) = 1.302073 \ +Provides: perl(Test2::Formatter) = 1.302073 \ +Provides: perl(Test2::Formatter::TAP) = 1.302073 \ +Provides: perl(Test2::Hub) = 1.302073 \ +Provides: perl(Test2::Hub::Interceptor) = 1.302073 \ +Provides: perl(Test2::Hub::Interceptor::Terminator) = 1.302073 \ +Provides: perl(Test2::Hub::Subtest) = 1.302073 \ +Provides: perl(Test2::IPC) = 1.302073 \ +Provides: perl(Test2::IPC::Driver) = 1.302073 \ +Provides: perl(Test2::IPC::Driver::Files) = 1.302073 \ +Provides: perl(Test2::Tools::Tiny) = 1.302073 \ +Provides: perl(Test2::Util) = 1.302073 \ +Provides: perl(Test2::Util::ExternalMeta) = 1.302073 \ +Provides: perl(Test2::Util::HashBase) = 0.002 \ +Provides: perl(Test2::Util::Trace) = 1.302073 \ +Provides: perl(Test::Builder) = 1.302073 \ +Provides: perl(Test::Builder::Formatter) = 1.302073 \ +Provides: perl(Test::Builder::IO::Scalar) = 2.113 \ +Provides: perl(Test::Builder::Module) = 1.302073 \ +Provides: perl(Test::Builder::Tester) = 1.302073 \ +Provides: perl(Test::Builder::Tester::Color) = 1.302073 \ +Provides: perl(Test::Builder::Tester::Tie) \ +Provides: perl(Test::Builder::TodoDiag) = 1.302073 \ +Provides: perl(Test::More) = 1.302073 \ +Provides: perl(Test::Simple) = 1.302073 \ +Provides: perl(Test::Tester) = 1.302073 \ +Provides: perl(Test::Tester::Capture) = 1.302073 \ +Provides: perl(Test::Tester::CaptureRunner) = 1.302073 \ +Provides: perl(Test::Tester::Delegate) = 1.302073 \ +Provides: perl(Test::use::ok) = 1.302073 \ +Provides: perl(ok) = 1.302073 \ +%{nil} +%global gendep_perl_Text_Balanced \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(SelfLoader) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Text::Balanced) = 2.03 \ +Provides: perl(Text::Balanced::ErrorMsg) \ +Provides: perl(Text::Balanced::Extractor) \ +%{nil} +%global gendep_perl_Text_ParseWords \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Provides: perl(Text::ParseWords) = 3.30 \ +%{nil} +%global gendep_perl_Text_Tabs_Wrap \ +Requires: perl(:VERSION) >= 5.10.0 \ +Requires: perl(Exporter) \ +Requires: perl(Text::Tabs) \ +Requires: perl(re) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings::register) \ +Provides: perl(Text::Tabs) = 2013.0523 \ +Provides: perl(Text::Wrap) = 2013.0523 \ +%{nil} +%global gendep_perl_Thread_Queue \ +Requires: perl(Scalar::Util) >= 1.10 \ +Requires: perl(strict) \ +Requires: perl(threads::shared) >= 1.21 \ +Requires: perl(warnings) \ +Provides: perl(Thread::Queue) = 3.12 \ +%{nil} +%global gendep_perl_Time_HiRes \ +Requires: perl(DynaLoader) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Provides: perl(Time::HiRes) = 1.9741 \ +%{nil} +%global gendep_perl_Time_HiRes_debuginfo \ +%{nil} +%global gendep_perl_Time_Local \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(constant) \ +Requires: perl(parent) \ +Requires: perl(strict) \ +Provides: perl(Time::Local) = 1.25 \ +%{nil} +%global gendep_perl_Time_Piece \ +Requires: perl(Carp) \ +Requires: perl(DynaLoader) \ +Requires: perl(Exporter) >= 5.57 \ +Requires: perl(Time::Local) \ +Requires: perl(Time::Seconds) \ +Requires: perl(constant) \ +Requires: perl(integer) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Provides: perl(Time::Piece) = 1.31 \ +Provides: perl(Time::Seconds) = 1.31 \ +%{nil} +%global gendep_perl_Time_Piece_debuginfo \ +%{nil} +%global gendep_perl_Unicode_Collate \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(DynaLoader) \ +Requires: perl(File::Spec) \ +Requires: perl(Unicode::Collate) \ +Requires: perl(base) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Unicode::Collate) = 1.19 \ +Provides: perl(Unicode::Collate::CJK::Big5) = 1.19 \ +Provides: perl(Unicode::Collate::CJK::GB2312) = 1.19 \ +Provides: perl(Unicode::Collate::CJK::JISX0208) = 1.19 \ +Provides: perl(Unicode::Collate::CJK::Korean) = 1.19 \ +Provides: perl(Unicode::Collate::CJK::Pinyin) = 1.19 \ +Provides: perl(Unicode::Collate::CJK::Stroke) = 1.19 \ +Provides: perl(Unicode::Collate::CJK::Zhuyin) = 1.19 \ +Provides: perl(Unicode::Collate::Locale) = 1.19 \ +%{nil} +%global gendep_perl_Unicode_Collate_debuginfo \ +%{nil} +%global gendep_perl_Unicode_Normalize \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(DynaLoader) \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Unicode::Normalize) = 1.25 \ +%{nil} +%global gendep_perl_Unicode_Normalize_debuginfo \ +%{nil} +%global gendep_perl_autodie \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(Exporter) >= 5.57 \ +Requires: perl(Fatal) \ +Requires: perl(Scalar::Util) \ +Requires: perl(Tie::RefHash) \ +Requires: perl(autodie::Scope::Guard) \ +Requires: perl(autodie::Scope::GuardStack) \ +Requires: perl(autodie::Util) \ +Requires: perl(autodie::exception) \ +Requires: perl(constant) \ +Requires: perl(lib) \ +Requires: perl(overload) \ +Requires: perl(parent) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Fatal) = 2.29 \ +Provides: perl(autodie) = 2.29 \ +Provides: perl(autodie::Scope::Guard) = 2.29 \ +Provides: perl(autodie::Scope::GuardStack) = 2.29 \ +Provides: perl(autodie::Util) = 2.29 \ +Provides: perl(autodie::exception) = 2.29 \ +Provides: perl(autodie::exception::system) = 2.29 \ +Provides: perl(autodie::hints) = 2.29 \ +Provides: perl(autodie::skip) = 2.29 \ +%{nil} +%global gendep_perl_bignum \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Exporter) \ +Requires: perl(Math::BigFloat) \ +Requires: perl(Math::BigInt) \ +Requires: perl(bigint) \ +Requires: perl(constant) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Math::BigFloat::Trace) = 0.47 \ +Provides: perl(Math::BigInt::Trace) = 0.47 \ +Provides: perl(bigint) = 0.47 \ +Provides: perl(bignum) = 0.47 \ +Provides: perl(bigrat) = 0.47 \ +%{nil} +%global gendep_perl_constant \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(strict) \ +Requires: perl(warnings::register) \ +Provides: perl(constant) = 1.33 \ +%{nil} +%global gendep_perl_debuginfo \ +%{nil} +%global gendep_perl_debugsource \ +%{nil} +%global gendep_perl_devel \ +Requires: perl(Config) \ +Requires: perl(ExtUtils::Constant) \ +Requires: perl(ExtUtils::Installed) \ +Requires: perl(File::Compare) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Long) \ +Requires: perl(Text::Wrap) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +%{nil} +%global gendep_perl_encoding \ +Requires: perl(Encode) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(encoding) = 2.19 \ +%{nil} +%global gendep_perl_experimental \ +Requires: perl(Carp) \ +Requires: perl(feature) \ +Requires: perl(strict) \ +Requires: perl(version) \ +Requires: perl(warnings) \ +Provides: perl(experimental) = 0.016 \ +%{nil} +%global gendep_perl_interpreter \ +Requires: perl(:VERSION) >= 5.0.0 \ +Requires: perl(:VERSION) >= 5.10.1 \ +Requires: perl(:VERSION) >= 5.24.0 \ +Requires: perl(:VERSION) >= 5.3.0 \ +Requires: perl(:VERSION) >= 5.5.0 \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(:VERSION) >= 5.7.0 \ +Requires: perl(:VERSION) >= 5.7.3 \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(:VERSION) >= 5.9.1 \ +Requires: perl(:VERSION) >= 5.9.4 \ +Requires: perl(B) \ +Requires: perl(B::Concise) \ +Requires: perl(B::Op_private) \ +Requires: perl(B::Terse) \ +Requires: perl(Carp) \ +Requires: perl(Class::Struct) \ +Requires: perl(Config) \ +Requires: perl(Cwd) \ +Requires: perl(Exporter) \ +Requires: perl(ExtUtils::Constant::Base) \ +Requires: perl(ExtUtils::Constant::Utils) \ +Requires: perl(ExtUtils::Constant::XS) \ +Requires: perl(Fcntl) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Functions) \ +Requires: perl(I18N::LangTags) \ +Requires: perl(IO::File) \ +Requires: perl(IPC::Open3) \ +Requires: perl(Opcode) >= 1.01 \ +Requires: perl(POSIX) \ +Requires: perl(Scalar::Util) >= 1.10 \ +Requires: perl(Symbol) \ +Requires: perl(Text::Tabs) \ +Requires: perl(Text::Wrap) \ +Requires: perl(Tie::Handle) \ +Requires: perl(Tie::Hash) \ +Requires: perl(Tie::StdHandle) \ +Requires: perl(Time::tm) \ +Requires: perl(Unicode::Normalize) \ +Requires: perl(XSLoader) \ +Requires: perl(_charnames) \ +Requires: perl(bytes) \ +Requires: perl(charnames) \ +Requires: perl(constant) \ +Requires: perl(feature) \ +Requires: perl(if) \ +Requires: perl(integer) \ +Requires: perl(overload) \ +Requires: perl(parent) \ +Requires: perl(re) \ +Requires: perl(strict) \ +Requires: perl(subs) \ +Requires: perl(threads) \ +Requires: perl(threads::shared) \ +Requires: perl(unicore::Name) \ +Requires: perl(utf8) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Requires: perl(warnings::register) \ +Provides: perl(AnyDBM_File) = 1.01 \ +Provides: perl(AutoLoader) = 5.74 \ +Provides: perl(AutoSplit) = 1.06 \ +Provides: perl(B) = 1.68 \ +Provides: perl(B::Concise) = 0.999 \ +Provides: perl(B::Deparse) = 1.40 \ +Provides: perl(B::OBJECT) \ +Provides: perl(B::Op_private) = 5.026002 \ +Provides: perl(B::Showlex) = 1.05 \ +Provides: perl(B::Terse) = 1.07 \ +Provides: perl(B::Xref) = 1.06 \ +Provides: perl(Benchmark) = 1.22 \ +Provides: perl(Class::Struct) = 0.65 \ +Provides: perl(Class::Struct::Tie_ISA) \ +Provides: perl(Config) = 5.026002 \ +Provides: perl(Config::Extensions) = 0.01 \ +Provides: perl(DB) = 1.08 \ +Provides: perl(DBM_Filter) = 0.06 \ +Provides: perl(DBM_Filter::compress) = 0.03 \ +Provides: perl(DBM_Filter::encode) = 0.03 \ +Provides: perl(DBM_Filter::int32) = 0.03 \ +Provides: perl(DBM_Filter::null) = 0.03 \ +Provides: perl(DBM_Filter::utf8) = 0.03 \ +Provides: perl(DirHandle) = 1.04 \ +Provides: perl(Dumpvalue) = 1.18 \ +Provides: perl(DynaLoader) = 1.42 \ +Provides: perl(EVERY::LAST) \ +Provides: perl(English) = 1.10 \ +Provides: perl(ExtUtils::Constant) = 0.23 \ +Provides: perl(ExtUtils::Constant::Base) = 0.05 \ +Provides: perl(ExtUtils::Constant::ProxySubs) = 0.08 \ +Provides: perl(ExtUtils::Constant::Utils) = 0.03 \ +Provides: perl(ExtUtils::Constant::XS) = 0.03 \ +Provides: perl(Fcntl) = 1.13 \ +Provides: perl(File::Basename) = 2.85 \ +Provides: perl(File::Compare) = 1.1006 \ +Provides: perl(File::Copy) = 2.32 \ +Provides: perl(File::DosGlob) = 1.12 \ +Provides: perl(File::Find) = 1.34 \ +Provides: perl(File::Glob) = 1.28 \ +Provides: perl(File::stat) = 1.07 \ +Provides: perl(FileCache) = 1.09 \ +Provides: perl(FileHandle) = 2.03 \ +Provides: perl(FindBin) = 1.51 \ +Provides: perl(GDBM_File) = 1.15 \ +Provides: perl(Getopt::Std) = 1.12 \ +Provides: perl(Hash::Util) = 0.22 \ +Provides: perl(Hash::Util::FieldHash) = 1.19 \ +Provides: perl(I18N::Collate) = 1.02 \ +Provides: perl(I18N::LangTags) = 0.42 \ +Provides: perl(I18N::LangTags::Detect) = 1.06 \ +Provides: perl(I18N::LangTags::List) = 0.39 \ +Provides: perl(I18N::Langinfo) = 0.13 \ +Provides: perl(IPC::Open2) = 1.04 \ +Provides: perl(IPC::Open3) = 1.20 \ +Provides: perl(NDBM_File) = 1.14 \ +Provides: perl(NEXT) = 0.67 \ +Provides: perl(NEXT::ACTUAL) \ +Provides: perl(NEXT::ACTUAL::DISTINCT) \ +Provides: perl(NEXT::ACTUAL::UNSEEN) \ +Provides: perl(NEXT::DISTINCT) \ +Provides: perl(NEXT::DISTINCT::ACTUAL) \ +Provides: perl(NEXT::UNSEEN) \ +Provides: perl(NEXT::UNSEEN::ACTUAL) \ +Provides: perl(Net::hostent) = 1.01 \ +Provides: perl(Net::netent) = 1.00 \ +Provides: perl(Net::protoent) = 1.00 \ +Provides: perl(Net::servent) = 1.01 \ +Provides: perl(O) = 1.01 \ +Provides: perl(ODBM_File) = 1.14 \ +Provides: perl(Opcode) = 1.39 \ +Provides: perl(POSIX) = 1.76 \ +Provides: perl(POSIX::SigAction) \ +Provides: perl(POSIX::SigRt) \ +Provides: perl(POSIX::SigSet) \ +Provides: perl(PerlIO) = 1.10 \ +Provides: perl(PerlIO::encoding) = 0.25 \ +Provides: perl(PerlIO::mmap) = 0.016 \ +Provides: perl(PerlIO::scalar) = 0.26 \ +Provides: perl(PerlIO::via) = 0.17 \ +Provides: perl(Pod::Functions) = 1.11 \ +Provides: perl(SDBM_File) = 1.14 \ +Provides: perl(Safe) = 2.40 \ +Provides: perl(Search::Dict) = 1.07 \ +Provides: perl(SelectSaver) = 1.02 \ +Provides: perl(Symbol) = 1.08 \ +Provides: perl(Sys::Hostname) = 1.20 \ +Provides: perl(Term::Complete) = 1.403 \ +Provides: perl(Term::ReadLine) = 1.17 \ +Provides: perl(Term::ReadLine::Stub) \ +Provides: perl(Term::ReadLine::TermCap) \ +Provides: perl(Term::ReadLine::Tk) \ +Provides: perl(Text::Abbrev) = 1.02 \ +Provides: perl(Thread) = 3.04 \ +Provides: perl(Thread::Semaphore) = 2.13 \ +Provides: perl(Tie::Array) = 1.06 \ +Provides: perl(Tie::ExtraHash) \ +Provides: perl(Tie::File) = 1.02 \ +Provides: perl(Tie::File::Cache) \ +Provides: perl(Tie::File::Heap) \ +Provides: perl(Tie::Handle) = 4.2 \ +Provides: perl(Tie::Hash) \ +Provides: perl(Tie::Hash) = 1.05 \ +Provides: perl(Tie::Hash::NamedCapture) = 0.10 \ +Provides: perl(Tie::Memoize) = 1.1 \ +Provides: perl(Tie::RefHash) = 1.39 \ +Provides: perl(Tie::RefHash::Nestable) \ +Provides: perl(Tie::Scalar) = 1.04 \ +Provides: perl(Tie::StdArray) \ +Provides: perl(Tie::StdHandle) = 4.4 \ +Provides: perl(Tie::StdHash) \ +Provides: perl(Tie::StdScalar) \ +Provides: perl(Tie::SubstrHash) = 1.00 \ +Provides: perl(Time::gmtime) = 1.03 \ +Provides: perl(Time::localtime) = 1.02 \ +Provides: perl(Time::tm) = 1.00 \ +Provides: perl(UNIVERSAL) = 1.13 \ +Provides: perl(Unicode::UCD) = 0.69 \ +Provides: perl(User::grent) = 1.01 \ +Provides: perl(User::pwent) = 1.00 \ +Provides: perl(_charnames) = 1.45 \ +Provides: perl(arybase) = 0.12 \ +Provides: perl(attributes) = 0.29 \ +Provides: perl(autouse) = 1.11 \ +Provides: perl(base) = 2.26 \ +Provides: perl(blib) = 1.06 \ +Provides: perl(bytes) = 1.05 \ +Provides: perl(bytes_heavy.pl) \ +Provides: perl(charnames) = 1.45 \ +Provides: perl(deprecate) = 0.03 \ +Provides: perl(diagnostics) = 1.36 \ +Provides: perl(dumpvar.pl) \ +Provides: perl(encoding::warnings) = 0.13 \ +Provides: perl(feature) = 1.47 \ +Provides: perl(fields) = 2.23 \ +Provides: perl(filetest) = 1.03 \ +Provides: perl(if) = 0.0606 \ +Provides: perl(less) = 0.03 \ +Provides: perl(lib) = 0.64 \ +Provides: perl(locale) = 1.09 \ +Provides: perl(mro) = 1.20 \ +Provides: perl(ops) = 1.02 \ +Provides: perl(overload) = 1.28 \ +Provides: perl(overload::numbers) \ +Provides: perl(overloading) = 0.02 \ +Provides: perl(perl5db.pl) \ +Provides: perl(sigtrap) = 1.08 \ +Provides: perl(sort) = 2.02 \ +Provides: perl(subs) = 1.02 \ +Provides: perl(vars) = 1.03 \ +Provides: perl(vmsish) = 1.04 \ +Provides: perl(warnings::register) = 1.04 \ +%{nil} +%global gendep_perl_interpreter_debuginfo \ +%{nil} +%global gendep_perl_libnet \ +Requires: perl(:VERSION) >= 5.8.1 \ +Requires: perl(Carp) \ +Requires: perl(Errno) \ +Requires: perl(Exporter) \ +Requires: perl(Fcntl) \ +Requires: perl(FileHandle) \ +Requires: perl(IO::Select) \ +Requires: perl(IO::Socket) \ +Requires: perl(Net::Cmd) \ +Requires: perl(Net::Config) \ +Requires: perl(Net::FTP::I) \ +Requires: perl(Net::FTP::dataconn) \ +Requires: perl(Socket) \ +Requires: perl(Symbol) \ +Requires: perl(Time::Local) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Net::Cmd) = 3.10 \ +Provides: perl(Net::Config) = 3.10 \ +Provides: perl(Net::Domain) = 3.10 \ +Provides: perl(Net::FTP) = 3.10 \ +Provides: perl(Net::FTP::A) = 3.10 \ +Provides: perl(Net::FTP::E) = 3.10 \ +Provides: perl(Net::FTP::I) = 3.10 \ +Provides: perl(Net::FTP::L) = 3.10 \ +Provides: perl(Net::FTP::_SSL_SingleSessionCache) \ +Provides: perl(Net::FTP::dataconn) = 3.10 \ +Provides: perl(Net::NNTP) = 3.10 \ +Provides: perl(Net::NNTP::_SSL) \ +Provides: perl(Net::Netrc) = 3.10 \ +Provides: perl(Net::POP3) = 3.10 \ +Provides: perl(Net::POP3::_SSL) \ +Provides: perl(Net::SMTP) = 3.10 \ +Provides: perl(Net::SMTP::_SSL) \ +Provides: perl(Net::Time) = 3.10 \ +%{nil} +%global gendep_perl_libnetcfg \ +Requires: perl(ExtUtils::MakeMaker) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Std) \ +Requires: perl(IO::File) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +%{nil} +%global gendep_perl_libs \ +Requires: perl(integer) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(:MODULE_COMPAT_5.26.0) \ +Provides: perl(:MODULE_COMPAT_5.26.1) \ +Provides: perl(:MODULE_COMPAT_5.26.2) \ +Provides: perl(:VERSION) = 5.26.2 \ +Provides: perl(:WITH_64BIT) \ +Provides: perl(:WITH_ITHREADS) \ +Provides: perl(:WITH_LARGEFILES) \ +Provides: perl(:WITH_PERLIO) \ +Provides: perl(:WITH_THREADS) \ +Provides: perl(XSLoader) = 0.27 \ +Provides: perl(integer) = 1.01 \ +Provides: perl(re) = 0.34 \ +Provides: perl(strict) = 1.11 \ +Provides: perl(unicore::Name) \ +Provides: perl(utf8) = 1.19 \ +Provides: perl(utf8_heavy.pl) \ +Provides: perl(warnings) = 1.37 \ +%{nil} +%global gendep_perl_libs_debuginfo \ +%{nil} +%global gendep_perl_macros \ +%{nil} +%global gendep_perl_open \ +Requires: perl(:VERSION) >= 5.8.1 \ +Requires: perl(warnings) \ +Provides: perl(open) = 1.11 \ +%{nil} +%global gendep_perl_parent \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(parent) = 0.236 \ +%{nil} +%global gendep_perl_perlfaq \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(perlfaq) = 5.021011 \ +%{nil} +%global gendep_perl_podlators \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Encode) \ +Requires: perl(Exporter) \ +Requires: perl(Getopt::Long) \ +Requires: perl(POSIX) \ +Requires: perl(Pod::Man) \ +Requires: perl(Pod::Simple) \ +Requires: perl(Pod::Text) \ +Requires: perl(Pod::Usage) \ +Requires: perl(Term::ANSIColor) \ +Requires: perl(Term::Cap) \ +Requires: perl(strict) \ +Requires: perl(subs) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Pod::Man) = 4.09 \ +Provides: perl(Pod::ParseLink) = 4.09 \ +Provides: perl(Pod::Text) = 4.09 \ +Provides: perl(Pod::Text::Color) = 4.09 \ +Provides: perl(Pod::Text::Overstrike) = 4.09 \ +Provides: perl(Pod::Text::Termcap) = 4.09 \ +%{nil} +%global gendep_perl_tests \ +%{nil} +%global gendep_perl_threads \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(Config) \ +Requires: perl(XSLoader) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(threads) = 2.15 \ +%{nil} +%global gendep_perl_threads_debuginfo \ +%{nil} +%global gendep_perl_threads_shared \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(Scalar::Util) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(threads::shared) = 1.56 \ +%{nil} +%global gendep_perl_threads_shared_debuginfo \ +%{nil} +%global gendep_perl_utils \ +Requires: perl(:VERSION) >= 5.9.1 \ +Requires: perl(Carp) \ +Requires: perl(Config) \ +Requires: perl(File::Basename) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(Getopt::Std) \ +Requires: perl(Text::Tabs) \ +Requires: perl(re) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +%{nil} +%global gendep_perl_version \ +Requires: perl(:VERSION) >= 5.6.2 \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(version::regex) \ +Requires: perl(warnings::register) \ +Provides: perl(version) = 0.9917 \ +Provides: perl(version::regex) = 0.9917 \ +%{nil} diff --git a/macros.perl b/macros.perl new file mode 100644 index 0000000..9c1fd0c --- /dev/null +++ b/macros.perl @@ -0,0 +1,151 @@ +# Sensible Perl-specific RPM build macros. +# +# Note that these depend on the generic filtering system being in place in +# rpm core; but won't cause a build to fail if they're not present. +# +# Chris Weyl 2009 +# Marcela Mašláňová 2011 + +# This macro unsets several common vars used to control how Makefile.PL (et +# al) build and install packages. We also set a couple to help some of the +# common systems be less interactive. This was blatantly stolen from +# cpanminus, and helps building rpms locally when one makes extensive use of +# local::lib, etc. +# +# Usage, in %build, before "%{__perl} Makefile.PL ..." +# +# %{?perl_ext_env_unset} + +%perl_ext_env_unset %{expand: +unset PERL_MM_OPT MODULEBUILDRC PERL5INC +export PERL_AUTOINSTALL="--defaultdeps" +export PERL_MM_USE_DEFAULT=1 +} + +############################################################################# +# Filtering macro incantations + +# keep track of what "revision" of the filtering we're at. Each time we +# change the filter we should increment this. + +%perl_default_filter_revision 3 + +# By default, for perl packages we want to filter all files in _docdir from +# req/prov scanning. +# Filtering out any provides caused by private libs in vendorarch/archlib +# (vendor/core) is done by rpmbuild since Fedora 20 +# . +# +# Note that this must be invoked in the spec file, preferably as +# "%{?perl_default_filter}", before any %description block. + +%perl_default_filter %{expand: \ +%global __provides_exclude_from %{?__provides_exclude_from:%__provides_exclude_from|}^%{_docdir} +%global __requires_exclude_from %{?__requires_exclude_from:%__requires_exclude_from|}^%{_docdir} +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\\\(VMS|^perl\\\\(Win32|^perl\\\\(DB\\\\)|^perl\\\\(UNIVERSAL\\\\) +%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\\\(VMS|^perl\\\\(Win32 +} + +############################################################################# +# Macros to assist with generating a "-tests" subpackage in a semi-automatic +# manner. +# +# The following macros are still in a highly experimental stage and users +# should be aware that the interface and behaviour may change. +# +# PLEASE, PLEASE CONDITIONALIZE THESE MACROS IF YOU USE THEM. +# +# See http://gist.github.com/284409 + +# These macros should be invoked as above, right before the first %description +# section, and conditionalized. e.g., for the common case where all our tests +# are located under t/, the correct usage is: +# +# %{?perl_default_subpackage_tests} +# +# If custom files/directories need to be specified, this can be done as such: +# +# %{?perl_subpackage_tests:%perl_subpackage_tests t/ one/ three.sql} +# +# etc, etc. + +%perl_version %(eval "`%{__perl} -V:version`"; echo $version) +%perl_testdir %{_libexecdir}/perl5-tests +%cpan_dist_name %(eval echo %{name} | %{__sed} -e 's/^perl-//') + +# easily mark something as required by -tests and BR to the main package +%tests_req() %{expand:\ +BuildRequires: %*\ +%%tests_subpackage_requires %*\ +} + +# fixup (and create if needed) the shbang lines in tests, so they work and +# rpmlint doesn't (correctly) have a fit +%fix_shbang_line() \ +TMPHEAD=`mktemp`\ +TMPBODY=`mktemp`\ +for file in %* ; do \ + head -1 $file > $TMPHEAD\ + tail -n +2 $file > $TMPBODY\ + %{__perl} -pi -e '$f = /^#!/ ? "" : "#!%{__perl}$/"; $_="$f$_"' $TMPHEAD\ + cat $TMPHEAD $TMPBODY > $file\ +done\ +%{__perl} -MExtUtils::MakeMaker -e "ExtUtils::MM_Unix->fixin(qw{%*})"\ +%{__rm} $TMPHEAD $TMPBODY\ +%{nil} + +# additional -tests subpackage requires, if any +%tests_subpackage_requires() %{expand: \ +%global __tests_spkg_req %{?__tests_spkg_req} %* \ +} + +# additional -tests subpackage provides, if any +%tests_subpackage_provides() %{expand: \ +%global __tests_spkg_prov %{?__tests_spkg_prov} %* \ +} + +# +# Runs after the body of %check completes. +# + +%__perl_check_pre %{expand: \ +%{?__spec_check_pre} \ +pushd %{buildsubdir} \ +%define perl_br_testdir %{buildroot}%{perl_testdir}/%{cpan_dist_name} \ +%{__mkdir_p} %{perl_br_testdir} \ +%{__tar} -cf - %{__perl_test_dirs} | ( cd %{perl_br_testdir} && %{__tar} -xf - ) \ +find . -maxdepth 1 -type f -name '*META*' -exec %{__cp} -vp {} %{perl_br_testdir} ';' \ +find %{perl_br_testdir} -type f -exec %{__chmod} -c -x {} ';' \ +T_FILES=`find %{perl_br_testdir} -type f -name '*.t'` \ +%fix_shbang_line $T_FILES \ +%{__chmod} +x $T_FILES \ +%{_fixperms} %{perl_br_testdir} \ +popd \ +} + +# +# The actual invoked macro +# + +%perl_subpackage_tests() %{expand: \ +%global __perl_package 1\ +%global __perl_test_dirs %* \ +%global __spec_check_pre %{expand:%{__perl_check_pre}} \ +%package tests\ +Summary: Test suite for package %{name}\ +Group: Development/Debug\ +Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release}\ +Requires: /usr/bin/prove \ +%{?__tests_spkg_req:Requires: %__tests_spkg_req}\ +%{?__tests_spkg_prov:Provides: %__tests_spkg_prov}\ +AutoReqProv: 0 \ +%description tests\ +This package provides the test suite for package %{name}.\ +%files tests\ +%defattr(-,root,root,-)\ +%{perl_testdir}\ +} + +# shortcut sugar +%perl_default_subpackage_tests %perl_subpackage_tests t/ + diff --git a/perl-5.10.0-libresolv.patch b/perl-5.10.0-libresolv.patch new file mode 100644 index 0000000..a844a28 --- /dev/null +++ b/perl-5.10.0-libresolv.patch @@ -0,0 +1,12 @@ +diff -up perl-5.10.0/Configure.didi perl-5.10.0/Configure +--- perl-5.10.0/Configure.didi 2007-12-18 11:47:07.000000000 +0100 ++++ perl-5.10.0/Configure 2008-07-21 10:51:16.000000000 +0200 +@@ -1479,7 +1479,7 @@ archname='' + usereentrant='undef' + : List of libraries we want. + : If anyone needs extra -lxxx, put those in a hint file. +-libswanted="cl pthread socket bind inet nsl ndbm gdbm dbm db malloc dl ld" ++libswanted="cl pthread socket resolv inet nsl ndbm gdbm dbm db malloc dl ld" + libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD" + : We probably want to search /usr/shlib before most other libraries. + : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist. diff --git a/perl-5.10.0-x86_64-io-test-failure.patch b/perl-5.10.0-x86_64-io-test-failure.patch new file mode 100644 index 0000000..08adda8 --- /dev/null +++ b/perl-5.10.0-x86_64-io-test-failure.patch @@ -0,0 +1,12 @@ +diff -up perl-5.10.0/t/io/fs.t.BAD perl-5.10.0/t/io/fs.t +--- perl-5.10.0/t/io/fs.t.BAD 2008-01-30 13:36:43.000000000 -0500 ++++ perl-5.10.0/t/io/fs.t 2008-01-30 13:41:27.000000000 -0500 +@@ -227,7 +227,7 @@ isnt($atime, 500000000, 'atime'); + isnt($mtime, 500000000 + $delta, 'mtime'); + + SKIP: { +- skip "no futimes", 6 unless ($Config{d_futimes} || "") eq "define"; ++ skip "no futimes", 6; + open(my $fh, "<", 'b'); + $foo = (utime 500000000,500000000 + $delta, $fh); + is($foo, 1, "futime"); diff --git a/perl-5.14.1-offtest.patch b/perl-5.14.1-offtest.patch new file mode 100644 index 0000000..45294c8 --- /dev/null +++ b/perl-5.14.1-offtest.patch @@ -0,0 +1,17 @@ +diff -up perl-5.14.1/cpan/File-Temp/t/fork.t.off perl-5.14.1/cpan/File-Temp/t/fork.t +--- perl-5.14.1/cpan/File-Temp/t/fork.t.off 2011-04-13 13:36:34.000000000 +0200 ++++ perl-5.14.1/cpan/File-Temp/t/fork.t 2011-06-20 10:29:31.536282611 +0200 +@@ -12,12 +12,8 @@ BEGIN { + $Config::Config{useithreads} and + $Config::Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/ + ); +- if ( $can_fork ) { +- print "1..8\n"; +- } else { +- print "1..0 # Skip No fork available\n"; ++ print "1..0 # Skip Koji doesn't work with Perl fork tests\n"; + exit; +- } + } + + use File::Temp; diff --git a/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch b/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch new file mode 100644 index 0000000..d87aca7 --- /dev/null +++ b/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch @@ -0,0 +1,65 @@ +From b598ba3f2d4b8347c6621cff022b8e2329b79ea5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Wed, 3 Jul 2013 11:01:02 +0200 +Subject: [PATCH] Link XS modules to libperl.so with EU::CBuilder on Linux +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + + + +Signed-off-by: Petr Písař +--- + MANIFEST | 1 + + .../lib/ExtUtils/CBuilder/Platform/linux.pm | 26 ++++++++++++++++++++++ + 2 files changed, 27 insertions(+) + create mode 100644 dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm + +diff --git a/MANIFEST b/MANIFEST +index 397252a..d7c519b 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -3093,6 +3093,7 @@ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm CBuilder methods fo + dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm CBuilder methods for cygwin + dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm CBuilder methods for darwin + dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm CBuilder methods for OSF ++dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm CBuilder methods for Linux + dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm CBuilder methods for OS/2 + dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm CBuilder methods for Unix + dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm CBuilder methods for VMS +diff --git a/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm b/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm +new file mode 100644 +index 0000000..e3251c4 +--- /dev/null ++++ b/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm +@@ -0,0 +1,26 @@ ++package ExtUtils::CBuilder::Platform::linux; ++ ++use strict; ++use ExtUtils::CBuilder::Platform::Unix; ++use File::Spec; ++ ++use vars qw($VERSION @ISA); ++$VERSION = '0.280206'; ++@ISA = qw(ExtUtils::CBuilder::Platform::Unix); ++ ++sub link { ++ my ($self, %args) = @_; ++ my $cf = $self->{config}; ++ ++ # Link XS modules to libperl.so explicitly because multiple ++ # dlopen(, RTLD_LOCAL) hides libperl symbols from XS module. ++ local $cf->{lddlflags} = $cf->{lddlflags}; ++ if ($ENV{PERL_CORE}) { ++ $cf->{lddlflags} .= ' -L' . $self->perl_inc(); ++ } ++ $cf->{lddlflags} .= ' -lperl'; ++ ++ return $self->SUPER::link(%args); ++} ++ ++1; +-- +1.8.1.4 + diff --git a/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch b/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch new file mode 100644 index 0000000..e8ae658 --- /dev/null +++ b/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch @@ -0,0 +1,52 @@ +From fc1f8ac36c34c35bad84fb7b99a26ab83c9ba075 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Wed, 3 Jul 2013 12:59:09 +0200 +Subject: [PATCH] Link XS modules to libperl.so with EU::MM on Linux +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + + + +Signed-off-by: Petr Písař +--- + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +index a8b172f..a3fbce2 100644 +--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm ++++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +@@ -31,6 +31,7 @@ BEGIN { + $Is{IRIX} = $^O eq 'irix'; + $Is{NetBSD} = $^O eq 'netbsd'; + $Is{Interix} = $^O eq 'interix'; ++ $Is{Linux} = $^O eq 'linux'; + $Is{SunOS4} = $^O eq 'sunos'; + $Is{Solaris} = $^O eq 'solaris'; + $Is{SunOS} = $Is{SunOS4} || $Is{Solaris}; +@@ -932,7 +933,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP). + push(@m," \$(RM_F) \$\@\n"); + + my $libs = '$(LDLOADLIBS)'; +- if (($Is{NetBSD} || $Is{Interix} || $Is{Android}) && $Config{'useshrplib'} eq 'true') { ++ if (($Is{Linux} || $Is{NetBSD} || $Is{Interix} || $Is{Android}) && $Config{'useshrplib'} eq 'true') { + # Use nothing on static perl platforms, and to the flags needed + # to link against the shared libperl library on shared perl + # platforms. We peek at lddlflags to see if we need -Wl,-R +@@ -941,6 +942,11 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP). + # The Android linker will not recognize symbols from + # libperl unless the module explicitly depends on it. + $libs .= ' "-L$(PERL_INC)" -lperl'; ++ } else { ++ if ($ENV{PERL_CORE}) { ++ $libs .= ' "-L$(PERL_INC)"'; ++ } ++ $libs .= ' -lperl'; + } + } + +-- +1.8.1.4 + diff --git a/perl-5.16.3-create_libperl_soname.patch b/perl-5.16.3-create_libperl_soname.patch new file mode 100644 index 0000000..fabadf4 --- /dev/null +++ b/perl-5.16.3-create_libperl_soname.patch @@ -0,0 +1,52 @@ +From fa2f0dd5a7767223df10149d3f16d7ed7013e16f Mon Sep 17 00:00:00 2001 +From: Torsten Veller +Date: Sat, 14 Apr 2012 13:49:18 +0200 +Subject: Set libperl soname + +Bug-Gentoo: https://bugs.gentoo.org/286840 + +Patch-Name: gentoo/create_libperl_soname.diff +--- + Makefile.SH | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/Makefile.SH b/Makefile.SH +index d1da0a0..7733a32 100755 +--- a/Makefile.SH ++++ b/Makefile.SH +@@ -58,7 +58,7 @@ true) + ${api_revision}.${api_version}.${api_subversion} \ + -current_version \ + ${revision}.${patchlevel}.${subversion} \ +- -install_name \$(shrpdir)/\$@" ++ -install_name \$(shrpdir)/libperl.${revision}.${patchlevel}.dylib" + ;; + cygwin*) + shrpldflags="$shrpldflags -Wl,--out-implib=libperl.dll.a -Wl,--image-base,0x52000000" +@@ -66,13 +66,15 @@ true) + ;; + sunos*) + linklibperl="-lperl" ++ shrpldflags="$shrpldflags -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}" + ;; + netbsd*|freebsd[234]*|openbsd*|dragonfly*|bitrig*) + linklibperl="-L. -lperl" ++ shrpldflags="$shrpldflags -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}" + ;; + interix*) + linklibperl="-L. -lperl" +- shrpldflags="$shrpldflags -Wl,--image-base,0x57000000" ++ shrpldflags="$shrpldflags -Wl,--image-base,0x57000000 -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}" + ;; + aix*) + case "$cc" in +@@ -110,6 +112,9 @@ true) + linklibperl='libperl.x' + DPERL_EXTERNAL_GLOB='' + ;; ++ linux*) ++ shrpldflags="$shrpldflags -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}" ++ ;; + esac + case "$ldlibpthname" in + '') ;; diff --git a/perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch b/perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch new file mode 100644 index 0000000..bed0adc --- /dev/null +++ b/perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch @@ -0,0 +1,30 @@ +From 862c89c81d26dae0dcef138e19df8b45615e69c9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 2 Dec 2013 10:10:56 +0100 +Subject: [PATCH] Document Math::BigInt::CalcEmu requires Math::BigInt +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + + +Signed-off-by: Petr Písař +--- + dist/Math-BigInt/lib/Math/BigInt/CalcEmu.pm | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/dist/Math-BigInt/lib/Math/BigInt/CalcEmu.pm b/dist/Math-BigInt/lib/Math/BigInt/CalcEmu.pm +index c82e153..0c0b496 100644 +--- a/cpan/Math-BigInt/lib/Math/BigInt/CalcEmu.pm ++++ b/cpan/Math-BigInt/lib/Math/BigInt/CalcEmu.pm +@@ -290,6 +290,7 @@ Math::BigInt::CalcEmu - Emulate low-level math with BigInt code + + =head1 SYNOPSIS + ++ use Math::BigInt; + use Math::BigInt::CalcEmu; + + =head1 DESCRIPTION +-- +1.8.3.1 + diff --git a/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch b/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch new file mode 100644 index 0000000..9b503c6 --- /dev/null +++ b/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch @@ -0,0 +1,233 @@ +From f793042f2bac2ace9a5c0030b47b41c4db561a5b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 6 Jun 2014 14:31:59 +0200 +Subject: [PATCH] Destroy {GDBM,NDBM,ODBM,SDBM}_File objects only from original + thread context +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This patch fixes a crash when destroing a hash tied to a *_File +database after spawning a thread: + +use Fcntl; +use SDBM_File; +use threads; +tie(my %dbtest, 'SDBM_File', "test.db", O_RDWR|O_CREAT, 0666); +threads->new(sub {})->join; + +This crashed or paniced depending on how perl was configured. + +Closes RT#61912. + +Signed-off-by: Petr Písař +--- + ext/GDBM_File/GDBM_File.xs | 16 ++++++++++------ + ext/NDBM_File/NDBM_File.xs | 16 ++++++++++------ + ext/ODBM_File/ODBM_File.xs | 18 +++++++++++------- + ext/SDBM_File/SDBM_File.xs | 4 +++- + t/lib/dbmt_common.pl | 35 +++++++++++++++++++++++++++++++++++ + 5 files changed, 69 insertions(+), 20 deletions(-) + +diff --git a/ext/GDBM_File/GDBM_File.xs b/ext/GDBM_File/GDBM_File.xs +index 33e08e2..7160f54 100644 +--- a/ext/GDBM_File/GDBM_File.xs ++++ b/ext/GDBM_File/GDBM_File.xs +@@ -13,6 +13,7 @@ + #define store_value 3 + + typedef struct { ++ tTHX owner; + GDBM_FILE dbp ; + SV * filter[4]; + int filtering ; +@@ -89,6 +90,7 @@ gdbm_TIEHASH(dbtype, name, read_write, mode) + if ((dbp = gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, + (FATALFUNC) croak_string))) { + RETVAL = (GDBM_File)safecalloc(1, sizeof(GDBM_File_type)) ; ++ RETVAL->owner = aTHX; + RETVAL->dbp = dbp ; + } + +@@ -109,12 +111,14 @@ gdbm_DESTROY(db) + PREINIT: + int i = store_value; + CODE: +- gdbm_close(db); +- do { +- if (db->filter[i]) +- SvREFCNT_dec(db->filter[i]); +- } while (i-- > 0); +- safefree(db); ++ if (db && db->owner == aTHX) { ++ gdbm_close(db); ++ do { ++ if (db->filter[i]) ++ SvREFCNT_dec(db->filter[i]); ++ } while (i-- > 0); ++ safefree(db); ++ } + + #define gdbm_FETCH(db,key) gdbm_fetch(db->dbp,key) + datum_value +diff --git a/ext/NDBM_File/NDBM_File.xs b/ext/NDBM_File/NDBM_File.xs +index 52e60fc..af223e5 100644 +--- a/ext/NDBM_File/NDBM_File.xs ++++ b/ext/NDBM_File/NDBM_File.xs +@@ -33,6 +33,7 @@ END_EXTERN_C + #define store_value 3 + + typedef struct { ++ tTHX owner; + DBM * dbp ; + SV * filter[4]; + int filtering ; +@@ -71,6 +72,7 @@ ndbm_TIEHASH(dbtype, filename, flags, mode) + RETVAL = NULL ; + if ((dbp = dbm_open(filename, flags, mode))) { + RETVAL = (NDBM_File)safecalloc(1, sizeof(NDBM_File_type)); ++ RETVAL->owner = aTHX; + RETVAL->dbp = dbp ; + } + +@@ -84,12 +86,14 @@ ndbm_DESTROY(db) + PREINIT: + int i = store_value; + CODE: +- dbm_close(db->dbp); +- do { +- if (db->filter[i]) +- SvREFCNT_dec(db->filter[i]); +- } while (i-- > 0); +- safefree(db); ++ if (db && db->owner == aTHX) { ++ dbm_close(db->dbp); ++ do { ++ if (db->filter[i]) ++ SvREFCNT_dec(db->filter[i]); ++ } while (i-- > 0); ++ safefree(db); ++ } + + #define ndbm_FETCH(db,key) dbm_fetch(db->dbp,key) + datum_value +diff --git a/ext/ODBM_File/ODBM_File.xs b/ext/ODBM_File/ODBM_File.xs +index d1ece7f..f7e00a0 100644 +--- a/ext/ODBM_File/ODBM_File.xs ++++ b/ext/ODBM_File/ODBM_File.xs +@@ -45,6 +45,7 @@ datum nextkey(datum key); + #define store_value 3 + + typedef struct { ++ tTHX owner; + void * dbp ; + SV * filter[4]; + int filtering ; +@@ -112,6 +113,7 @@ odbm_TIEHASH(dbtype, filename, flags, mode) + } + dbp = (void*)(dbminit(filename) >= 0 ? &dbmrefcnt : 0); + RETVAL = (ODBM_File)safecalloc(1, sizeof(ODBM_File_type)); ++ RETVAL->owner = aTHX; + RETVAL->dbp = dbp ; + } + OUTPUT: +@@ -124,13 +126,15 @@ DESTROY(db) + dMY_CXT; + int i = store_value; + CODE: +- dbmrefcnt--; +- dbmclose(); +- do { +- if (db->filter[i]) +- SvREFCNT_dec(db->filter[i]); +- } while (i-- > 0); +- safefree(db); ++ if (db && db->owner == aTHX) { ++ dbmrefcnt--; ++ dbmclose(); ++ do { ++ if (db->filter[i]) ++ SvREFCNT_dec(db->filter[i]); ++ } while (i-- > 0); ++ safefree(db); ++ } + + datum_value + odbm_FETCH(db, key) +diff --git a/ext/SDBM_File/SDBM_File.xs b/ext/SDBM_File/SDBM_File.xs +index 291e41b..0bdae9a 100644 +--- a/ext/SDBM_File/SDBM_File.xs ++++ b/ext/SDBM_File/SDBM_File.xs +@@ -10,6 +10,7 @@ + #define store_value 3 + + typedef struct { ++ tTHX owner; + DBM * dbp ; + SV * filter[4]; + int filtering ; +@@ -49,6 +50,7 @@ sdbm_TIEHASH(dbtype, filename, flags, mode) + } + if (dbp) { + RETVAL = (SDBM_File)safecalloc(1, sizeof(SDBM_File_type)); ++ RETVAL->owner = aTHX; + RETVAL->dbp = dbp ; + } + +@@ -60,7 +62,7 @@ void + sdbm_DESTROY(db) + SDBM_File db + CODE: +- if (db) { ++ if (db && db->owner == aTHX) { + int i = store_value; + sdbm_close(db->dbp); + do { +diff --git a/t/lib/dbmt_common.pl b/t/lib/dbmt_common.pl +index 5d4098c..a0a4d52 100644 +--- a/t/lib/dbmt_common.pl ++++ b/t/lib/dbmt_common.pl +@@ -511,5 +511,40 @@ unlink , $Dfile; + unlink ; + } + ++{ ++ # Check DBM back-ends do not destroy objects from then-spawned threads. ++ # RT#61912. ++ SKIP: { ++ my $threads_count = 2; ++ skip 'Threads are disabled', 3 + 2 * $threads_count ++ unless $Config{usethreads}; ++ use_ok('threads'); ++ ++ my %h; ++ unlink ; ++ ++ my $db = tie %h, $DBM_Class, 'Op1_dbmx', $create, 0640; ++ isa_ok($db, $DBM_Class); ++ ++ for (1 .. 2) { ++ ok(threads->create( ++ sub { ++ $SIG{'__WARN__'} = sub { fail(shift) }; # debugging perl panics ++ # report it by spurious TAP line ++ 1; ++ }), "Thread $_ created"); ++ } ++ for (threads->list) { ++ is($_->join, 1, "A thread exited successfully"); ++ } ++ ++ pass("Tied object survived exiting threads"); ++ ++ undef $db; ++ untie %h; ++ unlink ; ++ } ++} ++ + done_testing(); + 1; +-- +1.9.3 + diff --git a/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch b/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch new file mode 100644 index 0000000..6d43814 --- /dev/null +++ b/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch @@ -0,0 +1,61 @@ +From 9644657c4 10326749fd321d9c24944ec25afad2f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Thu, 20 Jun 2013 15:22:53 +0200 +Subject: [PATCH] Install libperl.so to shrpdir on Linux +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Petr Písař +--- + Configure | 7 ++++--- + Makefile.SH | 2 +- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/Configure b/Configure +index 2f30261..825496e 100755 +--- a/Configure ++++ b/Configure +@@ -8249,7 +8249,9 @@ esac + + # Detect old use of shrpdir via undocumented Configure -Dshrpdir + case "$shrpdir" in +-'') ;; ++'') ++shrpdir=$archlibexp/CORE ++;; + *) $cat >&4 < +Date: Mon, 18 Apr 2016 16:24:03 +0200 +Subject: [PATCH] Provide ExtUtils::MM methods as standalone + ExtUtils::MM::Utils +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If you cannot afford depending on ExtUtils::MakeMaker, you can +depend on ExtUtils::MM::Utils instead. + + + +Signed-off-by: Petr Písař +--- + MANIFEST | 1 + + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm | 68 ++++++++++++++++++++++++ + 2 files changed, 69 insertions(+) + create mode 100644 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm + +diff --git a/MANIFEST b/MANIFEST +index 6af238c..d4f0c56 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -1045,6 +1045,7 @@ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2 + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2 + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm MakeMaker methods for QNX + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm MakeMaker methods for Unix ++cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm Independed MM methods + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm MakeMaker methods for U/WIN + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm MakeMaker methods for VMS + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm MakeMaker methods for VOS +diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm +new file mode 100644 +index 0000000..6bbc0d8 +--- /dev/null ++++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm +@@ -0,0 +1,68 @@ ++package ExtUtils::MM::Utils; ++ ++require 5.006; ++ ++use strict; ++use vars qw($VERSION); ++$VERSION = '7.11_06'; ++$VERSION = eval $VERSION; ## no critic [BuiltinFunctions::ProhibitStringyEval] ++ ++=head1 NAME ++ ++ExtUtils::MM::Utils - ExtUtils::MM methods without dependency on ExtUtils::MakeMaker ++ ++=head1 SYNOPSIS ++ ++ require ExtUtils::MM::Utils; ++ MM->maybe_command($file); ++ ++=head1 DESCRIPTION ++ ++This is a collection of L subroutines that are used by many ++other modules but that do not need full-featured L. The ++issue with L is it pulls in Perl header files and that is ++an overkill for small subroutines. ++ ++An example is the L that caused installing GCC just because of ++three-line I from L. ++ ++The intentions is to use L instead of ++L for these trivial methods. You can still call them via ++L class name. ++ ++=head1 METHODS ++ ++=over 4 ++ ++=item maybe_command ++ ++Returns true, if the argument is likely to be a command. ++ ++=cut ++ ++if (!exists $INC{'ExtUtils/MM.pm'}) { ++ *MM::maybe_command = *ExtUtils::MM::maybe_command = \&maybe_command; ++} ++ ++sub maybe_command { ++ my($self,$file) = @_; ++ return $file if -x $file && ! -d $file; ++ return; ++} ++ ++1; ++ ++=back ++ ++=head1 BUGS ++ ++These methods are copied from L. Other operating systems ++are not supported yet. The reason is this ++L. ++ ++=head1 SEE ALSO ++ ++L, L ++ ++=cut +-- +2.5.5 + diff --git a/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch b/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch new file mode 100644 index 0000000..572d37e --- /dev/null +++ b/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch @@ -0,0 +1,34 @@ +From 216ddd39adb0043930acad70ff242c30a1b0c6cf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 18 Apr 2016 16:39:32 +0200 +Subject: [PATCH] Replace EU::MM dependnecy with EU::MM::Utils in IPC::Cmd +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This allows to free from a run-time dependency on fat +ExtUtils::MakeMaker. + + + +Signed-off-by: Petr Písař +--- + cpan/IPC-Cmd/lib/IPC/Cmd.pm | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cpan/IPC-Cmd/lib/IPC/Cmd.pm b/cpan/IPC-Cmd/lib/IPC/Cmd.pm +index 6a82bdf..b6cd7ef 100644 +--- a/cpan/IPC-Cmd/lib/IPC/Cmd.pm ++++ b/cpan/IPC-Cmd/lib/IPC/Cmd.pm +@@ -230,7 +230,7 @@ sub can_run { + } + + require File::Spec; +- require ExtUtils::MakeMaker; ++ require ExtUtils::MM::Utils; + + my @possibles; + +-- +2.5.5 + diff --git a/perl-5.26.0-Time-HiRes-Fix-unreliable-t-usleep.t-and-t-utime.t.patch b/perl-5.26.0-Time-HiRes-Fix-unreliable-t-usleep.t-and-t-utime.t.patch new file mode 100644 index 0000000..206aeea --- /dev/null +++ b/perl-5.26.0-Time-HiRes-Fix-unreliable-t-usleep.t-and-t-utime.t.patch @@ -0,0 +1,73 @@ +From 8985b12868f07d9ef501580d600e49fe8f230eb4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 22 Aug 2017 09:49:42 +0200 +Subject: [PATCH] Time-HiRes: Fix unreliable t/usleep.t and t/utime.t +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Ported from Time-HiRes-1.9746. + +The tests randomly failed on loaded machines because a CPU scheduler +could add unpredictable delays. + +CPAN RT#122819 + +Signed-off-by: Petr Písař +--- + dist/Time-HiRes/t/usleep.t | 4 ++-- + dist/Time-HiRes/t/utime.t | 9 +++++---- + 2 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/dist/Time-HiRes/t/usleep.t b/dist/Time-HiRes/t/usleep.t +index 9322458..bb66cbe 100644 +--- a/dist/Time-HiRes/t/usleep.t ++++ b/dist/Time-HiRes/t/usleep.t +@@ -32,7 +32,7 @@ SKIP: { + Time::HiRes::usleep(500_000); + my $f2 = Time::HiRes::time(); + my $d = $f2 - $f; +- ok $d > 0.4 && $d < 0.9 or print("# slept $d secs $f to $f2\n"); ++ ok $d > 0.49 or print("# slept $d secs $f to $f2\n"); + } + + SKIP: { +@@ -40,7 +40,7 @@ SKIP: { + my $r = [ Time::HiRes::gettimeofday() ]; + Time::HiRes::sleep( 0.5 ); + my $f = Time::HiRes::tv_interval $r; +- ok $f > 0.4 && $f < 0.9 or print("# slept $f instead of 0.5 secs.\n"); ++ ok $f > 0.49 or print("# slept $f instead of 0.5 secs.\n"); + } + + SKIP: { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 22fd48e..c5c7e55 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -106,17 +106,18 @@ print "# utime undef sets time to now\n"; + my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); + + my $now = Time::HiRes::time; ++ sleep(1); + is Time::HiRes::utime(undef, undef, $filename1, $fh2), 2, "Two files changed"; + + { + my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9]; +- cmp_ok abs( $got_atime - $now), '<', 0.1, "File 1 atime set correctly"; +- cmp_ok abs( $got_mtime - $now), '<', 0.1, "File 1 mtime set correctly"; ++ cmp_ok $got_atime, '>=', $now, "File 1 atime set correctly"; ++ cmp_ok $got_mtime, '>=', $now, "File 1 mtime set correctly"; + } + { + my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9]; +- cmp_ok abs( $got_atime - $now), '<', 0.1, "File 2 atime set correctly"; +- cmp_ok abs( $got_mtime - $now), '<', 0.1, "File 2 mtime set correctly"; ++ cmp_ok $got_atime, '>=', $now, "File 2 atime set correctly"; ++ cmp_ok $got_mtime, '>=', $now, "File 2 mtime set correctly"; + } + }; + +-- +2.9.5 + diff --git a/perl-5.26.0-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch b/perl-5.26.0-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch new file mode 100644 index 0000000..0ba657a --- /dev/null +++ b/perl-5.26.0-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch @@ -0,0 +1,72 @@ +From 7b3e03bd309fcc48a135123a60678ae2596b1c38 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Wed, 7 Jun 2017 15:00:26 +1000 +Subject: [PATCH] clear the UTF8 flag on a glob if it isn't UTF8 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Ported to 5.26.0: + +commit 1097da16b21fe0a2257dba9937e55c0cca18f7e1 +Author: Tony Cook +Date: Wed Jun 7 15:00:26 2017 +1000 + + [perl #131263] clear the UTF8 flag on a glob if it isn't UTF8 + + Previously sv_2pv_flags() would set the UTF8 flag on a glob if it + had a UTF8 name, but wouldn't clear tha flag if it didn't. + + This meant a name change, eg. if assigned another glob, from a UTF8 + name to a non-UTF8 name would leave the flag set. + +Signed-off-by: Petr Písař +--- + sv.c | 2 ++ + t/op/gv.t | 10 +++++++++- + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/sv.c b/sv.c +index 9f3e28e..ae3dc95 100644 +--- a/sv.c ++++ b/sv.c +@@ -3179,6 +3179,8 @@ Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags) + assert(SvPOK(buffer)); + if (SvUTF8(buffer)) + SvUTF8_on(sv); ++ else ++ SvUTF8_off(sv); + if (lp) + *lp = SvCUR(buffer); + return SvPVX(buffer); +diff --git a/t/op/gv.t b/t/op/gv.t +index 4fe6b00..670ccf6 100644 +--- a/t/op/gv.t ++++ b/t/op/gv.t +@@ -12,7 +12,7 @@ BEGIN { + + use warnings; + +-plan(tests => 280); ++plan(tests => 282); + + # type coercion on assignment + $foo = 'foo'; +@@ -1170,6 +1170,14 @@ SKIP: { + is ($? & 127, 0,"[perl #128597] No crash when gp_free calls ckWARN_d"); + } + ++{ ++ # [perl #131263] ++ *sym = "\N{U+0080}"; ++ ok(*sym eq "*main::\N{U+0080}", "utf8 flag properly set"); ++ *sym = "\xC3\x80"; ++ ok(*sym eq "*main::\xC3\x80", "utf8 flag properly cleared"); ++} ++ + # test gv_try_downgrade() + # If a GV can be stored in a stash in a compact, non-GV form, then + # whenever ops are freed which reference the GV, an attempt is made to +-- +2.9.4 + diff --git a/perl-5.26.0-perl-131588-be-a-little-more-careful-in-arybase-_tie.patch b/perl-5.26.0-perl-131588-be-a-little-more-careful-in-arybase-_tie.patch new file mode 100644 index 0000000..3749874 --- /dev/null +++ b/perl-5.26.0-perl-131588-be-a-little-more-careful-in-arybase-_tie.patch @@ -0,0 +1,61 @@ +From cb2fda94b02c5b7e8d16582410034f5a3dae526f Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Tue, 25 Jul 2017 16:21:22 +1000 +Subject: [PATCH] (perl #131588) be a little more careful in arybase::_tie_it() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Original patch by John Leitch +Petr Pisar: Ported to 5.26.0. + +Signed-off-by: Petr Písař +--- + ext/arybase/arybase.xs | 10 ++++++---- + ext/arybase/t/arybase.t | 4 +++- + 2 files changed, 9 insertions(+), 5 deletions(-) + +diff --git a/ext/arybase/arybase.xs b/ext/arybase/arybase.xs +index 880bbe3..216442a 100644 +--- a/ext/arybase/arybase.xs ++++ b/ext/arybase/arybase.xs +@@ -438,10 +438,12 @@ _tie_it(SV *sv) + INIT: + GV * const gv = (GV *)sv; + CODE: +- if (GvSV(gv)) +- /* This is *our* scalar now! */ +- sv_unmagic(GvSV(gv), PERL_MAGIC_sv); +- tie(aTHX_ GvSVn(gv), NULL, GvSTASH(CvGV(cv))); ++ if (isGV(gv)) { ++ if (GvSV(gv)) ++ /* This is *our* scalar now! */ ++ sv_unmagic(GvSV(gv), PERL_MAGIC_sv); ++ tie(aTHX_ GvSVn(gv), NULL, GvSTASH(CvGV(cv))); ++ } + + void + FETCH(...) +diff --git a/ext/arybase/t/arybase.t b/ext/arybase/t/arybase.t +index f3d3287..41e90df 100644 +--- a/ext/arybase/t/arybase.t ++++ b/ext/arybase/t/arybase.t +@@ -4,7 +4,7 @@ + # plus miscellaneous bug fix tests + + no warnings 'deprecated'; +-use Test::More tests => 7; ++use Test::More tests => 8; + + sub outside_base_scope { return "${'['}" } + +@@ -34,4 +34,6 @@ is $@, "That use of \$[ is unsupported at $f line $l.\n", + + sub foo { my $x; $x = wait } # compilation of this routine used to crash + ++ok eval { arybase::_tie_it(1); 1 }, "don't crash on bad call to _tie_it()"; ++ + 1; +-- +2.9.4 + diff --git a/perl-5.26.0-t-op-hash.t-fixup-intermittently-failing-test.patch b/perl-5.26.0-t-op-hash.t-fixup-intermittently-failing-test.patch new file mode 100644 index 0000000..9463079 --- /dev/null +++ b/perl-5.26.0-t-op-hash.t-fixup-intermittently-failing-test.patch @@ -0,0 +1,37 @@ +From 37268580c0cfbf190ff9aa7859a604713cb366ee Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Tue, 27 Jun 2017 16:36:57 +0200 +Subject: [PATCH] t/op/hash.t: fixup intermittently failing test +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Port to 5.26.0: + +commit b2ac59d1d0fda74d6612701d8316fe8dfb6a1b90 +Author: Yves Orton +Date: Tue Jun 27 16:36:57 2017 +0200 + + t/op/hash.t: fixup intermittently failing test + +Signed-off-by: Petr Písař +--- + t/op/hash.t | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/t/op/hash.t b/t/op/hash.t +index a0e79c7..b941c57 100644 +--- a/t/op/hash.t ++++ b/t/op/hash.t +@@ -206,7 +206,7 @@ sub torture_hash { + my $keys = pop @groups; + ++$h->{$_} foreach @$keys; + my (undef, $total) = validate_hash("$desc " . keys %$h, $h); +- is($total, $total0, "bucket count is constant when rebuilding"); ++ ok($total == $total0 || $total == ($total0*2), "bucket count is expected size when rebuilding"); + is(scalar %$h, pop @groups, "scalar keys is identical when rebuilding"); + ++$h1->{$_} foreach @$keys; + validate_hash("$desc copy " . keys %$h1, $h1); +-- +2.9.4 + diff --git a/perl-5.26.1-Fix-deparsing-of-transliterations-with-unprintable-c.patch b/perl-5.26.1-Fix-deparsing-of-transliterations-with-unprintable-c.patch new file mode 100644 index 0000000..f8c700e --- /dev/null +++ b/perl-5.26.1-Fix-deparsing-of-transliterations-with-unprintable-c.patch @@ -0,0 +1,48 @@ +From abd17348111a99642da217c45d836f2df5713594 Mon Sep 17 00:00:00 2001 +From: John Lightsey +Date: Tue, 31 Oct 2017 18:12:26 -0500 +Subject: [PATCH] Fix deparsing of transliterations with unprintable + characters. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RT #132405 + +Signed-off-by: Nicolas R +Petr Písař: Port to 5.26.1. +Signed-off-by: Petr Písař +--- + lib/B/Deparse.pm | 2 +- + lib/B/Deparse.t | 5 +++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm +index 3166415..cc74552 100644 +--- a/lib/B/Deparse.pm ++++ b/lib/B/Deparse.pm +@@ -5200,7 +5200,7 @@ sub pchr { # ASCII + } elsif ($n == ord "\r") { + return '\\r'; + } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) { +- return '\\c' . unctrl{chr $n}; ++ return '\\c' . $unctrl{chr $n}; + } else { + # return '\x' . sprintf("%02x", $n); + return '\\' . sprintf("%03o", $n); +diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t +index 7eeb4f8..eae9c49 100644 +--- a/lib/B/Deparse.t ++++ b/lib/B/Deparse.t +@@ -2610,3 +2610,8 @@ sub ($a, $=) { + $a; + } + ; ++#### ++# tr with unprintable characters ++my $str; ++$str = 'foo'; ++$str =~ tr/\cA//; +-- +2.13.6 + diff --git a/perl-5.26.1-fix-do-dir-returning-no.patch b/perl-5.26.1-fix-do-dir-returning-no.patch new file mode 100644 index 0000000..aa44d7d --- /dev/null +++ b/perl-5.26.1-fix-do-dir-returning-no.patch @@ -0,0 +1,111 @@ +From 3dfcac940930a8aa6779f5debea6ea6357372419 Mon Sep 17 00:00:00 2001 +From: Daniel Dragan +Date: Sun, 16 Aug 2015 04:30:23 -0400 +Subject: [PATCH] fix do dir returning no $! +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +do()ing a directory was returning false/empty string in $!, which isn't +an error, yet documentation says $! should have the error code in it. +Fix this by returning EISDIR for dirs, and EINVAL for block devices. +[perl #125774] + +Remove "errno = 0" and comment added in b2da7ead68, since now there is no +scenario where errno is uninitialized, since the dir and block device +failure branches now set errno, where previously they didn't. + +Petr Písař: Ported to 5.26.1. + +Signed-off-by: Petr Písař +--- + pp_ctl.c | 25 +++++++++++++++++-------- + t/op/do.t | 14 +++++++++++++- + 2 files changed, 30 insertions(+), 9 deletions(-) + +diff --git a/pp_ctl.c b/pp_ctl.c +index e24d7b6..f136f91 100644 +--- a/pp_ctl.c ++++ b/pp_ctl.c +@@ -3534,15 +3534,22 @@ S_check_type_and_open(pTHX_ SV *name) + errno EACCES, so only do a stat to separate a dir from a real EACCES + caused by user perms */ + #ifndef WIN32 +- /* we use the value of errno later to see how stat() or open() failed. +- * We don't want it set if the stat succeeded but we still failed, +- * such as if the name exists, but is a directory */ +- errno = 0; +- + st_rc = PerlLIO_stat(p, &st); + +- if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) { ++ if (st_rc < 0) + return NULL; ++ else { ++ int eno; ++ if(S_ISBLK(st.st_mode)) { ++ eno = EINVAL; ++ goto not_file; ++ } ++ else if(S_ISDIR(st.st_mode)) { ++ eno = EISDIR; ++ not_file: ++ errno = eno; ++ return NULL; ++ } + } + #endif + +@@ -3554,8 +3561,10 @@ S_check_type_and_open(pTHX_ SV *name) + int eno; + st_rc = PerlLIO_stat(p, &st); + if (st_rc >= 0) { +- if(S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) +- eno = 0; ++ if(S_ISDIR(st.st_mode)) ++ eno = EISDIR; ++ else if(S_ISBLK(st.st_mode)) ++ eno = EINVAL; + else + eno = EACCES; + errno = eno; +diff --git a/t/op/do.t b/t/op/do.t +index 78d8800..1c54f0b 100644 +--- a/t/op/do.t ++++ b/t/op/do.t +@@ -7,6 +7,7 @@ BEGIN { + } + use strict; + no warnings 'void'; ++use Errno qw(ENOENT EISDIR); + + my $called; + my $result = do{ ++$called; 'value';}; +@@ -247,7 +248,7 @@ SKIP: { + my $saved_errno = $!; + ok(!$rv, "do returns false on io errror"); + ok(!$saved_error, "\$\@ not set on io error"); +- ok($saved_errno, "\$! set on io error"); ++ ok($saved_errno == ENOENT, "\$! is ENOENT for nonexistent file"); + } + + # do subname should not be do "subname" +@@ -305,4 +306,15 @@ SKIP: { + } + + ++# do file $!s must be correct ++{ ++ local @INC = ('.'); #want EISDIR not ENOENT ++ my $rv = do 'op'; # /t/op dir ++ my $saved_error = $@; ++ my $saved_errno = $!+0; ++ ok(!$rv, "do dir returns false"); ++ ok(!$saved_error, "\$\@ is false on do dir"); ++ ok($saved_errno == EISDIR, "\$! is EISDIR on do dir"); ++} ++ + done_testing(); +-- +2.13.6 + diff --git a/perl-5.26.1-fix-parsing-of-braced-subscript-after-parens.patch b/perl-5.26.1-fix-parsing-of-braced-subscript-after-parens.patch new file mode 100644 index 0000000..55f0bcd --- /dev/null +++ b/perl-5.26.1-fix-parsing-of-braced-subscript-after-parens.patch @@ -0,0 +1,1075 @@ +From 52ef21e43af97a7ed71a9bb7621a3c058196cfc2 Mon Sep 17 00:00:00 2001 +From: Zefram +Date: Tue, 16 Jan 2018 08:04:08 +0000 +Subject: [PATCH] fix parsing of braced subscript after parens +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Where an arrow is omitted between subscripts, if a parenthesised +subscript is followed by a braced one, PL_expect was getting set to +XBLOCK due to code intended for "foreach (...) {...}". This broke +bareword autoquotation, and the parsing of operators following the +braced subscript. Alter PL_expect from XBLOCK to XOPERATOR following +a parenthesised subscript. Fixes [perl #8045]. + +Petr Písař: Ported to 5.26.1. + +Signed-off-by: Petr Písař +--- + perly.act | 250 +++++++++++++++++++++++++++------------------------- + perly.h | 10 ++- + perly.tab | 30 +++---- + perly.y | 20 ++++- + t/op/postfixderef.t | 25 +++++- + 5 files changed, 192 insertions(+), 143 deletions(-) + +diff --git a/perly.act b/perly.act +index 73c44e5..4f74883 100644 +--- a/perly.act ++++ b/perly.act +@@ -1194,65 +1194,77 @@ case 2: + case 141: + #line 931 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, +- newCVREF(0, scalar((ps[-3].val.opval)))); } ++ newCVREF(0, scalar((ps[-3].val.opval)))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + + break; + + case 142: +-#line 934 "perly.y" /* yacc.c:1646 */ ++#line 937 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, (ps[-1].val.opval), +- newCVREF(0, scalar((ps[-4].val.opval))))); } ++ newCVREF(0, scalar((ps[-4].val.opval))))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + + break; + + case 143: +-#line 939 "perly.y" /* yacc.c:1646 */ ++#line 945 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, (ps[-1].val.opval), +- newCVREF(0, scalar((ps[-3].val.opval))))); } ++ newCVREF(0, scalar((ps[-3].val.opval))))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + + break; + + case 144: +-#line 943 "perly.y" /* yacc.c:1646 */ ++#line 952 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, +- newCVREF(0, scalar((ps[-2].val.opval)))); } ++ newCVREF(0, scalar((ps[-2].val.opval)))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + + break; + + case 145: +-#line 946 "perly.y" /* yacc.c:1646 */ ++#line 958 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } + + break; + + case 146: +-#line 948 "perly.y" /* yacc.c:1646 */ ++#line 960 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } + + break; + + case 147: +-#line 950 "perly.y" /* yacc.c:1646 */ ++#line 962 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } + + break; + + case 148: +-#line 955 "perly.y" /* yacc.c:1646 */ ++#line 967 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } + + break; + + case 149: +-#line 957 "perly.y" /* yacc.c:1646 */ ++#line 969 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 150: +-#line 959 "perly.y" /* yacc.c:1646 */ ++#line 971 "perly.y" /* yacc.c:1646 */ + { if ((ps[-1].val.ival) != OP_REPEAT) + scalar((ps[-2].val.opval)); + (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); +@@ -1261,111 +1273,111 @@ case 2: + break; + + case 151: +-#line 964 "perly.y" /* yacc.c:1646 */ ++#line 976 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 152: +-#line 966 "perly.y" /* yacc.c:1646 */ ++#line 978 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 153: +-#line 968 "perly.y" /* yacc.c:1646 */ ++#line 980 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 154: +-#line 970 "perly.y" /* yacc.c:1646 */ ++#line 982 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 155: +-#line 972 "perly.y" /* yacc.c:1646 */ ++#line 984 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 156: +-#line 974 "perly.y" /* yacc.c:1646 */ ++#line 986 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 157: +-#line 976 "perly.y" /* yacc.c:1646 */ ++#line 988 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 158: +-#line 978 "perly.y" /* yacc.c:1646 */ ++#line 990 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 159: +-#line 980 "perly.y" /* yacc.c:1646 */ ++#line 992 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 160: +-#line 982 "perly.y" /* yacc.c:1646 */ ++#line 994 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 161: +-#line 984 "perly.y" /* yacc.c:1646 */ ++#line 996 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 162: +-#line 989 "perly.y" /* yacc.c:1646 */ ++#line 1001 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } + + break; + + case 163: +-#line 991 "perly.y" /* yacc.c:1646 */ ++#line 1003 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 164: +-#line 994 "perly.y" /* yacc.c:1646 */ ++#line 1006 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } + + break; + + case 165: +-#line 996 "perly.y" /* yacc.c:1646 */ ++#line 1008 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } + + break; + + case 166: +-#line 998 "perly.y" /* yacc.c:1646 */ ++#line 1010 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_POSTINC, 0, + op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } + + break; + + case 167: +-#line 1001 "perly.y" /* yacc.c:1646 */ ++#line 1013 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_POSTDEC, 0, + op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} + + break; + + case 168: +-#line 1004 "perly.y" /* yacc.c:1646 */ ++#line 1016 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = op_convert_list(OP_JOIN, 0, + op_append_elem( + OP_LIST, +@@ -1380,52 +1392,52 @@ case 2: + break; + + case 169: +-#line 1015 "perly.y" /* yacc.c:1646 */ ++#line 1027 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_PREINC, 0, + op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } + + break; + + case 170: +-#line 1018 "perly.y" /* yacc.c:1646 */ ++#line 1030 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_PREDEC, 0, + op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } + + break; + + case 171: +-#line 1025 "perly.y" /* yacc.c:1646 */ ++#line 1037 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } + + break; + + case 172: +-#line 1027 "perly.y" /* yacc.c:1646 */ ++#line 1039 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newANONLIST(NULL);} + + break; + + case 173: +-#line 1029 "perly.y" /* yacc.c:1646 */ ++#line 1041 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } + + break; + + case 174: +-#line 1031 "perly.y" /* yacc.c:1646 */ ++#line 1043 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newANONHASH(NULL); } + + break; + + case 175: +-#line 1033 "perly.y" /* yacc.c:1646 */ ++#line 1045 "perly.y" /* yacc.c:1646 */ + { SvREFCNT_inc_simple_void(PL_compcv); + (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } + + break; + + case 176: +-#line 1036 "perly.y" /* yacc.c:1646 */ ++#line 1048 "perly.y" /* yacc.c:1646 */ + { + OP *body; + if (parser->copline > (line_t)(ps[-2].val.ival)) +@@ -1439,103 +1451,103 @@ case 2: + break; + + case 177: +-#line 1050 "perly.y" /* yacc.c:1646 */ ++#line 1062 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} + + break; + + case 178: +-#line 1052 "perly.y" /* yacc.c:1646 */ ++#line 1064 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} + + break; + + case 183: +-#line 1060 "perly.y" /* yacc.c:1646 */ ++#line 1072 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 184: +-#line 1062 "perly.y" /* yacc.c:1646 */ ++#line 1074 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } + + break; + + case 185: +-#line 1064 "perly.y" /* yacc.c:1646 */ ++#line 1076 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } + + break; + + case 186: +-#line 1066 "perly.y" /* yacc.c:1646 */ ++#line 1078 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 187: +-#line 1068 "perly.y" /* yacc.c:1646 */ ++#line 1080 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = localize((ps[0].val.opval),0); } + + break; + + case 188: +-#line 1070 "perly.y" /* yacc.c:1646 */ ++#line 1082 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = sawparens((ps[-1].val.opval)); } + + break; + + case 189: +-#line 1072 "perly.y" /* yacc.c:1646 */ ++#line 1084 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 190: +-#line 1074 "perly.y" /* yacc.c:1646 */ ++#line 1086 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = sawparens(newNULLLIST()); } + + break; + + case 191: +-#line 1076 "perly.y" /* yacc.c:1646 */ ++#line 1088 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 192: +-#line 1078 "perly.y" /* yacc.c:1646 */ ++#line 1090 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 193: +-#line 1080 "perly.y" /* yacc.c:1646 */ ++#line 1092 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 194: +-#line 1082 "perly.y" /* yacc.c:1646 */ ++#line 1094 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 195: +-#line 1084 "perly.y" /* yacc.c:1646 */ ++#line 1096 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} + + break; + + case 196: +-#line 1086 "perly.y" /* yacc.c:1646 */ ++#line 1098 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 197: +-#line 1088 "perly.y" /* yacc.c:1646 */ ++#line 1100 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = op_prepend_elem(OP_ASLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_ASLICE, 0, +@@ -1549,7 +1561,7 @@ case 2: + break; + + case 198: +-#line 1098 "perly.y" /* yacc.c:1646 */ ++#line 1110 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = op_prepend_elem(OP_KVASLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_KVASLICE, 0, +@@ -1563,7 +1575,7 @@ case 2: + break; + + case 199: +-#line 1108 "perly.y" /* yacc.c:1646 */ ++#line 1120 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = op_prepend_elem(OP_HSLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_HSLICE, 0, +@@ -1577,7 +1589,7 @@ case 2: + break; + + case 200: +-#line 1118 "perly.y" /* yacc.c:1646 */ ++#line 1130 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_KVHSLICE, 0, +@@ -1591,26 +1603,26 @@ case 2: + break; + + case 201: +-#line 1128 "perly.y" /* yacc.c:1646 */ ++#line 1140 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 202: +-#line 1130 "perly.y" /* yacc.c:1646 */ ++#line 1142 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } + + break; + + case 203: +-#line 1132 "perly.y" /* yacc.c:1646 */ ++#line 1144 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); + } + + break; + + case 204: +-#line 1135 "perly.y" /* yacc.c:1646 */ ++#line 1147 "perly.y" /* yacc.c:1646 */ + { + (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); +@@ -1619,7 +1631,7 @@ case 2: + break; + + case 205: +-#line 1140 "perly.y" /* yacc.c:1646 */ ++#line 1152 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); + } +@@ -1627,130 +1639,130 @@ case 2: + break; + + case 206: +-#line 1144 "perly.y" /* yacc.c:1646 */ ++#line 1156 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newSVREF((ps[-3].val.opval)); } + + break; + + case 207: +-#line 1146 "perly.y" /* yacc.c:1646 */ ++#line 1158 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newAVREF((ps[-3].val.opval)); } + + break; + + case 208: +-#line 1148 "perly.y" /* yacc.c:1646 */ ++#line 1160 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newHVREF((ps[-3].val.opval)); } + + break; + + case 209: +-#line 1150 "perly.y" /* yacc.c:1646 */ ++#line 1162 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, + scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } + + break; + + case 210: +-#line 1153 "perly.y" /* yacc.c:1646 */ ++#line 1165 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } + + break; + + case 211: +-#line 1155 "perly.y" /* yacc.c:1646 */ ++#line 1167 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); + PL_hints |= HINT_BLOCK_SCOPE; } + + break; + + case 212: +-#line 1158 "perly.y" /* yacc.c:1646 */ ++#line 1170 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } + + break; + + case 213: +-#line 1160 "perly.y" /* yacc.c:1646 */ ++#line 1172 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } + + break; + + case 214: +-#line 1162 "perly.y" /* yacc.c:1646 */ ++#line 1174 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newOP((ps[0].val.ival), 0); } + + break; + + case 215: +-#line 1164 "perly.y" /* yacc.c:1646 */ ++#line 1176 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } + + break; + + case 216: +-#line 1166 "perly.y" /* yacc.c:1646 */ ++#line 1178 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } + + break; + + case 217: +-#line 1168 "perly.y" /* yacc.c:1646 */ ++#line 1180 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } + + break; + + case 218: +-#line 1170 "perly.y" /* yacc.c:1646 */ ++#line 1182 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } + + break; + + case 219: +-#line 1172 "perly.y" /* yacc.c:1646 */ ++#line 1184 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } + + break; + + case 220: +-#line 1174 "perly.y" /* yacc.c:1646 */ ++#line 1186 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } + + break; + + case 221: +-#line 1177 "perly.y" /* yacc.c:1646 */ ++#line 1189 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newOP((ps[0].val.ival), 0); } + + break; + + case 222: +-#line 1179 "perly.y" /* yacc.c:1646 */ ++#line 1191 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newOP((ps[-2].val.ival), 0);} + + break; + + case 223: +-#line 1181 "perly.y" /* yacc.c:1646 */ ++#line 1193 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 224: +-#line 1183 "perly.y" /* yacc.c:1646 */ ++#line 1195 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[-2].val.opval); } + + break; + + case 225: +-#line 1185 "perly.y" /* yacc.c:1646 */ ++#line 1197 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } + + break; + + case 226: +-#line 1187 "perly.y" /* yacc.c:1646 */ ++#line 1199 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) + ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) + : newOP((ps[-2].val.ival), OPf_SPECIAL); } +@@ -1758,13 +1770,13 @@ case 2: + break; + + case 227: +-#line 1191 "perly.y" /* yacc.c:1646 */ ++#line 1203 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } + + break; + + case 228: +-#line 1193 "perly.y" /* yacc.c:1646 */ ++#line 1205 "perly.y" /* yacc.c:1646 */ + { + if ( (ps[0].val.opval)->op_type != OP_TRANS + && (ps[0].val.opval)->op_type != OP_TRANSR +@@ -1779,13 +1791,13 @@ case 2: + break; + + case 229: +-#line 1204 "perly.y" /* yacc.c:1646 */ ++#line 1216 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } + + break; + + case 232: +-#line 1208 "perly.y" /* yacc.c:1646 */ ++#line 1220 "perly.y" /* yacc.c:1646 */ + { + (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), + newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); +@@ -1794,109 +1806,109 @@ case 2: + break; + + case 234: +-#line 1217 "perly.y" /* yacc.c:1646 */ ++#line 1229 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } + + break; + + case 235: +-#line 1219 "perly.y" /* yacc.c:1646 */ ++#line 1231 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = localize((ps[0].val.opval),1); } + + break; + + case 236: +-#line 1221 "perly.y" /* yacc.c:1646 */ ++#line 1233 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } + + break; + + case 237: +-#line 1226 "perly.y" /* yacc.c:1646 */ ++#line 1238 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = sawparens((ps[-1].val.opval)); } + + break; + + case 238: +-#line 1228 "perly.y" /* yacc.c:1646 */ ++#line 1240 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = sawparens(newNULLLIST()); } + + break; + + case 239: +-#line 1231 "perly.y" /* yacc.c:1646 */ ++#line 1243 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 240: +-#line 1233 "perly.y" /* yacc.c:1646 */ ++#line 1245 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 241: +-#line 1235 "perly.y" /* yacc.c:1646 */ ++#line 1247 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 242: +-#line 1240 "perly.y" /* yacc.c:1646 */ ++#line 1252 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = NULL; } + + break; + + case 243: +-#line 1242 "perly.y" /* yacc.c:1646 */ ++#line 1254 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 244: +-#line 1246 "perly.y" /* yacc.c:1646 */ ++#line 1258 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = NULL; } + + break; + + case 245: +-#line 1248 "perly.y" /* yacc.c:1646 */ ++#line 1260 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 246: +-#line 1252 "perly.y" /* yacc.c:1646 */ ++#line 1264 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = NULL; } + + break; + + case 247: +-#line 1254 "perly.y" /* yacc.c:1646 */ ++#line 1266 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 248: +-#line 1260 "perly.y" /* yacc.c:1646 */ ++#line 1272 "perly.y" /* yacc.c:1646 */ + { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } + + break; + + case 256: +-#line 1277 "perly.y" /* yacc.c:1646 */ ++#line 1289 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } + + break; + + case 257: +-#line 1281 "perly.y" /* yacc.c:1646 */ ++#line 1293 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newSVREF((ps[0].val.opval)); } + + break; + + case 258: +-#line 1285 "perly.y" /* yacc.c:1646 */ ++#line 1297 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newAVREF((ps[0].val.opval)); + if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); + } +@@ -1904,7 +1916,7 @@ case 2: + break; + + case 259: +-#line 1291 "perly.y" /* yacc.c:1646 */ ++#line 1303 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newHVREF((ps[0].val.opval)); + if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); + } +@@ -1912,61 +1924,61 @@ case 2: + break; + + case 260: +-#line 1297 "perly.y" /* yacc.c:1646 */ ++#line 1309 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newAVREF((ps[0].val.opval)); } + + break; + + case 261: +-#line 1299 "perly.y" /* yacc.c:1646 */ ++#line 1311 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newAVREF((ps[-3].val.opval)); } + + break; + + case 262: +-#line 1303 "perly.y" /* yacc.c:1646 */ ++#line 1315 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } + + break; + + case 264: +-#line 1308 "perly.y" /* yacc.c:1646 */ ++#line 1320 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newAVREF((ps[-2].val.opval)); } + + break; + + case 266: +-#line 1313 "perly.y" /* yacc.c:1646 */ ++#line 1325 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newHVREF((ps[-2].val.opval)); } + + break; + + case 268: +-#line 1318 "perly.y" /* yacc.c:1646 */ ++#line 1330 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } + + break; + + case 269: +-#line 1323 "perly.y" /* yacc.c:1646 */ ++#line 1335 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = scalar((ps[0].val.opval)); } + + break; + + case 270: +-#line 1325 "perly.y" /* yacc.c:1646 */ ++#line 1337 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = scalar((ps[0].val.opval)); } + + break; + + case 271: +-#line 1327 "perly.y" /* yacc.c:1646 */ ++#line 1339 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = op_scope((ps[0].val.opval)); } + + break; + + case 272: +-#line 1330 "perly.y" /* yacc.c:1646 */ ++#line 1342 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; +@@ -1977,6 +1989,6 @@ case 2: + + + /* Generated from: +- * a8b5527eacb1205d15c8c01acb4a8f99b494e5b453ddd68a2a2e7fca4be3302a perly.y ++ * c44aaa81abd3fc5c53b5aee014f9e6e11ef70a4c8470b767618f5938627ef0e7 perly.y + * 153cba5d215c1a083a0459c43f4d55c45fd0a7093c197d7247a456dcde21ea53 regen_perly.pl + * ex: set ro: */ +diff --git a/perly.h b/perly.h +index a7e9a43..256d797 100644 +--- a/perly.h ++++ b/perly.h +@@ -7,11 +7,11 @@ + #define PERL_BISON_VERSION 30000 + + #ifdef PERL_CORE +-/* A Bison parser, made by GNU Bison 3.0.2. */ ++/* A Bison parser, made by GNU Bison 3.0.4. */ + + /* Bison interface for Yacc-like parsers in C + +- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. ++ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -160,7 +160,7 @@ S_is_opval_token(int type) { + #endif /* PERL_IN_TOKE_C */ + #endif /* PERL_CORE */ + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +-typedef union YYSTYPE YYSTYPE; ++ + union YYSTYPE + { + +@@ -171,6 +171,8 @@ union YYSTYPE + GV *gvval; + + }; ++ ++typedef union YYSTYPE YYSTYPE; + # define YYSTYPE_IS_TRIVIAL 1 + # define YYSTYPE_IS_DECLARED 1 + #endif +@@ -181,6 +183,6 @@ int yyparse (void); + + + /* Generated from: +- * a8b5527eacb1205d15c8c01acb4a8f99b494e5b453ddd68a2a2e7fca4be3302a perly.y ++ * c44aaa81abd3fc5c53b5aee014f9e6e11ef70a4c8470b767618f5938627ef0e7 perly.y + * 153cba5d215c1a083a0459c43f4d55c45fd0a7093c197d7247a456dcde21ea53 regen_perly.pl + * ex: set ro: */ +diff --git a/perly.tab b/perly.tab +index e4065de..fe19874 100644 +--- a/perly.tab ++++ b/perly.tab +@@ -83,20 +83,20 @@ static const yytype_uint16 yyrline[] = + 769, 774, 773, 825, 826, 830, 832, 834, 836, 840, + 842, 847, 851, 855, 859, 865, 870, 876, 882, 884, + 887, 886, 897, 898, 902, 906, 909, 914, 919, 922, +- 926, 930, 933, 938, 942, 945, 947, 949, 954, 956, +- 958, 963, 965, 967, 969, 971, 973, 975, 977, 979, +- 981, 983, 988, 990, 993, 995, 997, 1000, 1003, 1014, +- 1017, 1024, 1026, 1028, 1030, 1032, 1035, 1049, 1051, 1055, +- 1056, 1057, 1058, 1059, 1061, 1063, 1065, 1067, 1069, 1071, +- 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1097, 1107, +- 1117, 1127, 1129, 1131, 1134, 1139, 1143, 1145, 1147, 1149, +- 1152, 1154, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, +- 1173, 1176, 1178, 1180, 1182, 1184, 1186, 1190, 1193, 1192, +- 1205, 1206, 1207, 1212, 1216, 1218, 1220, 1225, 1227, 1230, +- 1232, 1234, 1239, 1241, 1246, 1247, 1252, 1253, 1259, 1263, +- 1264, 1265, 1268, 1269, 1272, 1273, 1276, 1280, 1284, 1290, +- 1296, 1298, 1302, 1306, 1307, 1311, 1312, 1316, 1317, 1322, +- 1324, 1326, 1329 ++ 926, 930, 936, 944, 951, 957, 959, 961, 966, 968, ++ 970, 975, 977, 979, 981, 983, 985, 987, 989, 991, ++ 993, 995, 1000, 1002, 1005, 1007, 1009, 1012, 1015, 1026, ++ 1029, 1036, 1038, 1040, 1042, 1044, 1047, 1061, 1063, 1067, ++ 1068, 1069, 1070, 1071, 1073, 1075, 1077, 1079, 1081, 1083, ++ 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1109, 1119, ++ 1129, 1139, 1141, 1143, 1146, 1151, 1155, 1157, 1159, 1161, ++ 1164, 1166, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, ++ 1185, 1188, 1190, 1192, 1194, 1196, 1198, 1202, 1205, 1204, ++ 1217, 1218, 1219, 1224, 1228, 1230, 1232, 1237, 1239, 1242, ++ 1244, 1246, 1251, 1253, 1258, 1259, 1264, 1265, 1271, 1275, ++ 1276, 1277, 1280, 1281, 1284, 1285, 1288, 1292, 1296, 1302, ++ 1308, 1310, 1314, 1318, 1319, 1323, 1324, 1328, 1329, 1334, ++ 1336, 1338, 1341 + }; + #endif + +@@ -1109,6 +1109,6 @@ static const toketypes yy_type_tab[] = + }; + + /* Generated from: +- * a8b5527eacb1205d15c8c01acb4a8f99b494e5b453ddd68a2a2e7fca4be3302a perly.y ++ * c44aaa81abd3fc5c53b5aee014f9e6e11ef70a4c8470b767618f5938627ef0e7 perly.y + * 153cba5d215c1a083a0459c43f4d55c45fd0a7093c197d7247a456dcde21ea53 regen_perly.pl + * ex: set ro: */ +diff --git a/perly.y b/perly.y +index 7d57dea..14d48d6 100644 +--- a/perly.y ++++ b/perly.y +@@ -929,19 +929,31 @@ subscripted: gelem '{' expr ';' '}' /* *main::{something} */ + jmaybe($3)); } + | term ARROW '(' ')' /* $subref->() */ + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, +- newCVREF(0, scalar($1))); } ++ newCVREF(0, scalar($1))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + | term ARROW '(' expr ')' /* $subref->(@args) */ + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, $4, +- newCVREF(0, scalar($1)))); } ++ newCVREF(0, scalar($1)))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + + | subscripted '(' expr ')' /* $foo->{bar}->(@args) */ + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, $3, +- newCVREF(0, scalar($1)))); } ++ newCVREF(0, scalar($1)))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + | subscripted '(' ')' /* $foo->{bar}->() */ + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, +- newCVREF(0, scalar($1))); } ++ newCVREF(0, scalar($1))); ++ if (parser->expect == XBLOCK) ++ parser->expect = XOPERATOR; ++ } + | '(' expr ')' '[' expr ']' /* list slice */ + { $$ = newSLICEOP(0, $5, $2); } + | QWLIST '[' expr ']' /* list literal slice */ +diff --git a/t/op/postfixderef.t b/t/op/postfixderef.t +index ba69f06..c2983cf 100644 +--- a/t/op/postfixderef.t ++++ b/t/op/postfixderef.t +@@ -16,7 +16,7 @@ BEGIN { + + use strict qw(refs subs); + +-plan(116); ++plan(130); + + { + no strict 'refs'; +@@ -365,3 +365,26 @@ is "$_->@{foo}", "foo->7 8 9", '->@{ does not interpolate without feature'; + is "foo$ref->$*bar", "foo plus overload plus bar", + '"foo $s->$* bar" does concat overloading'; + } ++ ++# parsing of {} subscript as subscript rather than block ++{ ++ sub ppp { "qqq" } ++ my $h = { ppp => "pp", qqq => "qq", rrr => 7 }; ++ is ${$h}{ppp}, "pp"; ++ is ${$h}{"rrr"} - 2, 5; ++ my $ar = [$h]; ++ is $ar->[0]->{ppp}, "pp"; ++ is $ar->[0]->{"rrr"} - 2, 5; ++ is $ar->[0]{ppp}, "pp"; ++ is $ar->[0]{"rrr"} - 2, 5; ++ my $hr = {h=>$h}; ++ is $hr->{"h"}->{ppp}, "pp"; ++ is $hr->{"h"}->{"rrr"} - 2, 5; ++ is $hr->{"h"}{ppp}, "pp"; ++ is $hr->{"h"}{"rrr"} - 2, 5; ++ my $cr = sub { $h }; ++ is $cr->()->{ppp}, "pp"; ++ is $cr->()->{"rrr"} - 2, 5; ++ is $cr->(){ppp}, "pp"; ++ is $cr->(){"rrr"} - 2, 5; ++} +-- +2.13.6 + diff --git a/perl-5.26.1-guard_old_libcrypt_fix.patch b/perl-5.26.1-guard_old_libcrypt_fix.patch new file mode 100644 index 0000000..2d34cfe --- /dev/null +++ b/perl-5.26.1-guard_old_libcrypt_fix.patch @@ -0,0 +1,24 @@ +commit 13e70b397dcb0d1bf4a869b670f041c1d7b730d0 +Author: Björn Esser +Date: Sat Jan 20 20:22:53 2018 +0100 + + pp: Guard fix for really old bug in glibc libcrypt + +diff --git a/pp.c b/pp.c +index d50ad7ddbf..6510c7b15c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3650,8 +3650,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch b/perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch new file mode 100644 index 0000000..d6471a8 --- /dev/null +++ b/perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch @@ -0,0 +1,107 @@ +From 7a962424149cc60f3a187d0213a12689dd5e806b Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 14 Aug 2017 11:52:39 +1000 +Subject: [PATCH] (perl #131746) avoid undefined behaviour in Copy() etc +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These functions depend on C library functions which have undefined +behaviour when passed NULL pointers, even when passed a zero 'n' value. + +Some compilers use this information, ie. assume the pointers are +non-NULL when optimizing any following code, so we do need to +prevent such unguarded calls. + +My initial thought was to add conditionals to each macro to skip the +call to the library function when n is zero, but this adds a cost to +every use of these macros, even when the n value is always true. + +So instead I added asserts() which will give us a much more visible +indicator of such broken code and revealed the pp_caller and Glob.xs +issues also patched here. + +Petr Písař: Ported to 5.26.1 from +f14cf3632059d421de83cf901c7e849adc1fcd03. + +Signed-off-by: Petr Písař +--- + ext/File-Glob/Glob.xs | 2 +- + handy.h | 14 +++++++------- + pp_ctl.c | 3 ++- + pp_hot.c | 3 ++- + 4 files changed, 12 insertions(+), 10 deletions(-) + +diff --git a/ext/File-Glob/Glob.xs b/ext/File-Glob/Glob.xs +index e0a3681..9779d54 100644 +--- a/ext/File-Glob/Glob.xs ++++ b/ext/File-Glob/Glob.xs +@@ -121,7 +121,7 @@ iterate(pTHX_ bool(*globber)(pTHX_ AV *entries, const char *pat, STRLEN len, boo + + /* chuck it all out, quick or slow */ + if (gimme == G_ARRAY) { +- if (!on_stack) { ++ if (!on_stack && AvFILLp(entries) + 1) { + EXTEND(SP, AvFILLp(entries)+1); + Copy(AvARRAY(entries), SP+1, AvFILLp(entries)+1, SV *); + SP += AvFILLp(entries)+1; +diff --git a/handy.h b/handy.h +index 80f9cf4..88b5b55 100644 +--- a/handy.h ++++ b/handy.h +@@ -2409,17 +2409,17 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe + #define Safefree(d) safefree(MEM_LOG_FREE((Malloc_t)(d))) + #endif + +-#define Move(s,d,n,t) (MEM_WRAP_CHECK_(n,t) (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) +-#define Copy(s,d,n,t) (MEM_WRAP_CHECK_(n,t) (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) +-#define Zero(d,n,t) (MEM_WRAP_CHECK_(n,t) (void)memzero((char*)(d), (n) * sizeof(t))) ++#define Move(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) ++#define Copy(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) ++#define Zero(d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), (void)memzero((char*)(d), (n) * sizeof(t))) + +-#define MoveD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) +-#define CopyD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) ++#define MoveD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) ++#define CopyD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) + #ifdef HAS_MEMSET +-#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) memzero((char*)(d), (n) * sizeof(t))) ++#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t))) + #else + /* Using bzero(), which returns void. */ +-#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) memzero((char*)(d), (n) * sizeof(t)),d) ++#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t)),d) + #endif + + #define PoisonWith(d,n,t,b) (MEM_WRAP_CHECK_(n,t) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))) +diff --git a/pp_ctl.c b/pp_ctl.c +index 15c193b..f1c57bc 100644 +--- a/pp_ctl.c ++++ b/pp_ctl.c +@@ -1971,7 +1971,8 @@ PP(pp_caller) + + if (AvMAX(PL_dbargs) < AvFILLp(ary) + off) + av_extend(PL_dbargs, AvFILLp(ary) + off); +- Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*); ++ if (AvFILLp(ary) + 1 + off) ++ Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*); + AvFILLp(PL_dbargs) = AvFILLp(ary) + off; + } + mPUSHi(CopHINTS_get(cx->blk_oldcop)); +diff --git a/pp_hot.c b/pp_hot.c +index 5899413..66b79ea 100644 +--- a/pp_hot.c ++++ b/pp_hot.c +@@ -4138,7 +4138,8 @@ PP(pp_entersub) + AvARRAY(av) = ary; + } + +- Copy(MARK+1,AvARRAY(av),items,SV*); ++ if (items) ++ Copy(MARK+1,AvARRAY(av),items,SV*); + AvFILLp(av) = items - 1; + } + if (UNLIKELY((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO && +-- +2.13.6 + diff --git a/perl-5.26.1-perl-131895-fail-stat-on-names-with-0-embedded.patch b/perl-5.26.1-perl-131895-fail-stat-on-names-with-0-embedded.patch new file mode 100644 index 0000000..d9aba47 --- /dev/null +++ b/perl-5.26.1-perl-131895-fail-stat-on-names-with-0-embedded.patch @@ -0,0 +1,223 @@ +From 4ac7295514f35016a79dbcc07500f6c9ca4729b7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 2 Nov 2017 20:18:56 +0000 +Subject: [PATCH] (perl #131895) fail stat on names with \0 embedded +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Also lstat() and the file test ops. + +Petr Písař: Port to 5.26.1. + +Signed-off-by: Petr Písař +--- + doio.c | 21 ++++++++++++++++----- + pp_sys.c | 29 +++++++++++++++++++++++------ + t/lib/warnings/pp_sys | 14 ++++++++++++++ + t/op/filetest.t | 10 +++++++++- + t/op/stat.t | 12 +++++++++++- + 5 files changed, 73 insertions(+), 13 deletions(-) + +diff --git a/doio.c b/doio.c +index becb19b..70d7747 100644 +--- a/doio.c ++++ b/doio.c +@@ -1466,7 +1466,7 @@ Perl_my_stat_flags(pTHX_ const U32 flags) + return PL_laststatval; + else { + SV* const sv = TOPs; +- const char *s; ++ const char *s, *d; + STRLEN len; + if ((gv = MAYBE_DEREF_GV_flags(sv,flags))) { + goto do_fstat; +@@ -1480,9 +1480,14 @@ Perl_my_stat_flags(pTHX_ const U32 flags) + s = SvPV_flags_const(sv, len, flags); + PL_statgv = NULL; + sv_setpvn(PL_statname, s, len); +- s = SvPVX_const(PL_statname); /* s now NUL-terminated */ ++ d = SvPVX_const(PL_statname); /* s now NUL-terminated */ + PL_laststype = OP_STAT; +- PL_laststatval = PerlLIO_stat(s, &PL_statcache); ++ if (!IS_SAFE_PATHNAME(s, len, OP_NAME(PL_op))) { ++ PL_laststatval = -1; ++ } ++ else { ++ PL_laststatval = PerlLIO_stat(d, &PL_statcache); ++ } + if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && should_warn_nl(s)) { + GCC_DIAG_IGNORE(-Wformat-nonliteral); /* PL_warn_nl is constant */ + Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat"); +@@ -1499,6 +1504,7 @@ Perl_my_lstat_flags(pTHX_ const U32 flags) + static const char* const no_prev_lstat = "The stat preceding -l _ wasn't an lstat"; + dSP; + const char *file; ++ STRLEN len; + SV* const sv = TOPs; + bool isio = FALSE; + if (PL_op->op_flags & OPf_REF) { +@@ -1542,9 +1548,14 @@ Perl_my_lstat_flags(pTHX_ const U32 flags) + HEKfARG(GvENAME_HEK((const GV *) + (SvROK(sv) ? SvRV(sv) : sv)))); + } +- file = SvPV_flags_const_nolen(sv, flags); ++ file = SvPV_flags_const(sv, len, flags); + sv_setpv(PL_statname,file); +- PL_laststatval = PerlLIO_lstat(file,&PL_statcache); ++ if (!IS_SAFE_PATHNAME(file, len, OP_NAME(PL_op))) { ++ PL_laststatval = -1; ++ } ++ else { ++ PL_laststatval = PerlLIO_lstat(file,&PL_statcache); ++ } + if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && should_warn_nl(file)) { + GCC_DIAG_IGNORE(-Wformat-nonliteral); /* PL_warn_nl is constant */ + Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "lstat"); +diff --git a/pp_sys.c b/pp_sys.c +index 0b60584..1b81fda 100644 +--- a/pp_sys.c ++++ b/pp_sys.c +@@ -2963,19 +2963,24 @@ PP(pp_stat) + } + else { + const char *file; ++ const char *temp; ++ STRLEN len; + if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) { + io = MUTABLE_IO(SvRV(sv)); + if (PL_op->op_type == OP_LSTAT) + goto do_fstat_warning_check; + goto do_fstat_have_io; + } +- + SvTAINTED_off(PL_statname); /* previous tainting irrelevant */ +- sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv)); ++ temp = SvPV_nomg_const(sv, len); ++ sv_setpv(PL_statname, temp); + PL_statgv = NULL; + PL_laststype = PL_op->op_type; + file = SvPV_nolen_const(PL_statname); +- if (PL_op->op_type == OP_LSTAT) ++ if (!IS_SAFE_PATHNAME(temp, len, OP_NAME(PL_op))) { ++ PL_laststatval = -1; ++ } ++ else if (PL_op->op_type == OP_LSTAT) + PL_laststatval = PerlLIO_lstat(file, &PL_statcache); + else + PL_laststatval = PerlLIO_stat(file, &PL_statcache); +@@ -3211,8 +3216,12 @@ PP(pp_ftrread) + + if (use_access) { + #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS) +- const char *name = SvPV_nolen(*PL_stack_sp); +- if (effective) { ++ STRLEN len; ++ const char *name = SvPV(*PL_stack_sp, len); ++ if (!IS_SAFE_PATHNAME(name, len, OP_NAME(PL_op))) { ++ result = -1; ++ } ++ else if (effective) { + # ifdef PERL_EFF_ACCESS + result = PERL_EFF_ACCESS(name, access_mode); + # else +@@ -3537,10 +3546,18 @@ PP(pp_fttext) + } + else { + const char *file; ++ const char *temp; ++ STRLEN temp_len; + int fd; + + assert(sv); +- sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv)); ++ temp = SvPV_nomg_const(sv, temp_len); ++ sv_setpv(PL_statname, temp); ++ if (!IS_SAFE_PATHNAME(temp, temp_len, OP_NAME(PL_op))) { ++ PL_laststatval = -1; ++ PL_laststype = OP_STAT; ++ FT_RETURNUNDEF; ++ } + really_filename: + file = SvPVX_const(PL_statname); + PL_statgv = NULL; +diff --git a/t/lib/warnings/pp_sys b/t/lib/warnings/pp_sys +index 9c544e0..c599aa3 100644 +--- a/t/lib/warnings/pp_sys ++++ b/t/lib/warnings/pp_sys +@@ -972,3 +972,17 @@ close $fh; + unlink $file; + EXPECT + syswrite() is deprecated on :utf8 handles. This will be a fatal error in Perl 5.30 at - line 5. ++######## ++# NAME stat on name with \0 ++use warnings; ++my @x = stat("./\0-"); ++my @y = lstat("./\0-"); ++-T ".\0-"; ++-x ".\0-"; ++-l ".\0-"; ++EXPECT ++Invalid \0 character in pathname for stat: ./\0- at - line 2. ++Invalid \0 character in pathname for lstat: ./\0- at - line 3. ++Invalid \0 character in pathname for fttext: .\0- at - line 4. ++Invalid \0 character in pathname for fteexec: .\0- at - line 5. ++Invalid \0 character in pathname for ftlink: .\0- at - line 6. +diff --git a/t/op/filetest.t b/t/op/filetest.t +index 8883381..bd1d08c 100644 +--- a/t/op/filetest.t ++++ b/t/op/filetest.t +@@ -9,7 +9,7 @@ BEGIN { + set_up_inc(qw '../lib ../cpan/Perl-OSType/lib'); + } + +-plan(tests => 53 + 27*14); ++plan(tests => 57 + 27*14); + + if ($^O =~ /MSWin32|cygwin|msys/ && !is_miniperl) { + require Win32; # for IsAdminUser() +@@ -393,3 +393,11 @@ SKIP: { + is $failed_stat2, $failed_stat1, + 'failed -r($gv_with_io_but_no_fp) with and w/out fatal warnings'; + } ++ ++{ ++ # [perl #131895] stat() doesn't fail on filenames containing \0 / NUL ++ ok(!-T "TEST\0-", '-T on name with \0'); ++ ok(!-B "TEST\0-", '-B on name with \0'); ++ ok(!-f "TEST\0-", '-f on name with \0'); ++ ok(!-r "TEST\0-", '-r on name with \0'); ++} +diff --git a/t/op/stat.t b/t/op/stat.t +index 323c498..dbbe6ec 100644 +--- a/t/op/stat.t ++++ b/t/op/stat.t +@@ -25,7 +25,7 @@ if ($^O eq 'MSWin32') { + ${^WIN32_SLOPPY_STAT} = 0; + } + +-plan tests => 118; ++plan tests => 120; + + my $Perl = which_perl(); + +@@ -653,6 +653,16 @@ SKIP: + 'stat on an array of valid paths should return ENOENT'; + } + ++# [perl #131895] stat() doesn't fail on filenames containing \0 / NUL ++ok !stat("TEST\0-"), 'stat on filename with \0'; ++SKIP: { ++ my $link = "TEST.symlink.$$"; ++ my $can_symlink = eval { symlink "TEST", $link }; ++ skip "cannot symlink", 1 unless $can_symlink; ++ ok !lstat("$link\0-"), 'lstat on filename with \0'; ++ unlink $link; ++} ++ + END { + chmod 0666, $tmpfile; + unlink_all $tmpfile; +-- +2.13.6 + diff --git a/perl-5.26.1-perl-132245-don-t-try-to-process-a-char-range-with-n.patch b/perl-5.26.1-perl-132245-don-t-try-to-process-a-char-range-with-n.patch new file mode 100644 index 0000000..2bde428 --- /dev/null +++ b/perl-5.26.1-perl-132245-don-t-try-to-process-a-char-range-with-n.patch @@ -0,0 +1,54 @@ +From dc5c68130b7c8b727e9e792506183c255fc2bc70 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 19 Oct 2017 10:46:04 +1100 +Subject: [PATCH] (perl #132245) don't try to process a char range with no + preceding char +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A range like \N{}-0 eventually results in compilation failing, but +before that, get_and_check_backslash_N_name() attempts to treat +the memory before the empty output of \N{} as a character. + +Petr Písař: Ported to 5.26.1. + +Signed-off-by: Petr Písař +--- + t/lib/warnings/toke | 5 +++++ + toke.c | 6 +++--- + 2 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/t/lib/warnings/toke b/t/lib/warnings/toke +index fc51d9f..398ee22 100644 +--- a/t/lib/warnings/toke ++++ b/t/lib/warnings/toke +@@ -1651,3 +1651,8 @@ Execution of - aborted due to compilation errors. + use utf8; + qw∘foo ∞ ♥ bar∘ + EXPECT ++######## ++# NAME tr/// range with empty \N{} at the start ++tr//\N{}-0/; ++EXPECT ++Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28 at - line 1. +diff --git a/toke.c b/toke.c +index 6f84d2d..6ee7a68 100644 +--- a/toke.c ++++ b/toke.c +@@ -2958,9 +2958,9 @@ S_scan_const(pTHX_ char *start) + + /* Here, we don't think we're in a range. If the new character + * is not a hyphen; or if it is a hyphen, but it's too close to +- * either edge to indicate a range, then it's a regular +- * character. */ +- if (*s != '-' || s >= send - 1 || s == start) { ++ * either edge to indicate a range, or if we haven't output any ++ * characters yet then it's a regular character. */ ++ if (*s != '-' || s >= send - 1 || s == start || d == SvPVX(sv)) { + + /* A regular character. Process like any other, but first + * clear any flags */ +-- +2.13.6 + diff --git a/perl-5.26.1-set-when-statting-a-closed-filehandle.patch b/perl-5.26.1-set-when-statting-a-closed-filehandle.patch new file mode 100644 index 0000000..832aee8 --- /dev/null +++ b/perl-5.26.1-set-when-statting-a-closed-filehandle.patch @@ -0,0 +1,211 @@ +From 8c7182b26a43f14cd8afbfbe4448cbbd691c3609 Mon Sep 17 00:00:00 2001 +From: Zefram +Date: Wed, 15 Nov 2017 08:11:37 +0000 +Subject: [PATCH] set $! when statting a closed filehandle +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When a stat fails because it's on a closed or otherwise invalid +filehandle, $! was often not being set, depending on the operation +and the nature of the invalidity. Consistently set it to EBADF. +Fixes [perl #108288]. + +Petr Písař: Ported to 5.26.1. + +Signed-off-by: Petr Písař +--- + MANIFEST | 1 + + doio.c | 10 +++++++++- + pp_sys.c | 22 ++++++++++++--------- + t/op/stat_errors.t | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 80 insertions(+), 10 deletions(-) + create mode 100644 t/op/stat_errors.t + +diff --git a/MANIFEST b/MANIFEST +index fcbf5cc..996759e 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -5670,6 +5670,7 @@ t/op/srand.t See if srand works + t/op/sselect.t See if 4 argument select works + t/op/stash.t See if %:: stashes work + t/op/stat.t See if stat works ++t/op/stat_errors.t See if stat and file tests handle threshold errors + t/op/state.t See if state variables work + t/op/study.t See if study works + t/op/studytied.t See if study works with tied scalars +diff --git a/doio.c b/doio.c +index 70d7747..71dc6e4 100644 +--- a/doio.c ++++ b/doio.c +@@ -1437,8 +1437,11 @@ Perl_my_stat_flags(pTHX_ const U32 flags) + if (PL_op->op_flags & OPf_REF) { + gv = cGVOP_gv; + do_fstat: +- if (gv == PL_defgv) ++ if (gv == PL_defgv) { ++ if (PL_laststatval < 0) ++ SETERRNO(EBADF,RMS_IFI); + return PL_laststatval; ++ } + io = GvIO(gv); + do_fstat_have_io: + PL_laststype = OP_STAT; +@@ -1449,6 +1452,7 @@ Perl_my_stat_flags(pTHX_ const U32 flags) + int fd = PerlIO_fileno(IoIFP(io)); + if (fd < 0) { + /* E.g. PerlIO::scalar has no real fd. */ ++ SETERRNO(EBADF,RMS_IFI); + return (PL_laststatval = -1); + } else { + return (PL_laststatval = PerlLIO_fstat(fd, &PL_statcache)); +@@ -1459,6 +1463,7 @@ Perl_my_stat_flags(pTHX_ const U32 flags) + } + PL_laststatval = -1; + report_evil_fh(gv); ++ SETERRNO(EBADF,RMS_IFI); + return -1; + } + else if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t)) +@@ -1511,6 +1516,8 @@ Perl_my_lstat_flags(pTHX_ const U32 flags) + if (cGVOP_gv == PL_defgv) { + if (PL_laststype != OP_LSTAT) + Perl_croak(aTHX_ "%s", no_prev_lstat); ++ if (PL_laststatval < 0) ++ SETERRNO(EBADF,RMS_IFI); + return PL_laststatval; + } + PL_laststatval = -1; +@@ -1520,6 +1527,7 @@ Perl_my_lstat_flags(pTHX_ const U32 flags) + "Use of -l on filehandle %" HEKf, + HEKfARG(GvENAME_HEK(cGVOP_gv))); + } ++ SETERRNO(EBADF,RMS_IFI); + return -1; + } + if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t)) +diff --git a/pp_sys.c b/pp_sys.c +index fefbea3..87961f1 100644 +--- a/pp_sys.c ++++ b/pp_sys.c +@@ -2925,10 +2925,11 @@ PP(pp_stat) + Perl_croak(aTHX_ "The stat preceding lstat() wasn't an lstat"); + } + +- if (gv != PL_defgv) { +- bool havefp; ++ if (gv == PL_defgv) { ++ if (PL_laststatval < 0) ++ SETERRNO(EBADF,RMS_IFI); ++ } else { + do_fstat_have_io: +- havefp = FALSE; + PL_laststype = OP_STAT; + PL_statgv = gv ? gv : (GV *)io; + SvPVCLEAR(PL_statname); +@@ -2939,22 +2940,25 @@ PP(pp_stat) + if (IoIFP(io)) { + int fd = PerlIO_fileno(IoIFP(io)); + if (fd < 0) { ++ report_evil_fh(gv); + PL_laststatval = -1; + SETERRNO(EBADF,RMS_IFI); + } else { + PL_laststatval = PerlLIO_fstat(fd, &PL_statcache); +- havefp = TRUE; + } + } else if (IoDIRP(io)) { + PL_laststatval = + PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache); +- havefp = TRUE; + } else { ++ report_evil_fh(gv); + PL_laststatval = -1; ++ SETERRNO(EBADF,RMS_IFI); + } +- } +- else PL_laststatval = -1; +- if (PL_laststatval < 0 && !havefp) report_evil_fh(gv); ++ } else { ++ report_evil_fh(gv); ++ PL_laststatval = -1; ++ SETERRNO(EBADF,RMS_IFI); ++ } + } + + if (PL_laststatval < 0) { +@@ -3451,7 +3455,7 @@ PP(pp_fttty) + else if (name && isDIGIT(*name) && grok_atoUV(name, &uv, NULL) && uv <= PERL_INT_MAX) + fd = (int)uv; + else +- FT_RETURNUNDEF; ++ fd = -1; + if (fd < 0) { + SETERRNO(EBADF,RMS_IFI); + FT_RETURNUNDEF; +diff --git a/t/op/stat_errors.t b/t/op/stat_errors.t +new file mode 100644 +index 0000000..e043c61 +--- /dev/null ++++ b/t/op/stat_errors.t +@@ -0,0 +1,57 @@ ++#!./perl ++ ++BEGIN { ++ chdir 't' if -d 't'; ++ require './test.pl'; ++ set_up_inc('../lib'); ++} ++ ++plan(tests => 2*11*29); ++ ++use Errno qw(EBADF ENOENT); ++ ++open(SCALARFILE, "<", \"wibble") or die $!; ++open(CLOSEDFILE, "<", "./test.pl") or die $!; ++close(CLOSEDFILE) or die $!; ++opendir(CLOSEDDIR, "../lib") or die $!; ++closedir(CLOSEDDIR) or die $!; ++ ++foreach my $op ( ++ qw(stat lstat), ++ (map { "-$_" } qw(r w x o R W X O e z s f d l p S b c t u g k T B M A C)), ++) { ++ foreach my $arg ( ++ (map { ($_, "\\*$_") } ++ qw(NEVEROPENED SCALARFILE CLOSEDFILE CLOSEDDIR _)), ++ "\"tmpnotexist\"", ++ ) { ++ my $argdesc = $arg; ++ if ($arg eq "_") { ++ my @z = lstat "tmpnotexist"; ++ $argdesc .= " with prior stat fail"; ++ } ++ SKIP: { ++ if ($op eq "-l" && $arg =~ /\A\\/) { ++ # The op weirdly stringifies the globref and uses it as ++ # a filename, rather than treating it as a file handle. ++ # That might be a bug, but while that behaviour exists it ++ # needs to be exempted from these tests. ++ skip "-l on globref", 2; ++ } ++ if ($op eq "-t" && $arg eq "\"tmpnotexist\"") { ++ # The op doesn't operate on filenames. ++ skip "-t on filename", 2; ++ } ++ $! = 0; ++ my $res = eval "$op $arg"; ++ my $err = $!; ++ is $res, $op =~ /\A-/ ? undef : !!0, "result of $op $arg"; ++ is 0+$err, ++ $arg eq "\"tmpnotexist\"" || ++ ($op =~ /\A-[TB]\z/ && $arg =~ /_\z/) ? ENOENT : EBADF, ++ "error from $op $arg"; ++ } ++ } ++} ++ ++1; +-- +2.13.6 + diff --git a/perl-5.26.2-PATCH-perl-133185-Infinite-loop-in-qr.patch b/perl-5.26.2-PATCH-perl-133185-Infinite-loop-in-qr.patch new file mode 100644 index 0000000..427553e --- /dev/null +++ b/perl-5.26.2-PATCH-perl-133185-Infinite-loop-in-qr.patch @@ -0,0 +1,105 @@ +From dc1f8f6b581a8e4efbb782398ab3e7c3a52b062f Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Tue, 8 May 2018 12:13:18 -0600 +Subject: [PATCH] PATCH: [perl #133185] Infinite loop in qr// +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This loop was inadvertently introduced as part of patches to fix +(perl #132227 CVE-2018-6797] heap-buffer-overflow". The commit in 5.27 +responsible was f8fb8615ddc5a80e3bbd4386a8914497f921b62d. + +To be vulnerable, the pattern must start out as /d (hence no use 5.012 +or higher), and then there must be something that implicitly forces /u +(which the \pp does in the test case added by this patch), and then +(?aa), and then the code point \xDF. (German Sharp S). The /i must be +in effect by the time the DF is encountered, but it needn't come in the +(?aa) which the test does. + +The problem is that the conditional that is testing that we switched +away from /d rules is assuming that this happened during the +construction of the current EXACTFish node. The comments I wrote +indicate this assumption. But this example shows that the switch can +come before this node started getting constructed, and so it loops. + +The patch explicitly saves the state at the beginning of this node's +construction, and only retries if it changed during that construction. +Therefore the next time through, it will see that it hasn't changed +since the previous time, and won't loop. + +Petr Písař: Ported to 5.26.2 from: + +commit 0b9cb33b146b3eb55634853f883a880771dd1413 +Author: Karl Williamson +Date: Tue May 8 12:13:18 2018 -0600 + + PATCH: [perl #133185] Infinite loop in qr// + +Signed-off-by: Petr Písař +--- + regcomp.c | 10 +++++++++- + t/re/speed.t | 5 ++++- + 2 files changed, 13 insertions(+), 2 deletions(-) + +diff --git a/regcomp.c b/regcomp.c +index 845e660..18fa465 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -13100,6 +13100,10 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth) + bool maybe_exactfu = PASS2 + && (node_type == EXACTF || node_type == EXACTFL); + ++ /* To see if RExC_uni_semantics changes during parsing of the node. ++ * */ ++ bool uni_semantics_at_node_start; ++ + /* If a folding node contains only code points that don't + * participate in folds, it can be changed into an EXACT node, + * which allows the optimizer more things to look for */ +@@ -13147,6 +13151,8 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth) + || UTF8_IS_INVARIANT(UCHARAT(RExC_parse)) + || UTF8_IS_START(UCHARAT(RExC_parse))); + ++ uni_semantics_at_node_start = RExC_uni_semantics; ++ + /* Here, we have a literal character. Find the maximal string of + * them in the input that we can fit into a single EXACTish node. + * We quit at the first non-literal or when the node gets full */ +@@ -13550,7 +13556,9 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth) + * didn't think it needed to reparse. But this + * sharp s now does indicate the need for + * reparsing. */ +- if (RExC_uni_semantics) { ++ if ( uni_semantics_at_node_start ++ != RExC_uni_semantics) ++ { + p = oldp; + goto loopdone; + } +diff --git a/t/re/speed.t b/t/re/speed.t +index 4a4830f..9a57de1 100644 +--- a/t/re/speed.t ++++ b/t/re/speed.t +@@ -24,7 +24,7 @@ BEGIN { + skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader; + skip_all_without_unicode_tables(); + +-plan tests => 58; #** update watchdog timeouts proportionally when adding tests ++plan tests => 59; #** update watchdog timeouts proportionally when adding tests + + use strict; + use warnings; +@@ -156,6 +156,9 @@ PROG + ok( $elapsed <= 1, "should not COW on long string with substr and m//g"); + } + ++ # [perl #133185] Infinite loop ++ like("!\xdf", eval 'qr/\pp(?aai)\xdf/', ++ 'Compiling qr/\pp(?aai)\xdf/ doesn\'t loop'); + + } # End of sub run_tests + +-- +2.14.3 + diff --git a/perl-5.26.2-Pass-CFLAGS-to-dtrace.patch b/perl-5.26.2-Pass-CFLAGS-to-dtrace.patch new file mode 100644 index 0000000..0de6136 --- /dev/null +++ b/perl-5.26.2-Pass-CFLAGS-to-dtrace.patch @@ -0,0 +1,63 @@ +Subject: [PATCH] Pass CFLAGS to dtrace + +Signed-off-by: Petr PĂ­sař +--- + Makefile.SH | 8 +++++--- + cflags.SH | 5 ++++- + 2 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/Makefile.SH b/Makefile.SH +index 5fc6d1c..e89ad70 100755 +--- a/Makefile.SH ++++ b/Makefile.SH +@@ -457,6 +457,8 @@ CCCMD = sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $@ + + CCCMDSRC = sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $< + ++DTRACEFLAGS = sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $@ ++ + CONFIGPM_FROM_CONFIG_SH = lib/Config.pm lib/Config_heavy.pl + CONFIGPM = $(CONFIGPM_FROM_CONFIG_SH) lib/Config_git.pl + +@@ -890,19 +892,19 @@ $(DTRACE_MINI_O): perldtrace.d $(miniperl_objs_nodt) + -rm -rf mpdtrace + mkdir mpdtrace + cp $(miniperl_objs_nodt) mpdtrace/ +- $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_dtrace_objs) ++ CFLAGS="`$(DTRACEFLAGS)`" $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_dtrace_objs) + + $(DTRACE_PERLLIB_O): perldtrace.d $(perllib_objs_nodt) + -rm -rf libpdtrace + mkdir libpdtrace + cp $(perllib_objs_nodt) libpdtrace/ +- $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_dtrace_objs) ++ CFLAGS="`$(DTRACEFLAGS)`" $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_dtrace_objs) + + $(DTRACE_MAIN_O): perldtrace.d perlmain$(OBJ_EXT) + -rm -rf maindtrace + mkdir maindtrace + cp perlmain$(OBJ_EXT) maindtrace/ +- $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) $(perlmain_dtrace_objs) || \ ++ CFLAGS="`$(DTRACEFLAGS)`" $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) $(perlmain_dtrace_objs) || \ + ( $(ECHO) "No probes in perlmain$(OBJ_EXT), generating a dummy $(DTRACE_MAIN_O)" && \ + $(ECHO) >dtrace_main.c && \ + `$(CCCMD)` $(PLDLFLAGS) dtrace_main.c && \ +diff --git a/cflags.SH b/cflags.SH +index 3af1e97..b845127 100755 +--- a/cflags.SH ++++ b/cflags.SH +@@ -516,7 +516,10 @@ for file do + esac + + # Can we perhaps use $ansi2knr here +- echo "$cc -c -DPERL_CORE $ccflags $stdflags $optimize $warn $extra" ++ case "$file" in ++ dtrace_*) echo "$ccflags $stdflags $optimize $warn $extra";; ++ *) echo "$cc -c -DPERL_CORE $ccflags $stdflags $optimize $warn $extra";; ++ esac + + . $TOP/config.sh + +-- +2.17.1 + diff --git a/perl-5.26.2-RC1-Parse-caret-vars-with-subscripts-the-same-as-normal-.patch b/perl-5.26.2-RC1-Parse-caret-vars-with-subscripts-the-same-as-normal-.patch new file mode 100644 index 0000000..a7caf64 --- /dev/null +++ b/perl-5.26.2-RC1-Parse-caret-vars-with-subscripts-the-same-as-normal-.patch @@ -0,0 +1,143 @@ +From 07ebe9c4fb1028d17e61caabe8c15abd0cd48983 Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Thu, 29 Jun 2017 11:31:14 +0200 +Subject: [PATCH] Parse caret vars with subscripts the same as normal vars + inside of ${..} escaping +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This behavior is discussed in perl #131664, which complains that +"${^CAPTURE}[0]" does not work as expected. Abigail explains the +behavior is by design and Eirik Berg Hanssen expands on that explanation +pointing out that what /should/ work, "${^CAPTURE[0]}" does not, +which Sawyer then ruled was a bug. + +So this patch makes "${^CAPTURE[0]}" (and "${^CAPTURE [0]}" [hi +abigial]) work the same as they would if the var was called @foo. + +Petr Písař: Ported to 5.26.2-RC1. + +Signed-off-by: Petr Písař +--- + t/base/lex.t | 28 +++++++++++++++++++++++++++- + toke.c | 46 +++++++++++++++++++++++++--------------------- + 2 files changed, 52 insertions(+), 22 deletions(-) + +diff --git a/t/base/lex.t b/t/base/lex.t +index 99fd3bb..ae17bbd 100644 +--- a/t/base/lex.t ++++ b/t/base/lex.t +@@ -1,6 +1,6 @@ + #!./perl + +-print "1..112\n"; ++print "1..119\n"; + + $x = 'x'; + +@@ -154,6 +154,32 @@ my $test = 31; + print "not " unless index ($@, 'Can\'t use global $^XYZ in "my"') > -1; + print "ok $test\n"; $test++; + # print "($@)\n" if $@; ++# ++ ${^TEST}= "splat"; ++ @{^TEST}= ("foo", "bar"); ++ %{^TEST}= ("foo" => "FOO", "bar" => "BAR" ); ++ ++ print "not " if "${^TEST}" ne "splat"; ++ print "ok $test\n"; $test++; ++ ++ print "not " if "${^TEST}[0]" ne "splat[0]"; ++ print "ok $test\n"; $test++; ++ ++ print "not " if "${^TEST[0]}" ne "foo"; ++ print "ok $test\n"; $test++; ++ ++ print "not " if "${ ^TEST [1] }" ne "bar"; ++ print "ok $test\n"; $test++; ++ ++ print "not " if "${^TEST}{foo}" ne "splat{foo}"; ++ print "ok $test\n"; $test++; ++ ++ print "not " if "${^TEST{foo}}" ne "FOO"; ++ print "ok $test\n"; $test++; ++ ++ print "not " if "${ ^TEST {bar} }" ne "BAR"; ++ print "ok $test\n"; $test++; ++ + + # Now let's make sure that caret variables are all forced into the main package. + package Someother; +diff --git a/toke.c b/toke.c +index ee9c464..aff785b 100644 +--- a/toke.c ++++ b/toke.c +@@ -9416,19 +9416,36 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni) + bool skip; + char *s2; + /* If we were processing {...} notation then... */ +- if (isIDFIRST_lazy_if_safe(d, e, is_utf8)) { +- /* if it starts as a valid identifier, assume that it is one. +- (the later check for } being at the expected point will trap +- cases where this doesn't pan out.) */ +- d += is_utf8 ? UTF8SKIP(d) : 1; +- parse_ident(&s, &d, e, 1, is_utf8, TRUE); +- *d = '\0'; ++ if (isIDFIRST_lazy_if_safe(d, e, is_utf8) ++ || (!isPRINT(*d) /* isCNTRL(d), plus all non-ASCII */ ++ && isWORDCHAR(*s)) ++ ) { ++ /* note we have to check for a normal identifier first, ++ * as it handles utf8 symbols, and only after that has ++ * been ruled out can we look at the caret words */ ++ if (isIDFIRST_lazy_if_safe(d, e, is_utf8) ) { ++ /* if it starts as a valid identifier, assume that it is one. ++ (the later check for } being at the expected point will trap ++ cases where this doesn't pan out.) */ ++ d += is_utf8 ? UTF8SKIP(d) : 1; ++ parse_ident(&s, &d, e, 1, is_utf8, TRUE); ++ *d = '\0'; ++ } ++ else { /* caret word: ${^Foo} ${^CAPTURE[0]} */ ++ d++; ++ while (isWORDCHAR(*s) && d < e) { ++ *d++ = *s++; ++ } ++ if (d >= e) ++ Perl_croak(aTHX_ "%s", ident_too_long); ++ *d = '\0'; ++ } + tmp_copline = CopLINE(PL_curcop); + if (s < PL_bufend && isSPACE(*s)) { + s = skipspace(s); + } + if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) { +- /* ${foo[0]} and ${foo{bar}} notation. */ ++ /* ${foo[0]} and ${foo{bar}} and ${^CAPTURE[0]} notation. */ + if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest, 0)) { + const char * const brack = + (const char *) +@@ -9447,19 +9464,6 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni) + return s; + } + } +- /* Handle extended ${^Foo} variables +- * 1999-02-27 mjd-perl-patch@plover.com */ +- else if (! isPRINT(*d) /* isCNTRL(d), plus all non-ASCII */ +- && isWORDCHAR(*s)) +- { +- d++; +- while (isWORDCHAR(*s) && d < e) { +- *d++ = *s++; +- } +- if (d >= e) +- Perl_croak(aTHX_ "%s", ident_too_long); +- *d = '\0'; +- } + + if ( !tmp_copline ) + tmp_copline = CopLINE(PL_curcop); +-- +2.14.3 + diff --git a/perl-5.26.2-RC1-add-an-additional-test-for-whitespace-tolerance-in-c.patch b/perl-5.26.2-RC1-add-an-additional-test-for-whitespace-tolerance-in-c.patch new file mode 100644 index 0000000..3f7d885 --- /dev/null +++ b/perl-5.26.2-RC1-add-an-additional-test-for-whitespace-tolerance-in-c.patch @@ -0,0 +1,45 @@ +From edea384e57453b0a62de58445eed1fded18c1cca Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Thu, 29 Jun 2017 13:20:49 +0200 +Subject: [PATCH] add an additional test for whitespace tolerance in caret + word-vars +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Petr Písař: Ported to 5.26.2-RC1. + +Signed-off-by: Petr Písař +--- + t/base/lex.t | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/t/base/lex.t b/t/base/lex.t +index ae17bbd..414aa1f 100644 +--- a/t/base/lex.t ++++ b/t/base/lex.t +@@ -1,6 +1,6 @@ + #!./perl + +-print "1..119\n"; ++print "1..120\n"; + + $x = 'x'; + +@@ -158,9 +158,12 @@ my $test = 31; + ${^TEST}= "splat"; + @{^TEST}= ("foo", "bar"); + %{^TEST}= ("foo" => "FOO", "bar" => "BAR" ); +- ++ + print "not " if "${^TEST}" ne "splat"; + print "ok $test\n"; $test++; ++ ++ print "not " if "${ ^TEST }" ne "splat"; ++ print "ok $test\n"; $test++; + + print "not " if "${^TEST}[0]" ne "splat[0]"; + print "ok $test\n"; $test++; +-- +2.14.3 + diff --git a/perl-5.26.2-RC1-perform-system-arg-processing-before-fork.patch b/perl-5.26.2-RC1-perform-system-arg-processing-before-fork.patch new file mode 100644 index 0000000..d331679 --- /dev/null +++ b/perl-5.26.2-RC1-perform-system-arg-processing-before-fork.patch @@ -0,0 +1,90 @@ +From 3e6e57e89f298f450cbe14c61609f08fc01bf233 Mon Sep 17 00:00:00 2001 +From: Zefram +Date: Sat, 16 Dec 2017 05:33:20 +0000 +Subject: [PATCH] perform system() arg processing before fork +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A lot of things can happen when stringifying an argument list: side +effects, warnings, exceptions. In the case of system(), these effects +should happen in the context of the parent process. The stringification +can also depend on which process it happens in, as in the case of +$$, and in that case it should also happen in the parent process. +Therefore reduce the argument scalars to strings first thing in pp_system. +Fixes [perl #121105]. + +Petr Písař: Ported to 5.26.2-RC1 from +64def2aeaeb63f92dadc6dfa33486c1d7b311963. + +Signed-off-by: Petr Písař +--- + pp_sys.c | 16 ++++++++++------ + t/op/exec.t | 15 ++++++++++++++- + 2 files changed, 24 insertions(+), 7 deletions(-) + +diff --git a/pp_sys.c b/pp_sys.c +index 87961f1..07e552a 100644 +--- a/pp_sys.c ++++ b/pp_sys.c +@@ -4375,14 +4375,18 @@ PP(pp_system) + int result; + # endif + ++ while (++MARK <= SP) { ++ SV *origsv = *MARK; ++ STRLEN len; ++ char *pv; ++ pv = SvPV(origsv, len); ++ *MARK = newSVpvn_flags(pv, len, ++ (SvFLAGS(origsv) & SVf_UTF8) | SVs_TEMP); ++ } ++ MARK = ORIGMARK; ++ + if (TAINTING_get) { + TAINT_ENV(); +- while (++MARK <= SP) { +- (void)SvPV_nolen_const(*MARK); /* stringify for taint check */ +- if (TAINT_get) +- break; +- } +- MARK = ORIGMARK; + TAINT_PROPER("system"); + } + PERL_FLUSHALL_FOR_CHILD; +diff --git a/t/op/exec.t b/t/op/exec.t +index 237388b..e29de82 100644 +--- a/t/op/exec.t ++++ b/t/op/exec.t +@@ -36,7 +36,7 @@ $ENV{LANGUAGE} = 'C'; # Ditto in GNU. + my $Is_VMS = $^O eq 'VMS'; + my $Is_Win32 = $^O eq 'MSWin32'; + +-plan(tests => 34); ++plan(tests => 37); + + my $Perl = which_perl(); + +@@ -177,6 +177,19 @@ TODO: { + "exec failure doesn't terminate process"); + } + ++package CountRead { ++ sub TIESCALAR { bless({ n => 0 }, $_[0]) } ++ sub FETCH { ++$_[0]->{n} } ++} ++my $cr; ++tie $cr, "CountRead"; ++is system($^X, "-e", "exit(\$ARGV[0] eq '1' ? 0 : 1)", $cr), 0, ++ "system args have magic processed exactly once"; ++is tied($cr)->{n}, 1, "system args have magic processed before fork"; ++ ++is system($^X, "-e", "exit(\$ARGV[0] eq \$ARGV[1] ? 0 : 1)", "$$", $$), 0, ++ "system args have magic processed before fork"; ++ + my $test = curr_test(); + exec $Perl, '-le', qq{${quote}print 'ok $test - exec PROG, LIST'${quote}}; + fail("This should never be reached if the exec() worked"); +-- +2.14.3 + diff --git a/perl-5.26.2-perl.h-Add-parens-around-macro-arguments.patch b/perl-5.26.2-perl.h-Add-parens-around-macro-arguments.patch new file mode 100644 index 0000000..06d7be8 --- /dev/null +++ b/perl-5.26.2-perl.h-Add-parens-around-macro-arguments.patch @@ -0,0 +1,35 @@ +From 7714b11d11da2bfd0dc11638e9dd6836b6a32e90 Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Mon, 11 Jun 2018 13:26:24 -0600 +Subject: [PATCH] perl.h: Add parens around macro arguments +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Arguments used within macros need to be parenthesized in case they are +called with an expression. This commit changes +_CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG() to do that. + +Petr Písař: Ported to 5.26.2 from upstream ff58ca57f844 commit. + +Signed-off-by: Petr Písař +--- + perl.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/perl.h b/perl.h +index 1c613bc..d278c2a 100644 +--- a/perl.h ++++ b/perl.h +@@ -5980,7 +5980,7 @@ typedef struct am_table_short AMTS; + # define _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(s, send) \ + STMT_START { /* Check if to warn before doing the conversion work */\ + if (! PL_in_utf8_CTYPE_locale && ckWARN(WARN_LOCALE)) { \ +- UV cp = utf8_to_uvchr_buf((U8 *) s, (U8 *) send, NULL); \ ++ UV cp = utf8_to_uvchr_buf((U8 *) (s), (U8 *) (send), NULL); \ + Perl_warner(aTHX_ packWARN(WARN_LOCALE), \ + "Wide character (U+%" UVXf ") in %s", \ + (cp == 0) \ +-- +2.14.4 + diff --git a/perl-5.26.3-CVE-2020-10543.patch b/perl-5.26.3-CVE-2020-10543.patch new file mode 100644 index 0000000..fb19a3e --- /dev/null +++ b/perl-5.26.3-CVE-2020-10543.patch @@ -0,0 +1,34 @@ +From 208dea486fa24081cbc0cf05fa5a15c802e2bc68 Mon Sep 17 00:00:00 2001 +From: John Lightsey +Date: Wed, 20 Nov 2019 20:02:45 -0600 +Subject: [PATCH v528 1/3] regcomp.c: Prevent integer overflow from nested + regex quantifiers. + +(CVE-2020-10543) On 32bit systems the size calculations for nested regular +expression quantifiers could overflow causing heap memory corruption. + +Fixes: Perl/perl5-security#125 +--- + regcomp.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/regcomp.c b/regcomp.c +index e1da15a77c..dd18add1db 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -5102,6 +5139,12 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + (void)ReREFCNT_inc(RExC_rx_sv); + } + ++ if ( ( minnext > 0 && mincount >= SSize_t_MAX / minnext ) ++ || min >= SSize_t_MAX - minnext * mincount ) ++ { ++ FAIL("Regexp out of space"); ++ } ++ + min += minnext * mincount; + is_inf_internal |= deltanext == SSize_t_MAX + || (maxcount == REG_INFTY && minnext + deltanext > 0); +-- +2.20.1 + diff --git a/perl-5.26.3-CVE-2020-10878.patch b/perl-5.26.3-CVE-2020-10878.patch new file mode 100644 index 0000000..4aa97a3 --- /dev/null +++ b/perl-5.26.3-CVE-2020-10878.patch @@ -0,0 +1,148 @@ +From a3a7598c8ec6efb0eb9c0b786d80c4d2a3751b70 Mon Sep 17 00:00:00 2001 +From: Hugo van der Sanden +Date: Tue, 18 Feb 2020 13:51:16 +0000 +Subject: [PATCH v528 2/3] study_chunk: extract rck_elide_nothing + +(CVE-2020-10878) +--- + embed.fnc | 1 + + embed.h | 1 + + proto.h | 3 +++ + regcomp.c | 70 ++++++++++++++++++++++++++++++++++--------------------- + 4 files changed, 48 insertions(+), 27 deletions(-) + +diff --git a/embed.fnc b/embed.fnc +index e762fe1eec..cf89277163 100644 +--- a/embed.fnc ++++ b/embed.fnc +@@ -2398,6 +2398,7 @@ Es |SSize_t|study_chunk |NN RExC_state_t *pRExC_state \ + |I32 stopparen|U32 recursed_depth \ + |NULLOK regnode_ssc *and_withp \ + |U32 flags|U32 depth|bool was_mutate_ok ++Es |void |rck_elide_nothing|NN regnode *node + EsRn |U32 |add_data |NN RExC_state_t* const pRExC_state \ + |NN const char* const s|const U32 n + rs |void |re_croak2 |bool utf8|NN const char* pat1|NN const char* pat2|... +diff --git a/embed.h b/embed.h +index a5416a1148..886551ce5c 100644 +--- a/embed.h ++++ b/embed.h +@@ -1046,6 +1046,7 @@ + #define output_or_return_posix_warnings(a,b,c) S_output_or_return_posix_warnings(aTHX_ a,b,c) + #define parse_lparen_question_flags(a) S_parse_lparen_question_flags(aTHX_ a) + #define populate_ANYOF_from_invlist(a,b) S_populate_ANYOF_from_invlist(aTHX_ a,b) ++#define rck_elide_nothing(a) S_rck_elide_nothing(aTHX_ a) + #define reg(a,b,c,d) S_reg(aTHX_ a,b,c,d) + #define reg2Lanode(a,b,c,d) S_reg2Lanode(aTHX_ a,b,c,d) + #define reg_node(a,b) S_reg_node(aTHX_ a,b) +diff --git a/proto.h b/proto.h +index 66bb29b132..d3f8802c1d 100644 +--- a/proto.h ++++ b/proto.h +@@ -5150,6 +5150,9 @@ STATIC void S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state); + STATIC void S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr); + #define PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST \ + assert(node); assert(invlist_ptr) ++STATIC void S_rck_elide_nothing(pTHX_ regnode *node); ++#define PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING \ ++ assert(node) + PERL_STATIC_NO_RET void S_re_croak2(pTHX_ bool utf8, const char* pat1, const char* pat2, ...) + __attribute__noreturn__; + #define PERL_ARGS_ASSERT_RE_CROAK2 \ +diff --git a/regcomp.c b/regcomp.c +index dd18add1db..0a9c6a8085 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -4094,6 +4094,43 @@ S_unwind_scan_frames(pTHX_ const void *p) + } while (f); + } + ++/* Follow the next-chain of the current node and optimize away ++ all the NOTHINGs from it. ++ */ ++STATIC void ++S_rck_elide_nothing(pTHX_ regnode *node) ++{ ++ dVAR; ++ ++ PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING; ++ ++ if (OP(node) != CURLYX) { ++ const int max = (reg_off_by_arg[OP(node)] ++ ? I32_MAX ++ /* I32 may be smaller than U16 on CRAYs! */ ++ : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX)); ++ int off = (reg_off_by_arg[OP(node)] ? ARG(node) : NEXT_OFF(node)); ++ int noff; ++ regnode *n = node; ++ ++ /* Skip NOTHING and LONGJMP. */ ++ while ( ++ (n = regnext(n)) ++ && ( ++ (PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n))) ++ || ((OP(n) == LONGJMP) && (noff = ARG(n))) ++ ) ++ && off + noff < max ++ ) { ++ off += noff; ++ } ++ if (reg_off_by_arg[OP(node)]) ++ ARG(node) = off; ++ else ++ NEXT_OFF(node) = off; ++ } ++ return; ++} + + STATIC SSize_t + S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, +@@ -4197,28 +4234,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + if (mutate_ok) + JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0); + +- /* Follow the next-chain of the current node and optimize +- away all the NOTHINGs from it. */ +- if (OP(scan) != CURLYX) { +- const int max = (reg_off_by_arg[OP(scan)] +- ? I32_MAX +- /* I32 may be smaller than U16 on CRAYs! */ +- : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX)); +- int off = (reg_off_by_arg[OP(scan)] ? ARG(scan) : NEXT_OFF(scan)); +- int noff; +- regnode *n = scan; +- +- /* Skip NOTHING and LONGJMP. */ +- while ((n = regnext(n)) +- && ((PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n))) +- || ((OP(n) == LONGJMP) && (noff = ARG(n)))) +- && off + noff < max) +- off += noff; +- if (reg_off_by_arg[OP(scan)]) +- ARG(scan) = off; +- else +- NEXT_OFF(scan) = off; +- } ++ /* Follow the next-chain of the current node and optimize ++ away all the NOTHINGs from it. ++ */ ++ rck_elide_nothing(scan); + + /* The principal pseudo-switch. Cannot be a switch, since we + look into several different things. */ +@@ -5348,11 +5367,7 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n", + if (data && (fl & SF_HAS_EVAL)) + data->flags |= SF_HAS_EVAL; + optimize_curly_tail: +- if (OP(oscan) != CURLYX) { +- while (PL_regkind[OP(next = regnext(oscan))] == NOTHING +- && NEXT_OFF(next)) +- NEXT_OFF(oscan) += NEXT_OFF(next); +- } ++ rck_elide_nothing(oscan); + continue; + + default: +-- +2.20.1 + diff --git a/perl-5.26.3-CVE-2020-12723.patch b/perl-5.26.3-CVE-2020-12723.patch new file mode 100644 index 0000000..a98c81f --- /dev/null +++ b/perl-5.26.3-CVE-2020-12723.patch @@ -0,0 +1,279 @@ +From c031e3ec7c713077659f5f7dc6638d926c69d7b2 Mon Sep 17 00:00:00 2001 +From: Hugo van der Sanden +Date: Sat, 11 Apr 2020 14:10:24 +0100 +Subject: [PATCH v528 3/3] study_chunk: avoid mutating regexp program within + GOSUB + +gh16947 and gh17743: studying GOSUB may restudy in an inner call +(via a mix of recursion and enframing) something that an outer call +is in the middle of looking at. Let the outer frame deal with it. + +(CVE-2020-12723) +--- + embed.fnc | 2 +- + embed.h | 2 +- + proto.h | 2 +- + regcomp.c | 48 ++++++++++++++++++++++++++++++++---------------- + t/re/pat.t | 26 +++++++++++++++++++++++++- + 5 files changed, 60 insertions(+), 20 deletions(-) + +diff --git a/embed.fnc b/embed.fnc +index cf89277163..4b1ba28277 100644 +--- a/embed.fnc ++++ b/embed.fnc +@@ -2397,7 +2397,7 @@ Es |SSize_t|study_chunk |NN RExC_state_t *pRExC_state \ + |NULLOK struct scan_data_t *data \ + |I32 stopparen|U32 recursed_depth \ + |NULLOK regnode_ssc *and_withp \ +- |U32 flags|U32 depth ++ |U32 flags|U32 depth|bool was_mutate_ok + EsRn |U32 |add_data |NN RExC_state_t* const pRExC_state \ + |NN const char* const s|const U32 n + rs |void |re_croak2 |bool utf8|NN const char* pat1|NN const char* pat2|... +diff --git a/embed.h b/embed.h +index 886551ce5c..50fcabc140 100644 +--- a/embed.h ++++ b/embed.h +@@ -1075,7 +1075,7 @@ + #define ssc_is_cp_posixl_init S_ssc_is_cp_posixl_init + #define ssc_or(a,b,c) S_ssc_or(aTHX_ a,b,c) + #define ssc_union(a,b,c) S_ssc_union(aTHX_ a,b,c) +-#define study_chunk(a,b,c,d,e,f,g,h,i,j,k) S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k) ++#define study_chunk(a,b,c,d,e,f,g,h,i,j,k,l) S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k,l) + # endif + # if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C) + #define _invlist_dump(a,b,c,d) Perl__invlist_dump(aTHX_ a,b,c,d) +diff --git a/proto.h b/proto.h +index d3f8802c1d..e276f69bd1 100644 +--- a/proto.h ++++ b/proto.h +@@ -5258,7 +5258,7 @@ PERL_STATIC_INLINE void S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, c + #define PERL_ARGS_ASSERT_SSC_UNION \ + assert(ssc); assert(invlist) + #endif +-STATIC SSize_t S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth); ++STATIC SSize_t S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth, bool was_mutate_ok); + #define PERL_ARGS_ASSERT_STUDY_CHUNK \ + assert(pRExC_state); assert(scanp); assert(minlenp); assert(deltap); assert(last) + #endif +diff --git a/regcomp.c b/regcomp.c +index 0a9c6a8085..e66032a16a 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -110,6 +110,7 @@ typedef struct scan_frame { + regnode *next_regnode; /* next node to process when last is reached */ + U32 prev_recursed_depth; + I32 stopparen; /* what stopparen do we use */ ++ bool in_gosub; /* this or an outer frame is for GOSUB */ + U32 is_top_frame; /* what flags do we use? */ + + struct scan_frame *this_prev_frame; /* this previous frame */ +@@ -4102,7 +4103,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + I32 stopparen, + U32 recursed_depth, + regnode_ssc *and_withp, +- U32 flags, U32 depth) ++ U32 flags, U32 depth, bool was_mutate_ok) + /* scanp: Start here (read-write). */ + /* deltap: Write maxlen-minlen here. */ + /* last: Stop before this one. */ +@@ -4179,6 +4180,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + node length to get a real minimum (because + the folded version may be shorter) */ + bool unfolded_multi_char = FALSE; ++ /* avoid mutating ops if we are anywhere within the recursed or ++ * enframed handling for a GOSUB: the outermost level will handle it. ++ */ ++ bool mutate_ok = was_mutate_ok && !(frame && frame->in_gosub); + /* Peephole optimizer: */ + DEBUG_STUDYDATA("Peep:", data, depth); + DEBUG_PEEP("Peep", scan, depth); +@@ -4189,7 +4194,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + * parsing code, as each (?:..) is handled by a different invocation of + * reg() -- Yves + */ +- JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0); ++ if (mutate_ok) ++ JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0); + + /* Follow the next-chain of the current node and optimize + away all the NOTHINGs from it. */ +@@ -4238,7 +4244,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + * NOTE we dont use the return here! */ + (void)study_chunk(pRExC_state, &scan, &minlen, + &deltanext, next, &data_fake, stopparen, +- recursed_depth, NULL, f, depth+1); ++ recursed_depth, NULL, f, depth+1, mutate_ok); + + scan = next; + } else +@@ -4305,7 +4311,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + /* we suppose the run is continuous, last=next...*/ + minnext = study_chunk(pRExC_state, &scan, minlenp, + &deltanext, next, &data_fake, stopparen, +- recursed_depth, NULL, f,depth+1); ++ recursed_depth, NULL, f, depth+1, ++ mutate_ok); + + if (min1 > minnext) + min1 = minnext; +@@ -4372,9 +4379,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + } + } + +- if (PERL_ENABLE_TRIE_OPTIMISATION && +- OP( startbranch ) == BRANCH ) +- { ++ if (PERL_ENABLE_TRIE_OPTIMISATION ++ && OP(startbranch) == BRANCH ++ && mutate_ok ++ ) { + /* demq. + + Assuming this was/is a branch we are dealing with: 'scan' +@@ -4825,6 +4833,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + newframe->stopparen = stopparen; + newframe->prev_recursed_depth = recursed_depth; + newframe->this_prev_frame= frame; ++ newframe->in_gosub = ( ++ (frame && frame->in_gosub) || OP(scan) == GOSUB ++ ); + + DEBUG_STUDYDATA("frame-new:",data,depth); + DEBUG_PEEP("fnew", scan, depth); +@@ -5043,7 +5054,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + (mincount == 0 + ? (f & ~SCF_DO_SUBSTR) + : f) +- ,depth+1); ++ , depth+1, mutate_ok); + + if (flags & SCF_DO_STCLASS) + data->start_class = oclass; +@@ -5105,7 +5116,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + if ( OP(oscan) == CURLYX && data + && data->flags & SF_IN_PAR + && !(data->flags & SF_HAS_EVAL) +- && !deltanext && minnext == 1 ) { ++ && !deltanext && minnext == 1 ++ && mutate_ok ++ ) { + /* Try to optimize to CURLYN. */ + regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS; + regnode * const nxt1 = nxt; +@@ -5151,10 +5164,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + && !(data->flags & SF_HAS_EVAL) + && !deltanext /* atom is fixed width */ + && minnext != 0 /* CURLYM can't handle zero width */ +- + /* Nor characters whose fold at run-time may be + * multi-character */ + && ! (RExC_seen & REG_UNFOLDED_MULTI_SEEN) ++ && mutate_ok + ) { + /* XXXX How to optimize if data == 0? */ + /* Optimize to a simpler form. */ +@@ -5201,7 +5214,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + #endif + /* Optimize again: */ + study_chunk(pRExC_state, &nxt1, minlenp, &deltanext, nxt, +- NULL, stopparen, recursed_depth, NULL, 0,depth+1); ++ NULL, stopparen, recursed_depth, NULL, 0, ++ depth+1, mutate_ok); + } + else + oscan->flags = 0; +@@ -5592,7 +5606,8 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n", + nscan = NEXTOPER(NEXTOPER(scan)); + minnext = study_chunk(pRExC_state, &nscan, minlenp, &deltanext, + last, &data_fake, stopparen, +- recursed_depth, NULL, f, depth+1); ++ recursed_depth, NULL, f, depth+1, ++ mutate_ok); + if (scan->flags) { + if (deltanext) { + FAIL("Variable length lookbehind not implemented"); +@@ -5681,7 +5696,7 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n", + *minnextp = study_chunk(pRExC_state, &nscan, minnextp, + &deltanext, last, &data_fake, + stopparen, recursed_depth, NULL, +- f,depth+1); ++ f, depth+1, mutate_ok); + if (scan->flags) { + if (deltanext) { + FAIL("Variable length lookbehind not implemented"); +@@ -5841,7 +5856,8 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n", + branches even though they arent otherwise used. */ + minnext = study_chunk(pRExC_state, &scan, minlenp, + &deltanext, (regnode *)nextbranch, &data_fake, +- stopparen, recursed_depth, NULL, f,depth+1); ++ stopparen, recursed_depth, NULL, f, depth+1, ++ mutate_ok); + } + if (nextbranch && PL_regkind[OP(nextbranch)]==BRANCH) + nextbranch= regnext((regnode*)nextbranch); +@@ -7524,7 +7540,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + &data, -1, 0, NULL, + SCF_DO_SUBSTR | SCF_WHILEM_VISITED_POS | stclass_flag + | (restudied ? SCF_TRIE_DOING_RESTUDY : 0), +- 0); ++ 0, TRUE); + + + CHECK_RESTUDY_GOTO_butfirst(LEAVE_with_name("study_chunk")); +@@ -7670,7 +7686,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS|(restudied + ? SCF_TRIE_DOING_RESTUDY + : 0), +- 0); ++ 0, TRUE); + + CHECK_RESTUDY_GOTO_butfirst(NOOP); + +diff --git a/t/re/pat.t b/t/re/pat.t +index 1d98fe77d7..1488259b02 100644 +--- a/t/re/pat.t ++++ b/t/re/pat.t +@@ -23,7 +23,7 @@ BEGIN { + skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader; + skip_all_without_unicode_tables(); + +-plan tests => 840; # Update this when adding/deleting tests. ++plan tests => 844; # Update this when adding/deleting tests. + + run_tests() unless caller; + +@@ -1929,6 +1929,30 @@ EOP + fresh_perl_is('"AA" =~ m/AA{1,0}/','',{},"handle OPFAIL insert properly"); + } + ++ # gh16947: test regexp corruption (GOSUB) ++ { ++ fresh_perl_is(q{ ++ 'xy' =~ /x(?0)|x(?|y|y)/ && print 'ok' ++ }, 'ok', {}, 'gh16947: test regexp corruption (GOSUB)'); ++ } ++ # gh16947: test fix doesn't break SUSPEND ++ { ++ fresh_perl_is(q{ 'sx' =~ m{ss++}i; print 'ok' }, ++ 'ok', {}, "gh16947: test fix doesn't break SUSPEND"); ++ } ++ ++ # gh17743: more regexp corruption via GOSUB ++ { ++ fresh_perl_is(q{ ++ "0" =~ /((0(?0)|000(?|0000|0000)(?0))|)/; print "ok" ++ }, 'ok', {}, 'gh17743: test regexp corruption (1)'); ++ ++ fresh_perl_is(q{ ++ "000000000000" =~ /(0(())(0((?0)())|000(?|\x{ef}\x{bf}\x{bd}|\x{ef}\x{bf}\x{bd}))|)/; ++ print "ok" ++ }, 'ok', {}, 'gh17743: test regexp corruption (2)'); ++ } ++ + } # End of sub run_tests + + 1; +-- +2.20.1 + diff --git a/perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch b/perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch new file mode 100644 index 0000000..af52662 --- /dev/null +++ b/perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch @@ -0,0 +1,62 @@ +From 47d2c70bde8c0bdc67e85578133338fc63c33f13 Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Thu, 17 Jun 2021 11:41:48 +0200 +Subject: [PATCH 2/2] Fix _resolv return value + +in case of the new warnings. +Thanks to @nlv02636 + +Backported fromn Net-Ping 2.68 +--- + dist/Net-Ping/lib/Net/Ping.pm | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/dist/Net-Ping/lib/Net/Ping.pm b/dist/Net-Ping/lib/Net/Ping.pm +index 9e2497c..87087fc 100644 +--- a/dist/Net-Ping/lib/Net/Ping.pm ++++ b/dist/Net-Ping/lib/Net/Ping.pm +@@ -1794,6 +1794,7 @@ sub _resolv { + # Clean up port + if (defined($h{port}) && (($h{port} !~ /^\d{1,5}$/) || ($h{port} < 1) || ($h{port} > 65535))) { + croak("Invalid port `$h{port}' in `$name'"); ++ return undef; + } + # END - host:port + +@@ -1850,18 +1851,21 @@ sub _resolv { + } else { + (undef, $h{addr_in}, undef, undef) = Socket::unpack_sockaddr_in6 $getaddr[0]->{addr}; + } +- return \%h ++ return \%h; + } else { + carp("getnameinfo($getaddr[0]->{addr}) failed - $err"); ++ return undef; + } + } else { + warn(sprintf("getaddrinfo($h{host},,%s) failed - $err", + $family == AF_INET ? "AF_INET" : "AF_INET6")); ++ return undef; + } + # old way + } else { + if ($family == $AF_INET6) { + croak("Socket >= 1.94 required for IPv6 - found Socket $Socket::VERSION"); ++ return undef; + } + + my @gethost = gethostbyname($h{host}); +@@ -1872,8 +1876,10 @@ sub _resolv { + return \%h + } else { + carp("gethostbyname($h{host}) failed - $^E"); ++ return undef; + } + } ++ return undef; + } + + sub _pack_sockaddr_in($$) { +-- +2.31.1 + diff --git a/perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch b/perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch new file mode 100644 index 0000000..0a9f98b --- /dev/null +++ b/perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch @@ -0,0 +1,99 @@ +From 5a3f94a3f0e21d8e685ede4e851a318578a2151f Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Thu, 17 Jun 2021 11:12:30 +0200 +Subject: [PATCH 1/2] carp, not croak on most name lookup failures + +See RT #124830, a regression. +Return undef instead. + +Backported from Net-Ping 2.67 +--- + dist/Net-Ping/lib/Net/Ping.pm | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/dist/Net-Ping/lib/Net/Ping.pm b/dist/Net-Ping/lib/Net/Ping.pm +index 13cbe81..9e2497c 100644 +--- a/dist/Net-Ping/lib/Net/Ping.pm ++++ b/dist/Net-Ping/lib/Net/Ping.pm +@@ -144,7 +144,7 @@ sub new + if ($self->{'host'}) { + my $host = $self->{'host'}; + my $ip = _resolv($host) +- or croak("could not resolve host $host"); ++ or carp("could not resolve host $host"); + $self->{host} = $ip; + $self->{family} = $ip->{family}; + } +@@ -152,7 +152,7 @@ sub new + if ($self->{bind}) { + my $addr = $self->{bind}; + my $ip = _resolv($addr) +- or croak("could not resolve local addr $addr"); ++ or carp("could not resolve local addr $addr"); + $self->{local_addr} = $ip; + } else { + $self->{local_addr} = undef; # Don't bind by default +@@ -323,7 +323,7 @@ sub bind + ($self->{proto} eq "udp" || $self->{proto} eq "icmp"); + + $ip = $self->_resolv($local_addr); +- croak("nonexistent local address $local_addr") unless defined($ip); ++ carp("nonexistent local address $local_addr") unless defined($ip); + $self->{local_addr} = $ip; + + if (($self->{proto} ne "udp") && +@@ -1129,13 +1129,14 @@ sub open + $self->{family_local} = $self->{family}; + } + +- $ip = $self->_resolv($host); + $timeout = $self->{timeout} unless $timeout; ++ $ip = $self->_resolv($host); + +- if($self->{proto} eq "stream") { +- if(defined($self->{fh}->fileno())) { ++ if ($self->{proto} eq "stream") { ++ if (defined($self->{fh}->fileno())) { + croak("socket is already open"); + } else { ++ return () unless $ip; + $self->tcp_connect($ip, $timeout); + } + } +@@ -1851,12 +1852,11 @@ sub _resolv { + } + return \%h + } else { +- croak("getnameinfo($getaddr[0]->{addr}) failed - $err"); ++ carp("getnameinfo($getaddr[0]->{addr}) failed - $err"); + } + } else { +- my $error = sprintf "getaddrinfo($h{host},,%s) failed - $err", +- ($family == AF_INET) ? "AF_INET" : "AF_INET6"; +- croak("$error"); ++ warn(sprintf("getaddrinfo($h{host},,%s) failed - $err", ++ $family == AF_INET ? "AF_INET" : "AF_INET6")); + } + # old way + } else { +@@ -1871,7 +1871,7 @@ sub _resolv { + $h{family} = AF_INET; + return \%h + } else { +- croak("gethostbyname($h{host}) failed - $^E"); ++ carp("gethostbyname($h{host}) failed - $^E"); + } + } + } +@@ -1913,7 +1913,7 @@ sub _inet_ntoa { + if (defined($address)) { + $ret = $address; + } else { +- croak("getnameinfo($addr) failed - $err"); ++ carp("getnameinfo($addr) failed - $err"); + } + } else { + $ret = inet_ntoa($addr) +-- +2.31.1 + diff --git a/perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch b/perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch new file mode 100644 index 0000000..8889451 --- /dev/null +++ b/perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch @@ -0,0 +1,32 @@ +From e80af1fd276d83858d27742ea887415e3263960b Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Wed, 12 Oct 2016 10:42:47 +1100 +Subject: [PATCH] (perl 129183) don't treat \ as an escape in PATH for -S +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Petr Písař +--- + util.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/util.c b/util.c +index 5bb0dfc..6bc2fe5 100644 +--- a/util.c ++++ b/util.c +@@ -3352,9 +3352,8 @@ Perl_find_script(pTHX_ const char *scriptname, bool dosearch, + if (len < sizeof tmpbuf) + tmpbuf[len] = '\0'; + # else +- s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, bufend, +- ':', +- &len); ++ s = delimcpy_no_escape(tmpbuf, tmpbuf + sizeof tmpbuf, s, bufend, ++ ':', &len); + # endif + if (s < bufend) + s++; +-- +2.9.4 + diff --git a/perl-5.27.0-perl-131211-fixup-File-Glob-degenerate-matching.patch b/perl-5.27.0-perl-131211-fixup-File-Glob-degenerate-matching.patch new file mode 100644 index 0000000..c52d790 --- /dev/null +++ b/perl-5.27.0-perl-131211-fixup-File-Glob-degenerate-matching.patch @@ -0,0 +1,258 @@ +From 0db967b2e6a4093a6a5f649190159767e5d005e0 Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Tue, 25 Apr 2017 15:17:06 +0200 +Subject: [PATCH] [perl #131211] fixup File::Glob degenerate matching +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The old code would go quadratic with recursion and backtracking +when doing patterns like "a*a*a*a*a*a*a*x" on a file like +"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa". + +This patch changes the code to not recurse, and to not backtrack, +as per this article from Russ Cox: https://research.swtch.com/glob + +It also adds a micro-optimisation for M_ONE and M_SET under the new code. + +Thanks to Avar and Russ Cox for helping with this patch, along with +Jilles Tjoelker and the rest of the FreeBSD community. + +Signed-off-by: Petr Písař +--- + MANIFEST | 1 + + ext/File-Glob/bsd_glob.c | 64 +++++++++++++++++++++++-------- + ext/File-Glob/t/rt131211.t | 94 ++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 144 insertions(+), 15 deletions(-) + create mode 100644 ext/File-Glob/t/rt131211.t + +diff --git a/MANIFEST b/MANIFEST +index b7b6e74..af0da6c 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -3948,6 +3948,7 @@ ext/File-Glob/t/basic.t See if File::Glob works + ext/File-Glob/t/case.t See if File::Glob works + ext/File-Glob/t/global.t See if File::Glob works + ext/File-Glob/t/rt114984.t See if File::Glob works ++ext/File-Glob/t/rt131211.t See if File::Glob works + ext/File-Glob/t/taint.t See if File::Glob works + ext/File-Glob/t/threads.t See if File::Glob + threads works + ext/File-Glob/TODO File::Glob extension todo list +diff --git a/ext/File-Glob/bsd_glob.c b/ext/File-Glob/bsd_glob.c +index 821ef20..e96fb73 100644 +--- a/ext/File-Glob/bsd_glob.c ++++ b/ext/File-Glob/bsd_glob.c +@@ -563,8 +563,12 @@ glob0(const Char *pattern, glob_t *pglob) + break; + case BG_STAR: + pglob->gl_flags |= GLOB_MAGCHAR; +- /* collapse adjacent stars to one, +- * to avoid exponential behavior ++ /* Collapse adjacent stars to one. ++ * This is required to ensure that a pattern like ++ * "a**" matches a name like "a", as without this ++ * check when the first star matched everything it would ++ * cause the second star to return a match fail. ++ * As long ** is folded here this does not happen. + */ + if (bufnext == patbuf || bufnext[-1] != M_ALL) + *bufnext++ = M_ALL; +@@ -909,35 +913,56 @@ globextend(const Char *path, glob_t *pglob, size_t *limitp) + + + /* +- * pattern matching function for filenames. Each occurrence of the * +- * pattern causes a recursion level. ++ * pattern matching function for filenames using state machine to avoid ++ * recursion. We maintain a "nextp" and "nextn" to allow us to backtrack ++ * without additional callframes, and to do cleanly prune the backtracking ++ * state when multiple '*' (start) matches are included in the patter. ++ * ++ * Thanks to Russ Cox for the improved state machine logic to avoid quadratic ++ * matching on failure. ++ * ++ * https://research.swtch.com/glob ++ * ++ * An example would be a pattern ++ * ("a*" x 100) . "y" ++ * against a file name like ++ * ("a" x 100) . "x" ++ * + */ + static int + match(Char *name, Char *pat, Char *patend, int nocase) + { + int ok, negate_range; + Char c, k; ++ Char *nextp = NULL; ++ Char *nextn = NULL; + ++ loop: + while (pat < patend) { + c = *pat++; + switch (c & M_MASK) { + case M_ALL: + if (pat == patend) + return(1); +- do +- if (match(name, pat, patend, nocase)) +- return(1); +- while (*name++ != BG_EOS) +- ; +- return(0); ++ if (*name == BG_EOS) ++ return 0; ++ nextn = name + 1; ++ nextp = pat - 1; ++ break; + case M_ONE: ++ /* since * matches leftmost-shortest first * ++ * if we encounter the EOS then backtracking * ++ * will not help, so we can exit early here. */ + if (*name++ == BG_EOS) +- return(0); ++ return 0; + break; + case M_SET: + ok = 0; ++ /* since * matches leftmost-shortest first * ++ * if we encounter the EOS then backtracking * ++ * will not help, so we can exit early here. */ + if ((k = *name++) == BG_EOS) +- return(0); ++ return 0; + if ((negate_range = ((*pat & M_MASK) == M_NOT)) != BG_EOS) + ++pat; + while (((c = *pat++) & M_MASK) != M_END) +@@ -953,16 +978,25 @@ match(Char *name, Char *pat, Char *patend, int nocase) + } else if (nocase ? (tolower(c) == tolower(k)) : (c == k)) + ok = 1; + if (ok == negate_range) +- return(0); ++ goto fail; + break; + default: + k = *name++; + if (nocase ? (tolower(k) != tolower(c)) : (k != c)) +- return(0); ++ goto fail; + break; + } + } +- return(*name == BG_EOS); ++ if (*name == BG_EOS) ++ return 1; ++ ++ fail: ++ if (nextn) { ++ pat = nextp; ++ name = nextn; ++ goto loop; ++ } ++ return 0; + } + + /* Free allocated data belonging to a glob_t structure. */ +diff --git a/ext/File-Glob/t/rt131211.t b/ext/File-Glob/t/rt131211.t +new file mode 100644 +index 0000000..c1bcbe0 +--- /dev/null ++++ b/ext/File-Glob/t/rt131211.t +@@ -0,0 +1,94 @@ ++use strict; ++use warnings; ++use v5.16.0; ++use File::Temp 'tempdir'; ++use File::Spec::Functions; ++use Test::More; ++use Time::HiRes qw(time); ++ ++plan tests => 13; ++ ++my $path = tempdir uc cleanup => 1; ++my @files= ( ++ "x".("a" x 50)."b", # 0 ++ "abbbbbbbbbbbbc", # 1 ++ "abbbbbbbbbbbbd", # 2 ++ "aaabaaaabaaaabc", # 3 ++ "pq", # 4 ++ "r", # 5 ++ "rttiiiiiii", # 6 ++ "wewewewewewe", # 7 ++ "weeeweeeweee", # 8 ++ "weewweewweew", # 9 ++ "wewewewewewewewewewewewewewewewewq", # 10 ++ "wtttttttetttttttwr", # 11 ++); ++ ++ ++foreach (@files) { ++ open(my $f, ">", catfile $path, $_); ++} ++ ++my $elapsed_fail= 0; ++my $elapsed_match= 0; ++my @got_files; ++my @no_files; ++my $count = 0; ++ ++while (++$count < 10) { ++ $elapsed_match -= time; ++ @got_files= glob catfile $path, "x".("a*" x $count) . "b"; ++ $elapsed_match += time; ++ ++ $elapsed_fail -= time; ++ @no_files= glob catfile $path, "x".("a*" x $count) . "c"; ++ $elapsed_fail += time; ++ last if $elapsed_fail > $elapsed_match * 100; ++} ++ ++is $count,10, ++ "tried all the patterns without bailing out"; ++ ++cmp_ok $elapsed_fail/$elapsed_match,"<",2, ++ "time to fail less than twice the time to match"; ++is "@got_files", catfile($path, $files[0]), ++ "only got the expected file for xa*..b"; ++is "@no_files", "", "shouldnt have files for xa*..c"; ++ ++ ++@got_files= glob catfile $path, "a*b*b*b*bc"; ++is "@got_files", catfile($path, $files[1]), ++ "only got the expected file for a*b*b*b*bc"; ++ ++@got_files= sort glob catfile $path, "a*b*b*bc"; ++is "@got_files", catfile($path, $files[3])." ".catfile($path,$files[1]), ++ "got the expected two files for a*b*b*bc"; ++ ++@got_files= sort glob catfile $path, "p*"; ++is "@got_files", catfile($path, $files[4]), ++ "p* matches pq"; ++ ++@got_files= sort glob catfile $path, "r*???????"; ++is "@got_files", catfile($path, $files[6]), ++ "r*??????? works as expected"; ++ ++@got_files= sort glob catfile $path, "w*e*w??e"; ++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8)), ++ "w*e*w??e works as expected"; ++ ++@got_files= sort glob catfile $path, "w*e*we??"; ++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8,9,10)), ++ "w*e*we?? works as expected"; ++ ++@got_files= sort glob catfile $path, "w**e**w"; ++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (9)), ++ "w**e**w works as expected"; ++ ++@got_files= sort glob catfile $path, "*wee*"; ++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (8,9)), ++ "*wee* works as expected"; ++ ++@got_files= sort glob catfile $path, "we*"; ++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8,9,10)), ++ "we* works as expected"; ++ +-- +2.9.4 + diff --git a/perl-5.27.1-File-Glob-tweak-rt131211.t-to-be-less-sensitive-on-w.patch b/perl-5.27.1-File-Glob-tweak-rt131211.t-to-be-less-sensitive-on-w.patch new file mode 100644 index 0000000..6407a06 --- /dev/null +++ b/perl-5.27.1-File-Glob-tweak-rt131211.t-to-be-less-sensitive-on-w.patch @@ -0,0 +1,45 @@ +From b4d257e2d408f0f1c6686dcdc112f3ebfec68f44 Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Tue, 27 Jun 2017 10:22:23 +0200 +Subject: [PATCH] File::Glob - tweak rt131211.t to be less sensitive on wonky + boxes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +make the test less senstive and avoid divide by zero errors, +also we skip the test if either elapsed_match or elapsed_fail is +true, as we can not rely on the timings then. For the operations +we are doing we should get a non-zero timing from Time::HiRes. + +This should mean that running this test on boxes with heavy +load, etc, will no longer result in false positives. + +Signed-off-by: Petr Písař +--- + ext/File-Glob/t/rt131211.t | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/ext/File-Glob/t/rt131211.t b/ext/File-Glob/t/rt131211.t +index c1bcbe0..b29cd04 100644 +--- a/ext/File-Glob/t/rt131211.t ++++ b/ext/File-Glob/t/rt131211.t +@@ -49,8 +49,13 @@ while (++$count < 10) { + is $count,10, + "tried all the patterns without bailing out"; + +-cmp_ok $elapsed_fail/$elapsed_match,"<",2, +- "time to fail less than twice the time to match"; ++SKIP: { ++ skip "unstable timing", 1 unless $elapsed_match && $elapsed_fail; ++ ok $elapsed_fail <= 10 * $elapsed_match, ++ "time to fail less than 10x the time to match" ++ or diag("elapsed_match=$elapsed_match elapsed_fail=$elapsed_fail"); ++} ++ + is "@got_files", catfile($path, $files[0]), + "only got the expected file for xa*..b"; + is "@no_files", "", "shouldnt have files for xa*..c"; +-- +2.9.4 + diff --git a/perl-5.27.1-RT-130907-Fix-the-Unicode-Bug-in-split.patch b/perl-5.27.1-RT-130907-Fix-the-Unicode-Bug-in-split.patch new file mode 100644 index 0000000..d1543f0 --- /dev/null +++ b/perl-5.27.1-RT-130907-Fix-the-Unicode-Bug-in-split.patch @@ -0,0 +1,226 @@ +From 5aca16e032861ea3dfcc96ad417ea87e2b1552e5 Mon Sep 17 00:00:00 2001 +From: Aaron Crane +Date: Sat, 4 Mar 2017 12:50:58 +0000 +Subject: [PATCH] RT #130907: Fix the Unicode Bug in split " " +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Ported to 5.26.0: + +commit 20ae58f7a9bbf84d043d6e90f5988b6e3ca4ee3d +Author: Aaron Crane +Date: Sat Mar 4 12:50:58 2017 +0000 + + RT #130907: Fix the Unicode Bug in split " " + +Signed-off-by: Petr Písař +--- + lib/feature.pm | 5 +++-- + pod/perldelta.pod | 9 +++++++++ + pod/perlfunc.pod | 8 ++++++++ + pod/perlunicode.pod | 11 +++++++++++ + pod/perluniintro.pod | 5 +++-- + pp.c | 13 +++++++++++++ + regen/feature.pl | 5 +++-- + t/op/split.t | 20 +++++++++++++++++++- + 8 files changed, 69 insertions(+), 7 deletions(-) + +diff --git a/lib/feature.pm b/lib/feature.pm +index ed13273..93e020b 100644 +--- a/lib/feature.pm ++++ b/lib/feature.pm +@@ -175,8 +175,9 @@ C subpragma is B recommended. + + This feature is available starting with Perl 5.12; was almost fully + implemented in Perl 5.14; and extended in Perl 5.16 to cover C; +-and extended further in Perl 5.26 to cover L. ++was extended further in Perl 5.26 to cover L; and was extended again in Perl 5.28 to ++cover L. + + =head2 The 'unicode_eval' and 'evalbytes' features + +#diff --git a/pod/perldelta.pod b/pod/perldelta.pod +#index 06dcd1d..d31335f 100644 +#--- a/pod/perldelta.pod +#+++ b/pod/perldelta.pod +#@@ -3206,6 +3206,15 @@ calls. +# Parsing bad POSIX charclasses no longer leaks memory. +# L<[perl #128313]|https://rt.perl.org/Public/Bug/Display.html?id=128313> +# +#+=item * +#+ +#+C now correctly handles the argument being split when in the +#+scope of the L<< C|feature/"The 'unicode_strings' feature" +#+>> feature. Previously, when a string using the single-byte internal +#+representation contained characters that are whitespace by Unicode rules but +#+not by ASCII rules, it treated those characters as part of fields rather +#+than as field separators. [perl #130907] +#+ +# =back +# +# =head1 Known Problems +diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod +index b8dca6e..9abadf4 100644 +--- a/pod/perlfunc.pod ++++ b/pod/perlfunc.pod +@@ -7616,6 +7616,14 @@ special case was restricted to the use of a plain S> as the + pattern argument to split; in Perl 5.18.0 and later this special case is + triggered by any expression which evaluates to the simple string S>. + ++As of Perl 5.28, this special-cased whitespace splitting works as expected in ++the scope of L<< S>|feature/The ++'unicode_strings' feature >>. In previous versions, and outside the scope of ++that feature, it exhibits L: characters that are ++whitespace according to Unicode rules but not according to ASCII rules can be ++treated as part of fields rather than as field separators, depending on the ++string's internal encoding. ++ + If omitted, PATTERN defaults to a single space, S>, triggering + the previously described I emulation. + +diff --git a/pod/perlunicode.pod b/pod/perlunicode.pod +index 9c13c35..2e84e95 100644 +--- a/pod/perlunicode.pod ++++ b/pod/perlunicode.pod +@@ -1835,6 +1835,17 @@ outside its scope, it could produce strings whose length in characters + exceeded that of the right-hand side, where the right-hand side took up more + bytes than the correct range endpoint. + ++=item * ++ ++In L<< C's special-case whitespace splitting|perlfunc/split >>. ++ ++Starting in Perl 5.28.0, the C function with a pattern specified as ++a string containing a single space handles whitespace characters consistently ++within the scope of of C. Prior to that, or outside its scope, ++characters that are whitespace according to Unicode rules but not according to ++ASCII rules were treated as field contents rather than field separators when ++they appear in byte-encoded strings. ++ + =back + + You can see from the above that the effect of C +diff --git a/pod/perluniintro.pod b/pod/perluniintro.pod +index d35de34..595ec46 100644 +--- a/pod/perluniintro.pod ++++ b/pod/perluniintro.pod +@@ -151,11 +151,12 @@ serious Unicode work. The maintenance release 5.6.1 fixed many of the + problems of the initial Unicode implementation, but for example + regular expressions still do not work with Unicode in 5.6.1. + Perl v5.14.0 is the first release where Unicode support is +-(almost) seamlessly integrable without some gotchas. (There are two ++(almost) seamlessly integrable without some gotchas. (There are a few + exceptions. Firstly, some differences in L + were fixed starting in Perl 5.16.0. Secondly, some differences in + L were fixed starting in +-Perl 5.26.0.) ++Perl 5.26.0. Thirdly, some differences in L were fixed ++started in Perl 5.28.0.) + + To enable this + seamless support, you should C (which is +diff --git a/pp.c b/pp.c +index cc4cb59..d9dd005 100644 +--- a/pp.c ++++ b/pp.c +@@ -5740,6 +5740,7 @@ PP(pp_split) + STRLEN len; + const char *s = SvPV_const(sv, len); + const bool do_utf8 = DO_UTF8(sv); ++ const bool in_uni_8_bit = IN_UNI_8_BIT; + const char *strend = s + len; + PMOP *pm = cPMOPx(PL_op); + REGEXP *rx; +@@ -5826,6 +5827,10 @@ PP(pp_split) + while (s < strend && isSPACE_LC(*s)) + s++; + } ++ else if (in_uni_8_bit) { ++ while (s < strend && isSPACE_L1(*s)) ++ s++; ++ } + else { + while (s < strend && isSPACE(*s)) + s++; +@@ -5857,6 +5862,10 @@ PP(pp_split) + { + while (m < strend && !isSPACE_LC(*m)) + ++m; ++ } ++ else if (in_uni_8_bit) { ++ while (m < strend && !isSPACE_L1(*m)) ++ ++m; + } else { + while (m < strend && !isSPACE(*m)) + ++m; +@@ -5891,6 +5900,10 @@ PP(pp_split) + { + while (s < strend && isSPACE_LC(*s)) + ++s; ++ } ++ else if (in_uni_8_bit) { ++ while (s < strend && isSPACE_L1(*s)) ++ ++s; + } else { + while (s < strend && isSPACE(*s)) + ++s; +diff --git a/regen/feature.pl b/regen/feature.pl +index 579120e..8a4ce63 100755 +--- a/regen/feature.pl ++++ b/regen/feature.pl +@@ -485,8 +485,9 @@ C subpragma is B recommended. + + This feature is available starting with Perl 5.12; was almost fully + implemented in Perl 5.14; and extended in Perl 5.16 to cover C; +-and extended further in Perl 5.26 to cover L. ++was extended further in Perl 5.26 to cover L; and was extended again in Perl 5.28 to ++cover L. + + =head2 The 'unicode_eval' and 'evalbytes' features + +diff --git a/t/op/split.t b/t/op/split.t +index d60bcaf..038c5d7 100644 +--- a/t/op/split.t ++++ b/t/op/split.t +@@ -7,7 +7,7 @@ BEGIN { + set_up_inc('../lib'); + } + +-plan tests => 163; ++plan tests => 172; + + $FS = ':'; + +@@ -480,6 +480,24 @@ is($cnt, scalar(@ary)); + qq{split(\$cond ? qr/ / : " ", "$exp") behaves as expected over repeated similar patterns}; + } + ++SKIP: { ++ # RT #130907: unicode_strings feature doesn't work with split ' ' ++ ++ my ($sp) = grep /\s/u, map chr, reverse 128 .. 255 # prefer \xA0 over \x85 ++ or skip 'no unicode whitespace found in high-8-bit range', 9; ++ ++ for (["$sp$sp. /", "leading unicode whitespace"], ++ [".$sp$sp/", "unicode whitespace separator"], ++ [". /$sp$sp", "trailing unicode whitespace"]) { ++ my ($str, $desc) = @$_; ++ use feature "unicode_strings"; ++ my @got = split " ", $str; ++ is @got, 2, "whitespace split: $desc: field count"; ++ is $got[0], '.', "whitespace split: $desc: field 0"; ++ is $got[1], '/', "whitespace split: $desc: field 1"; ++ } ++} ++ + { + # 'RT #116086: split "\x20" does not work as documented'; + my @results; +-- +2.9.4 + diff --git a/perl-5.27.1-perl-131679-Fix-our-sub-foo-bar-message.patch b/perl-5.27.1-perl-131679-Fix-our-sub-foo-bar-message.patch new file mode 100644 index 0000000..e9b9bf4 --- /dev/null +++ b/perl-5.27.1-perl-131679-Fix-our-sub-foo-bar-message.patch @@ -0,0 +1,51 @@ +From b9a58d500dd75ba783abac92a56e57d41227f62b Mon Sep 17 00:00:00 2001 +From: Father Chrysostomos +Date: Sun, 2 Jul 2017 11:35:20 -0700 +Subject: [PATCH] =?UTF-8?q?[perl=20#131679]=20Fix=20=E2=80=98our=20sub=20f?= + =?UTF-8?q?oo::bar=E2=80=99=20message?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It should say subroutine, not variable. + +Signed-off-by: Petr Písař +--- + t/lib/croak/toke | 6 ++++++ + toke.c | 3 ++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/t/lib/croak/toke b/t/lib/croak/toke +index 7aa15ef..2603224 100644 +--- a/t/lib/croak/toke ++++ b/t/lib/croak/toke +@@ -133,6 +133,12 @@ state sub; + EXPECT + Missing name in "state sub" at - line 2. + ######## ++# NAME our sub pack::foo ++our sub foo::bar; ++EXPECT ++No package name allowed for subroutine &foo::bar in "our" at - line 1, near "our sub foo::bar" ++Execution of - aborted due to compilation errors. ++######## + # NAME my sub pack::foo + use feature 'lexical_subs', 'state'; + my sub foo::bar; +diff --git a/toke.c b/toke.c +index ace92e3..6aa5f26 100644 +--- a/toke.c ++++ b/toke.c +@@ -8848,7 +8848,8 @@ S_pending_ident(pTHX) + if (PL_in_my == KEY_our) { /* "our" is merely analogous to "my" */ + if (has_colon) + yyerror_pv(Perl_form(aTHX_ "No package name allowed for " +- "variable %s in \"our\"", ++ "%se %s in \"our\"", ++ *PL_tokenbuf=='&' ?"subroutin":"variabl", + PL_tokenbuf), UTF ? SVf_UTF8 : 0); + tmp = allocmy(PL_tokenbuf, tokenbuf_len, UTF ? SVf_UTF8 : 0); + } +-- +2.9.4 + diff --git a/perl-5.27.1-t-lib-warnings-utf8-Fix-test.patch b/perl-5.27.1-t-lib-warnings-utf8-Fix-test.patch new file mode 100644 index 0000000..d134a07 --- /dev/null +++ b/perl-5.27.1-t-lib-warnings-utf8-Fix-test.patch @@ -0,0 +1,30 @@ +From 97e57bec1f0ba4f0c3b1dc18ee146632010e3373 Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Sat, 15 Jul 2017 19:36:25 -0600 +Subject: [PATCH] t/lib/warnings/utf8: Fix test +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +There is some randomness to this test added to fix [perl #131646]. +Change what passes to be a pattern that matches the correct template + +Signed-off-by: Petr Písař +--- + t/lib/warnings/utf8 | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/t/lib/warnings/utf8 b/t/lib/warnings/utf8 +index 9066308..dfc58c1 100644 +--- a/t/lib/warnings/utf8 ++++ b/t/lib/warnings/utf8 +@@ -781,4 +781,5 @@ no warnings; + use warnings 'utf8'; + for(uc 0..t){0~~pack"UXc",exp} + EXPECT +-Malformed UTF-8 character: \xc2\x00 (unexpected non-continuation byte 0x00, immediately after start byte 0xc2; need 2 bytes, got 1) in smart match at - line 9. ++OPTIONS regex ++Malformed UTF-8 character: \\x([[:xdigit:]]{2})\\x([[:xdigit:]]{2}) \(unexpected non-continuation byte 0x\2, immediately after start byte 0x\1; need 2 bytes, got 1\) in smart match at - line 9. +-- +2.9.4 + diff --git a/perl-5.27.1-utf8n_to_uvchr-Don-t-display-too-many-bytes-in-msg.patch b/perl-5.27.1-utf8n_to_uvchr-Don-t-display-too-many-bytes-in-msg.patch new file mode 100644 index 0000000..1b7bd8b --- /dev/null +++ b/perl-5.27.1-utf8n_to_uvchr-Don-t-display-too-many-bytes-in-msg.patch @@ -0,0 +1,43 @@ +From 05b9033b464ce8dd2c9b33238f9aa14755d7a91a Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Sat, 17 Jun 2017 17:56:10 -0600 +Subject: [PATCH] utf8n_to_uvchr(): Don't display too many bytes in msg +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When raising a message about malformed UTF-8, we shouldn't display bytes +from the next character, unless those bytes were expected to have been +part of the current one. Tests for this will be added in future commits +in ext/XS-APItest/t/utf8_warn_base.pl + +Signed-off-by: Petr Písař +--- + utf8.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/utf8.c b/utf8.c +index ee5405f..e55a6f1 100644 +--- a/utf8.c ++++ b/utf8.c +@@ -1428,7 +1428,7 @@ Perl_utf8n_to_uvchr_error(pTHX_ const U8 *s, + if (pack_warn) { + message = Perl_form(aTHX_ "%s: %s (overflows)", + malformed_text, +- _byte_dump_string(s0, send - s0, 0)); ++ _byte_dump_string(s0, curlen, 0)); + } + } + } +@@ -1554,7 +1554,7 @@ Perl_utf8n_to_uvchr_error(pTHX_ const U8 *s, + "%s: %s (overlong; instead use %s to represent" + " U+%0*" UVXf ")", + malformed_text, +- _byte_dump_string(s0, send - s0, 0), ++ _byte_dump_string(s0, curlen, 0), + _byte_dump_string(tmpbuf, e - tmpbuf, 0), + ((uv < 256) ? 2 : 4), /* Field width of 2 for + small code points */ +-- +2.9.4 + diff --git a/perl-5.27.10-PATCH-perl-132167-Parse-error-in-regex_sets.patch b/perl-5.27.10-PATCH-perl-132167-Parse-error-in-regex_sets.patch new file mode 100644 index 0000000..893acd9 --- /dev/null +++ b/perl-5.27.10-PATCH-perl-132167-Parse-error-in-regex_sets.patch @@ -0,0 +1,57 @@ +From 8121278aa8fe72e9e8aca8651c7f1d4fa204ac1d Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Mon, 2 Apr 2018 21:54:59 -0600 +Subject: [PATCH] PATCH: [perl #132167] Parse error in regex_sets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When popping the stack, the code inappropriately also subtracted one +from the result. This is probably left over from an earlier change in +the implementation. The top of the stack contained the correct value; +subtracting was a mistake. + +Signed-off-by: Petr Písař +--- + regcomp.c | 2 +- + t/re/regex_sets.t | 11 +++++++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/regcomp.c b/regcomp.c +index 018d5646fc..39ab260efa 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -15689,7 +15689,7 @@ redo_curchar: + * fence. Get rid of it */ + fence_ptr = av_pop(fence_stack); + assert(fence_ptr); +- fence = SvIV(fence_ptr) - 1; ++ fence = SvIV(fence_ptr); + SvREFCNT_dec_NN(fence_ptr); + fence_ptr = NULL; + +diff --git a/t/re/regex_sets.t b/t/re/regex_sets.t +index e9644bd4e6..e70df81254 100644 +--- a/t/re/regex_sets.t ++++ b/t/re/regex_sets.t +@@ -204,6 +204,17 @@ for my $char ("٠", "٥", "٩") { + like("a", qr/$pat/, "/$pat/ compiles and matches 'a'"); + } + ++{ # [perl #132167] ++ fresh_perl_is('no warnings "experimental::regex_sets"; ++ print "c" =~ qr/(?[ ( \p{Uppercase} ) + (\p{Lowercase} - ([a] + [b])) ])/;', ++ 1, {}, ++ 'qr/(?[ ( \p{Uppercase} ) + (\p{Lowercase} - ([a] + [b])) ]) compiles and properly matches'); ++ fresh_perl_is('no warnings "experimental::regex_sets"; ++ print "b" =~ qr/(?[ ( \p{Uppercase} ) + (\p{Lowercase} - ([a] + [b])) ])/;', ++ "", {}, ++ 'qr/(?[ ( \p{Uppercase} ) + (\p{Lowercase} - ([a] + [b])) ]) compiles and properly matches'); ++} ++ + done_testing(); + + 1; +-- +2.14.3 + diff --git a/perl-5.27.10-PATCH-perl-133074-5.26.1-some-coverity-fixes.patch b/perl-5.27.10-PATCH-perl-133074-5.26.1-some-coverity-fixes.patch new file mode 100644 index 0000000..bcdd357 --- /dev/null +++ b/perl-5.27.10-PATCH-perl-133074-5.26.1-some-coverity-fixes.patch @@ -0,0 +1,71 @@ +From 62e6b70574842d7f2c547d33c85c50228522f685 Mon Sep 17 00:00:00 2001 +From: Marc-Philip +Date: Sun, 8 Apr 2018 12:15:29 -0600 +Subject: [PATCH] PATCH: [perl #133074] 5.26.1: some coverity fixes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +we have some coverity code scans here. They have found this +uninilialized variable in pp.c and the integer overrun in toke.c. +Though it might be possible that these are false positives (no +reasonable control path gets there), it's good to mute the scan here to +see the real problems easier. + +Signed-off-by: Petr Písař +--- + pp.c | 1 + + toke.c | 8 ++++---- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/pp.c b/pp.c +index 5524131658..d777ae4309 100644 +--- a/pp.c ++++ b/pp.c +@@ -3727,6 +3727,7 @@ PP(pp_ucfirst) + if (! slen) { /* If empty */ + need = 1; /* still need a trailing NUL */ + ulen = 0; ++ *tmpbuf = '\0'; + } + else if (DO_UTF8(source)) { /* Is the source utf8? */ + doing_utf8 = TRUE; +diff --git a/toke.c b/toke.c +index 3405dc6c89..fc87252bb1 100644 +--- a/toke.c ++++ b/toke.c +@@ -9052,7 +9052,7 @@ S_pending_ident(pTHX) + HEK * const stashname = HvNAME_HEK(stash); + SV * const sym = newSVhek(stashname); + sv_catpvs(sym, "::"); +- sv_catpvn_flags(sym, PL_tokenbuf+1, tokenbuf_len - 1, (UTF ? SV_CATUTF8 : SV_CATBYTES )); ++ sv_catpvn_flags(sym, PL_tokenbuf+1, tokenbuf_len > 0 ? tokenbuf_len - 1 : 0, (UTF ? SV_CATUTF8 : SV_CATBYTES )); + pl_yylval.opval = newSVOP(OP_CONST, 0, sym); + pl_yylval.opval->op_private = OPpCONST_ENTERED; + if (pit != '&') +@@ -9080,7 +9080,7 @@ S_pending_ident(pTHX) + && PL_lex_state != LEX_NORMAL + && !PL_lex_brackets) + { +- GV *const gv = gv_fetchpvn_flags(PL_tokenbuf + 1, tokenbuf_len - 1, ++ GV *const gv = gv_fetchpvn_flags(PL_tokenbuf + 1, tokenbuf_len > 0 ? tokenbuf_len - 1 : 0, + ( UTF ? SVf_UTF8 : 0 ) | GV_ADDMG, + SVt_PVAV); + if ((!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv))) +@@ -9097,11 +9097,11 @@ S_pending_ident(pTHX) + /* build ops for a bareword */ + pl_yylval.opval = newSVOP(OP_CONST, 0, + newSVpvn_flags(PL_tokenbuf + 1, +- tokenbuf_len - 1, ++ tokenbuf_len > 0 ? tokenbuf_len - 1 : 0, + UTF ? SVf_UTF8 : 0 )); + pl_yylval.opval->op_private = OPpCONST_ENTERED; + if (pit != '&') +- gv_fetchpvn_flags(PL_tokenbuf+1, tokenbuf_len - 1, ++ gv_fetchpvn_flags(PL_tokenbuf+1, tokenbuf_len > 0 ? tokenbuf_len - 1 : 0, + (PL_in_eval ? GV_ADDMULTI : GV_ADD) + | ( UTF ? SVf_UTF8 : 0 ), + ((PL_tokenbuf[0] == '$') ? SVt_PV +-- +2.14.3 + diff --git a/perl-5.27.2-Avoid-compiler-warnings-due-to-mismatched-types-in-p.patch b/perl-5.27.2-Avoid-compiler-warnings-due-to-mismatched-types-in-p.patch new file mode 100644 index 0000000..d5593b6 --- /dev/null +++ b/perl-5.27.2-Avoid-compiler-warnings-due-to-mismatched-types-in-p.patch @@ -0,0 +1,45 @@ +From 357c35e6f18e65f372e7a1b22ee39a3c7c9e5810 Mon Sep 17 00:00:00 2001 +From: Robin Barker +Date: Mon, 17 Dec 2012 18:20:14 +0100 +Subject: [PATCH] Avoid compiler warnings due to mismatched types in *printf + format strings. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +gcc (and probably others) was warning about a mismatch for between `int` +(implied by the format %d) and the actual type passed, `line_t`. Avoid this +by explicitly casting to UV, and using UVuf. + +CPAN #63832 + +Signed-off-by: Petr Písař +--- + cpan/ExtUtils-Constant/lib/ExtUtils/Constant/ProxySubs.pm | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/ProxySubs.pm b/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/ProxySubs.pm +index 545d322..c7e6d05 100644 +--- a/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/ProxySubs.pm ++++ b/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/ProxySubs.pm +@@ -629,13 +629,14 @@ EOA + if ((C_ARRAY_LENGTH(values_for_notfound) > 1) + ? hv_exists_ent(${c_subname}_missing, sv, 0) : 0) { + sv = newSVpvf("Your vendor has not defined $package_sprintf_safe macro %" SVf +- ", used at %" COP_FILE_F " line %d\\n", sv, +- COP_FILE(cop), CopLINE(cop)); ++ ", used at %" COP_FILE_F " line %" UVuf "\\n", ++ sv, COP_FILE(cop), (UV)CopLINE(cop)); + } else + #endif + { + sv = newSVpvf("%"SVf" is not a valid $package_sprintf_safe macro at %" +- COP_FILE_F " line %d\\n", sv, COP_FILE(cop), CopLINE(cop)); ++ COP_FILE_F " line %" UVuf "\\n", ++ sv, COP_FILE(cop), (UV)CopLINE(cop)); + } + croak_sv(sv_2mortal(sv)); + EOC +-- +2.9.4 + diff --git a/perl-5.27.2-EU-Constant-avoid-uninit-warning.patch b/perl-5.27.2-EU-Constant-avoid-uninit-warning.patch new file mode 100644 index 0000000..e330518 --- /dev/null +++ b/perl-5.27.2-EU-Constant-avoid-uninit-warning.patch @@ -0,0 +1,69 @@ +From 389f3ef2fdfbba2c2816e7334a69a5f540c0a33d Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Mon, 15 Dec 2014 16:14:13 +0000 +Subject: [PATCH] EU::Constant: avoid 'uninit' warning +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The code generated by ExtUtils::Constant can look something like: + +static int +constant (..., IV *iv_return) { + switch (...) { + case ...: + *iv_return = ...; + return PERL_constant_ISIV; + ... + } +} + +{ + int type; + IV iv; + type = constant(..., &iv); + switch (type) { + case PERL_constant_ISIV: + PUSHi(iv); + ... + } +} + +and the compiler isn't clever enough to realise that the value of iv +is only used in the code path where its been set. + +So initialise it to zero to shut gcc up. Ditto nv and pv. + +Signed-off-by: Petr Písař +--- + cpan/ExtUtils-Constant/lib/ExtUtils/Constant.pm | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/cpan/ExtUtils-Constant/lib/ExtUtils/Constant.pm b/cpan/ExtUtils-Constant/lib/ExtUtils/Constant.pm +index 0dc9258..cf0e1ca 100644 +--- a/cpan/ExtUtils-Constant/lib/ExtUtils/Constant.pm ++++ b/cpan/ExtUtils-Constant/lib/ExtUtils/Constant.pm +@@ -198,17 +198,17 @@ $XS_subname(sv) + EOT + + if ($params->{IV}) { +- $xs .= " IV iv;\n"; ++ $xs .= " IV iv = 0; /* avoid uninit var warning */\n"; + } else { + $xs .= " /* IV\t\tiv;\tUncomment this if you need to return IVs */\n"; + } + if ($params->{NV}) { +- $xs .= " NV nv;\n"; ++ $xs .= " NV nv = 0.0; /* avoid uninit var warning */\n"; + } else { + $xs .= " /* NV\t\tnv;\tUncomment this if you need to return NVs */\n"; + } + if ($params->{PV}) { +- $xs .= " const char *pv;\n"; ++ $xs .= " const char *pv = NULL; /* avoid uninit var warning */\n"; + } else { + $xs .= + " /* const char\t*pv;\tUncomment this if you need to return PVs */\n"; +-- +2.9.4 + diff --git a/perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch b/perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch new file mode 100644 index 0000000..7f2a9f4 --- /dev/null +++ b/perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch @@ -0,0 +1,60 @@ +From 45908e4d120d33a558a8b052036c56cd0c90b898 Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Wed, 13 Sep 2017 13:30:25 +0200 +Subject: [PATCH] avoid 'the address of ... will always evaluate as ...' warns + in mem macros +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In f14cf363205 we added asserts to our memory macros (Copy(), Zero() etc) +to ensure that the target is non-null. These asserts throw warnings like + + perl.c: In function ‘Perl_eval_sv’: + perl.c:2976:264: warning: the address of ‘myop’ will always evaluate + as ‘true’ [-Waddress] + Zero(&myop, 1, UNOP); + +which is annoying. This patch changes how these asserts are coded so +we avoid the warning. Thanks to Zefram for the fix. + +Signed-off-by: Petr Písař +--- + handy.h | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +diff --git a/handy.h b/handy.h +index 31afaae65e..85e8f70721 100644 +--- a/handy.h ++++ b/handy.h +@@ -2409,17 +2409,20 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe + #define Safefree(d) safefree(MEM_LOG_FREE((Malloc_t)(d))) + #endif + +-#define Move(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) +-#define Copy(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) +-#define Zero(d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), (void)memzero((char*)(d), (n) * sizeof(t))) ++#define perl_assert_ptr(p) assert( ((void*)(p)) != 0 ) + +-#define MoveD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) +-#define CopyD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) ++ ++#define Move(s,d,n,t) (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) ++#define Copy(s,d,n,t) (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) ++#define Zero(d,n,t) (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), (void)memzero((char*)(d), (n) * sizeof(t))) ++ ++#define MoveD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), memmove((char*)(d),(const char*)(s), (n) * sizeof(t))) ++#define CopyD(s,d,n,t) (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), memcpy((char*)(d),(const char*)(s), (n) * sizeof(t))) + #ifdef HAS_MEMSET +-#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t))) ++#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), memzero((char*)(d), (n) * sizeof(t))) + #else + /* Using bzero(), which returns void. */ +-#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t)),d) ++#define ZeroD(d,n,t) (MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), memzero((char*)(d), (n) * sizeof(t)),d) + #endif + + #define PoisonWith(d,n,t,b) (MEM_WRAP_CHECK_(n,t) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))) +-- +2.13.6 + diff --git a/perl-5.27.3-perl-132008-try-to-prevent-the-similar-mistakes-in-t.patch b/perl-5.27.3-perl-132008-try-to-prevent-the-similar-mistakes-in-t.patch new file mode 100644 index 0000000..f999dfa --- /dev/null +++ b/perl-5.27.3-perl-132008-try-to-prevent-the-similar-mistakes-in-t.patch @@ -0,0 +1,30 @@ +From 4369267db9ca4982c1a9bd1ef680bc4350decc3a Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 18 Sep 2017 15:07:21 +1000 +Subject: [PATCH] (perl #132008) try to prevent the similar mistakes in the + future +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Petr Písař +--- + dist/Term-ReadLine/lib/Term/ReadLine.pm | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/dist/Term-ReadLine/lib/Term/ReadLine.pm b/dist/Term-ReadLine/lib/Term/ReadLine.pm +index e00fb376cd..78c1ebf5b6 100644 +--- a/dist/Term-ReadLine/lib/Term/ReadLine.pm ++++ b/dist/Term-ReadLine/lib/Term/ReadLine.pm +@@ -75,6 +75,8 @@ history. Returns the old value. + returns an array with two strings that give most appropriate names for + files for input and output using conventions C<"E$in">, C<"Eout">. + ++The strings returned may not be useful for 3-argument open(). ++ + =item Attribs + + returns a reference to a hash which describes internal configuration +-- +2.13.6 + diff --git a/perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch b/perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch new file mode 100644 index 0000000..ba8cdfa --- /dev/null +++ b/perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch @@ -0,0 +1,32 @@ +From e7e69c85c7e8e0cb75b831e606ad4f26f18b11ff Mon Sep 17 00:00:00 2001 +From: Nicolas R +Date: Mon, 31 Oct 2016 11:53:17 -0600 +Subject: [PATCH] Avoid a segfault when untying an object +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Check if the tied object has a stash set +before calling UNTIE method. + +Signed-off-by: Petr Písař +--- + pp_sys.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pp_sys.c b/pp_sys.c +index 672e7de08e..6d4dd86b7f 100644 +--- a/pp_sys.c ++++ b/pp_sys.c +@@ -1017,7 +1017,7 @@ PP(pp_untie) + + if ((mg = SvTIED_mg(sv, how))) { + SV * const obj = SvRV(SvTIED_obj(sv, mg)); +- if (obj) { ++ if (obj && SvSTASH(obj)) { + GV * const gv = gv_fetchmethod_autoload(SvSTASH(obj), "UNTIE", FALSE); + CV *cv; + if (gv && isGV(gv) && (cv = GvCV(gv))) { +-- +2.13.6 + diff --git a/perl-5.27.5-Carp-Don-t-choke-on-ISA-constant.patch b/perl-5.27.5-Carp-Don-t-choke-on-ISA-constant.patch new file mode 100644 index 0000000..399c245 --- /dev/null +++ b/perl-5.27.5-Carp-Don-t-choke-on-ISA-constant.patch @@ -0,0 +1,73 @@ +From b3937e202aaf10c2f8996e2993c880bb38a7a268 Mon Sep 17 00:00:00 2001 +From: Father Chrysostomos +Date: Wed, 1 Nov 2017 13:11:27 -0700 +Subject: [PATCH] =?UTF-8?q?Carp:=20Don=E2=80=99t=20choke=20on=20ISA=20cons?= + =?UTF-8?q?tant?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This broke some time between 1.29 (perl 5.18) and 1.3301 (perl 5.20): + +$ perl5.20.1 -e 'package Foo { use constant ISA => 42; Bar::f() } package Bar { use Carp; sub f { carp "tun syn" } }' +Not a GLOB reference at /usr/local/lib/perl5/5.20.1/Carp.pm line 560. + +and still persisted in bleadperl (Carp 1.43) until this commit. + +The code that goes poking through the symbol table needs to take into +account that not all stash elements are globs. + +Signed-off-by: Petr Písař +--- + dist/Carp/lib/Carp.pm | 3 ++- + dist/Carp/t/Carp.t | 13 ++++++++++++- + 2 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/dist/Carp/lib/Carp.pm b/dist/Carp/lib/Carp.pm +index 6127b26f54..ef11a0c046 100644 +--- a/dist/Carp/lib/Carp.pm ++++ b/dist/Carp/lib/Carp.pm +@@ -593,7 +593,8 @@ sub trusts_directly { + for my $var (qw/ CARP_NOT ISA /) { + # Don't try using the variable until we know it exists, + # to avoid polluting the caller's namespace. +- if ( $stash->{$var} && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) { ++ if ( $stash->{$var} && ref \$stash->{$var} eq 'GLOB' ++ && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) { + return @{$stash->{$var}} + } + } +diff --git a/dist/Carp/t/Carp.t b/dist/Carp/t/Carp.t +index 65daed7c6c..b1e399d143 100644 +--- a/dist/Carp/t/Carp.t ++++ b/dist/Carp/t/Carp.t +@@ -3,7 +3,7 @@ no warnings "once"; + use Config; + + use IPC::Open3 1.0103 qw(open3); +-use Test::More tests => 67; ++use Test::More tests => 68; + + sub runperl { + my(%args) = @_; +@@ -488,6 +488,17 @@ SKIP: + ); + } + ++{ ++ package Mpar; ++ sub f { Carp::croak "tun syn" } ++ ++ package Phou; ++ $Phou::{ISA} = \42; ++ eval { Mpar::f }; ++} ++like $@, qr/tun syn/, 'Carp can handle non-glob ISA stash elems'; ++ ++ + # New tests go here + + # line 1 "XA" +-- +2.13.6 + diff --git a/perl-5.27.5-fix-tainting-of-s-with-overloaded-replacement.patch b/perl-5.27.5-fix-tainting-of-s-with-overloaded-replacement.patch new file mode 100644 index 0000000..3b853ae --- /dev/null +++ b/perl-5.27.5-fix-tainting-of-s-with-overloaded-replacement.patch @@ -0,0 +1,593 @@ +From 3f8a98327dfdb171bd6e447fec23721b0e74c7a6 Mon Sep 17 00:00:00 2001 +From: Zefram +Date: Sun, 19 Nov 2017 09:15:53 +0000 +Subject: [PATCH] fix tainting of s/// with overloaded replacement +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The substitution code was trying to track the taintedness of the +replacement string itself, but it didn't account for the replacement +being an untainted object with overloading that returns a tainted +stringification. It looked at the taintedness of the object value, not +realising that taint could arise during the string concatenation per se. +Change the taint checks to look at the actual TAINT_get flag after string +concatenation. This may falsely ascribe to the replacement taint that +actually came from somewhere else, but the end result is the same anyway: +there's no visible behaviour that distinguishes taint specifically from +the replacement. Also remove a related taint check that seems to be +not needed at all. Fixes [perl #115266]. + +Petr Písař: Ported to 5.26.1. + +Signed-off-by: Petr Písař +--- + pp_ctl.c | 4 +- + pp_hot.c | 4 +- + t/op/taint.t | 428 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 422 insertions(+), 14 deletions(-) + +diff --git a/pp_ctl.c b/pp_ctl.c +index f136f91..15c193b 100644 +--- a/pp_ctl.c ++++ b/pp_ctl.c +@@ -219,9 +219,9 @@ PP(pp_substcont) + SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */ + + /* See "how taint works" above pp_subst() */ +- if (SvTAINTED(TOPs)) +- cx->sb_rxtainted |= SUBST_TAINT_REPL; + sv_catsv_nomg(dstr, POPs); ++ if (UNLIKELY(TAINT_get)) ++ cx->sb_rxtainted |= SUBST_TAINT_REPL; + if (CxONCE(cx) || s < orig || + !CALLREGEXEC(rx, s, cx->sb_strend, orig, + (s == m), cx->sb_targ, NULL, +diff --git a/pp_hot.c b/pp_hot.c +index f445fd9..5899413 100644 +--- a/pp_hot.c ++++ b/pp_hot.c +@@ -3250,7 +3250,7 @@ PP(pp_subst) + doutf8 = DO_UTF8(dstr); + } + +- if (SvTAINTED(dstr)) ++ if (UNLIKELY(TAINT_get)) + rxtainted |= SUBST_TAINT_REPL; + } + else { +@@ -3421,8 +3421,6 @@ PP(pp_subst) + } + else { + sv_catsv(dstr, repl); +- if (UNLIKELY(SvTAINTED(repl))) +- rxtainted |= SUBST_TAINT_REPL; + } + if (once) + break; +diff --git a/t/op/taint.t b/t/op/taint.t +index c13eaf6..be5eaa8 100644 +--- a/t/op/taint.t ++++ b/t/op/taint.t +@@ -17,7 +17,7 @@ BEGIN { + use strict; + use Config; + +-plan tests => 828; ++plan tests => 1040; + + $| = 1; + +@@ -83,6 +83,8 @@ EndOfCleanup + # Sources of taint: + # The empty tainted value, for tainting strings + my $TAINT = substr($^X, 0, 0); ++# A tainted non-empty string ++my $TAINTXYZ = "xyz".$TAINT; + # A tainted zero, useful for tainting numbers + my $TAINT0; + { +@@ -565,7 +567,7 @@ my $TEST = 'TEST'; + is($one, 'abcd', "$desc: \$1 value"); + } + +- $desc = "substitution with replacement tainted"; ++ $desc = "substitution with partial replacement tainted"; + + $s = 'abcd'; + $res = $s =~ s/(.+)/xyz$TAINT/; +@@ -577,7 +579,7 @@ my $TEST = 'TEST'; + is($res, 1, "$desc: res value"); + is($one, 'abcd', "$desc: \$1 value"); + +- $desc = "substitution /g with replacement tainted"; ++ $desc = "substitution /g with partial replacement tainted"; + + $s = 'abcd'; + $res = $s =~ s/(.)/x$TAINT/g; +@@ -589,7 +591,7 @@ my $TEST = 'TEST'; + is($res, 4, "$desc: res value"); + is($one, 'd', "$desc: \$1 value"); + +- $desc = "substitution /ge with replacement tainted"; ++ $desc = "substitution /ge with partial replacement tainted"; + + $s = 'abc'; + { +@@ -618,7 +620,7 @@ my $TEST = 'TEST'; + is($res, 3, "$desc: res value"); + is($one, 'c', "$desc: \$1 value"); + +- $desc = "substitution /r with replacement tainted"; ++ $desc = "substitution /r with partial replacement tainted"; + + $s = 'abcd'; + $res = $s =~ s/(.+)/xyz$TAINT/r; +@@ -630,6 +632,71 @@ my $TEST = 'TEST'; + is($res, 'xyz', "$desc: res value"); + is($one, 'abcd', "$desc: \$1 value"); + ++ $desc = "substitution with whole replacement tainted"; ++ ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$TAINTXYZ/; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyz', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /g with whole replacement tainted"; ++ ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/$TAINTXYZ/g; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyz' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /ge with whole replacement tainted"; ++ ++ $s = 'abc'; ++ { ++ my $i = 0; ++ my $j; ++ $res = $s =~ s{(.)}{ ++ $j = $i; # make sure code not tainted ++ $one = $1; ++ isnt_tainted($j, "$desc: code not tainted within /e"); ++ $i++; ++ if ($i == 1) { ++ isnt_tainted($s, "$desc: s not tainted loop 1"); ++ } ++ else { ++ is_tainted($s, "$desc: s tainted loop $i"); ++ } ++ isnt_tainted($one, "$desc: \$1 not tainted within /e"); ++ $TAINTXYZ; ++ }ge; ++ $one = $1; ++ } ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyz' x 3, "$desc: s value"); ++ is($res, 3, "$desc: res value"); ++ is($one, 'c', "$desc: \$1 value"); ++ ++ $desc = "substitution /r with whole replacement tainted"; ++ ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$TAINTXYZ/r; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ is_tainted($res, "$desc: res tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'abcd', "$desc: s value"); ++ is($res, 'xyz', "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ + { + # now do them all again with "use re 'taint" + +@@ -955,7 +1022,7 @@ my $TEST = 'TEST'; + is($one, 'abcd', "$desc: \$1 value"); + } + +- $desc = "use re 'taint': substitution with replacement tainted"; ++ $desc = "use re 'taint': substitution with partial replacement tainted"; + + $s = 'abcd'; + $res = $s =~ s/(.+)/xyz$TAINT/; +@@ -967,7 +1034,7 @@ my $TEST = 'TEST'; + is($res, 1, "$desc: res value"); + is($one, 'abcd', "$desc: \$1 value"); + +- $desc = "use re 'taint': substitution /g with replacement tainted"; ++ $desc = "use re 'taint': substitution /g with partial replacement tainted"; + + $s = 'abcd'; + $res = $s =~ s/(.)/x$TAINT/g; +@@ -979,7 +1046,7 @@ my $TEST = 'TEST'; + is($res, 4, "$desc: res value"); + is($one, 'd', "$desc: \$1 value"); + +- $desc = "use re 'taint': substitution /ge with replacement tainted"; ++ $desc = "use re 'taint': substitution /ge with partial replacement tainted"; + + $s = 'abc'; + { +@@ -1008,7 +1075,7 @@ my $TEST = 'TEST'; + is($res, 3, "$desc: res value"); + is($one, 'c', "$desc: \$1 value"); + +- $desc = "use re 'taint': substitution /r with replacement tainted"; ++ $desc = "use re 'taint': substitution /r with partial replacement tainted"; + + $s = 'abcd'; + $res = $s =~ s/(.+)/xyz$TAINT/r; +@@ -1020,6 +1087,71 @@ my $TEST = 'TEST'; + is($res, 'xyz', "$desc: res value"); + is($one, 'abcd', "$desc: \$1 value"); + ++ $desc = "use re 'taint': substitution with whole replacement tainted"; ++ ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$TAINTXYZ/; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyz', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "use re 'taint': substitution /g with whole replacement tainted"; ++ ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/$TAINTXYZ/g; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyz' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "use re 'taint': substitution /ge with whole replacement tainted"; ++ ++ $s = 'abc'; ++ { ++ my $i = 0; ++ my $j; ++ $res = $s =~ s{(.)}{ ++ $j = $i; # make sure code not tainted ++ $one = $1; ++ isnt_tainted($j, "$desc: code not tainted within /e"); ++ $i++; ++ if ($i == 1) { ++ isnt_tainted($s, "$desc: s not tainted loop 1"); ++ } ++ else { ++ is_tainted($s, "$desc: s tainted loop $i"); ++ } ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ $TAINTXYZ; ++ }ge; ++ $one = $1; ++ } ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyz' x 3, "$desc: s value"); ++ is($res, 3, "$desc: res value"); ++ is($one, 'c', "$desc: \$1 value"); ++ ++ $desc = "use re 'taint': substitution /r with whole replacement tainted"; ++ ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$TAINTXYZ/r; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ is_tainted($res, "$desc: res tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'abcd', "$desc: s value"); ++ is($res, 'xyz', "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ + # [perl #121854] match taintedness became sticky + # when one match has a taintess result, subseqent matches + # using the same pattern shouldn't necessarily be tainted +@@ -2448,6 +2580,284 @@ is eval { eval $::x.1 }, 1, 'reset does not taint undef'; + isnt_tainted $b, "list assign post tainted expression b"; + } + ++# taint passing through overloading ++package OvTaint { ++ sub new { bless({ t => $_[1] }, $_[0]) } ++ use overload '""' => sub { $_[0]->{t} ? "hi".$TAINT : "hello" }; ++} ++my $ovclean = OvTaint->new(0); ++my $ovtaint = OvTaint->new(1); ++isnt_tainted("$ovclean", "overload preserves cleanliness"); ++is_tainted("$ovtaint", "overload preserves taint"); ++ ++# substitutions with overloaded replacement ++{ ++ my ($desc, $s, $res, $one); ++ ++ $desc = "substitution with partial replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/xyz$ovclean/; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyzhello', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution with partial replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/xyz$ovtaint/; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyzhi', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution with whole replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$ovclean/; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hello', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution with whole replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$ovtaint/; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hi', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with partial replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/"xyz".$ovclean/e; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyzhello', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with partial replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/"xyz".$ovtaint/e; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyzhi', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with whole replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$ovclean/e; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hello', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with whole replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$ovtaint/e; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hi', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with extra code and partial replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/(my $z++), "xyz".$ovclean/e; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyzhello', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with extra code and partial replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/(my $z++), "xyz".$ovtaint/e; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xyzhi', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with extra code and whole replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/(my $z++), $ovclean/e; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hello', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /e with extra code and whole replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/(my $z++), $ovtaint/e; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hi', "$desc: s value"); ++ is($res, 1, "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /r with partial replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/xyz$ovclean/r; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'abcd', "$desc: s value"); ++ is($res, 'xyzhello', "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /r with partial replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/xyz$ovtaint/r; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ is_tainted($res, "$desc: res tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'abcd', "$desc: s value"); ++ is($res, 'xyzhi', "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /r with whole replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$ovclean/r; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'abcd', "$desc: s value"); ++ is($res, 'hello', "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /r with whole replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.+)/$ovtaint/r; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ is_tainted($res, "$desc: res tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'abcd', "$desc: s value"); ++ is($res, 'hi', "$desc: res value"); ++ is($one, 'abcd', "$desc: \$1 value"); ++ ++ $desc = "substitution /g with partial replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/x$ovclean/g; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xhello' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /g with partial replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/x$ovtaint/g; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xhi' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /g with whole replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/$ovclean/g; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hello' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /g with whole replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/$ovtaint/g; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hi' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /ge with partial replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/"x".$ovclean/ge; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xhello' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /ge with partial replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/"x".$ovtaint/ge; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'xhi' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /ge with whole replacement overloaded and clean"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/$ovclean/ge; ++ $one = $1; ++ isnt_tainted($s, "$desc: s not tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hello' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++ ++ $desc = "substitution /ge with whole replacement overloaded and tainted"; ++ $s = 'abcd'; ++ $res = $s =~ s/(.)/$ovtaint/ge; ++ $one = $1; ++ is_tainted($s, "$desc: s tainted"); ++ isnt_tainted($res, "$desc: res not tainted"); ++ isnt_tainted($one, "$desc: \$1 not tainted"); ++ is($s, 'hi' x 4, "$desc: s value"); ++ is($res, 4, "$desc: res value"); ++ is($one, 'd', "$desc: \$1 value"); ++} + + # This may bomb out with the alarm signal so keep it last + SKIP: { +-- +2.13.6 + diff --git a/perl-5.27.5-perl-132442-Fix-stack-with-do-my-sub-l-1.patch b/perl-5.27.5-perl-132442-Fix-stack-with-do-my-sub-l-1.patch new file mode 100644 index 0000000..9d33d9c --- /dev/null +++ b/perl-5.27.5-perl-132442-Fix-stack-with-do-my-sub-l-1.patch @@ -0,0 +1,105 @@ +From 695d6585affc8f13711f013329fb4810ab89d833 Mon Sep 17 00:00:00 2001 +From: Father Chrysostomos +Date: Tue, 14 Nov 2017 18:55:55 -0800 +Subject: [PATCH] [perl #132442] Fix stack with do {my sub l; 1} +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A block in perl usually compiles to a leave op with an enter inside +it, followed by the statements: + + leave + enter + nextstate + ... expr ... + nextstate + ... expr ... + +If a block contains only one statement, and that statement is suffic- +iently innocuous, then the enter/leave pair to create the scope at run +time get skipped, and instead we have a simple scope op which is not +even executed: + + scope + ex-nextstate + ... expr ... + +The nextstate in this case also gets nulled. + +In the case of do { my sub l; 1 } we were getting a variation of the +latter, that looked like this: + + scope + introcv + clonecv + nextstate + ... expr ... + +The problem here is that nextstate resets the stack, even though a new +scope has not been pushed, so we end up with all existing stack items +from the *outer* scope getting clobbered. + +One can have fun with this and erase everything pushed on to the stack +so far in a given statement: + +$ ./perl -le 'print join "-", 1..10, do {my sub l; ","}, 11..20' +11,12,13,14,15,16,17,18,19,20 + +Here I replaced the first argument to join() from within the do{} +block, after having cleared the stack. + +Why was the op tree was getting muddled up like this? The ‘my sub’ +declaration does not immediately add any ops to the op tree; those ops +get added when the current scope finishing compiling, since those ops +must be inserted at the beginning of the block. + +I have not fully looked into the order that things happen, and why the +nextstate op does not get nulled; but it did not matter, because of +the simple fix: Treat lexical sub declarations as ‘not innocuous’ by +setting the HINT_BLOCK_SCOPE flag when a lexical sub is declared. +Thus, we end up with an enter/leave pair, which creates a +proper scope. + +Signed-off-by: Petr Písař +--- + op.c | 2 ++ + t/op/lexsub.t | 5 ++++- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/op.c b/op.c +index 8fa5aad876..c617ad2a00 100644 +--- a/op.c ++++ b/op.c +@@ -9243,6 +9243,8 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) + + PERL_ARGS_ASSERT_NEWMYSUB; + ++ PL_hints |= HINT_BLOCK_SCOPE; ++ + /* Find the pad slot for storing the new sub. + We cannot use PL_comppad, as it is the pad owned by the new sub. We + need to look in CvOUTSIDE and find the pad belonging to the enclos- +diff --git a/t/op/lexsub.t b/t/op/lexsub.t +index 3fa17acdda..f085cd97e8 100644 +--- a/t/op/lexsub.t ++++ b/t/op/lexsub.t +@@ -7,7 +7,7 @@ BEGIN { + *bar::is = *is; + *bar::like = *like; + } +-plan 149; ++plan 150; + + # -------------------- our -------------------- # + +@@ -957,3 +957,6 @@ like runperl( + { + my sub h; sub{my $x; sub{h}} + } ++ ++is join("-", qw(aa bb), do { my sub lleexx; 123 }, qw(cc dd)), ++ "aa-bb-123-cc-dd", 'do { my sub...} in a list [perl #132442]'; +-- +2.13.6 + diff --git a/perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch b/perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch new file mode 100644 index 0000000..74cb681 --- /dev/null +++ b/perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch @@ -0,0 +1,34 @@ +From 8e7c2faafb74d3b07e8a5818608dfe065e361604 Mon Sep 17 00:00:00 2001 +From: "Craig A. Berry" +Date: Mon, 1 Jan 2018 10:10:33 -0600 +Subject: [PATCH] Reenable numeric first argument of system() on VMS. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This was broken in 64def2aeaeb63f92dadc6dfa334, and fixed for Win32 +only in 8fe3452cc6ac7af8c08. But VMS also uses a numeric first +argument to system() as a flag indicating spawn without waiting for +completion. + +Signed-off-by: Petr Písař +--- + pp_sys.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pp_sys.c b/pp_sys.c +index 0c9147bc4e..5154b9baa8 100644 +--- a/pp_sys.c ++++ b/pp_sys.c +@@ -4375,7 +4375,7 @@ PP(pp_system) + STRLEN len; + char *pv; + SvGETMAGIC(origsv); +-#ifdef WIN32 ++#if defined(WIN32) || defined(__VMS) + /* + * Because of a nasty platform-specific variation on the meaning + * of arguments to this op, we must preserve numeric arguments +-- +2.13.6 + diff --git a/perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch b/perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch new file mode 100644 index 0000000..ab61f96 --- /dev/null +++ b/perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch @@ -0,0 +1,73 @@ +From 8fe3452cc6ac7af8c08c2044cd3757018a9c8887 Mon Sep 17 00:00:00 2001 +From: Zefram +Date: Fri, 22 Dec 2017 05:32:41 +0000 +Subject: [PATCH] preserve numericness of system() args on Win32 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +On Windows there's a nasty variation in the meaning of arguments +to Perl's system(), in which a numeric first argument isn't used as +part of the command to run, but instead selects between two different +operations to perform with the command (whether to wait for the command +to complete or not). Therefore the reduction of argument scalars to +their operative values in the parent process, which was added in commit +64def2aeaeb63f92dadc6dfa33486c1d7b311963, needs to preserve numericness +of arguments on Windows. Fixes [perl #132633]. + +Signed-off-by: Petr Písař +--- + pp_sys.c | 35 +++++++++++++++++++++++++++++++---- + 1 file changed, 31 insertions(+), 4 deletions(-) + +diff --git a/pp_sys.c b/pp_sys.c +index beb60da4c6..0649794104 100644 +--- a/pp_sys.c ++++ b/pp_sys.c +@@ -4393,12 +4393,39 @@ PP(pp_system) + # endif + + while (++MARK <= SP) { +- SV *origsv = *MARK; ++ SV *origsv = *MARK, *copysv; + STRLEN len; + char *pv; +- pv = SvPV(origsv, len); +- *MARK = newSVpvn_flags(pv, len, +- (SvFLAGS(origsv) & SVf_UTF8) | SVs_TEMP); ++ SvGETMAGIC(origsv); ++#ifdef WIN32 ++ /* ++ * Because of a nasty platform-specific variation on the meaning ++ * of arguments to this op, we must preserve numeric arguments ++ * as numeric, not just retain the string value. ++ */ ++ if (SvNIOK(origsv) || SvNIOKp(origsv)) { ++ copysv = newSV_type(SVt_PVNV); ++ sv_2mortal(copysv); ++ if (SvPOK(origsv) || SvPOKp(origsv)) { ++ pv = SvPV_nomg(origsv, len); ++ sv_setpvn(copysv, pv, len); ++ SvPOK_off(copysv); ++ } ++ if (SvIOK(origsv) || SvIOKp(origsv)) ++ SvIV_set(copysv, SvIVX(origsv)); ++ if (SvNOK(origsv) || SvNOKp(origsv)) ++ SvNV_set(copysv, SvNVX(origsv)); ++ SvFLAGS(copysv) |= SvFLAGS(origsv) & ++ (SVf_IOK|SVf_NOK|SVf_POK|SVp_IOK|SVp_NOK|SVp_POK| ++ SVf_UTF8|SVf_IVisUV); ++ } else ++#endif ++ { ++ pv = SvPV_nomg(origsv, len); ++ copysv = newSVpvn_flags(pv, len, ++ (SvFLAGS(origsv) & SVf_UTF8) | SVs_TEMP); ++ } ++ *MARK = copysv; + } + MARK = ORIGMARK; + +-- +2.13.6 + diff --git a/perl-5.27.8-don-t-clobber-file-bytes-in-encoding-layer.patch b/perl-5.27.8-don-t-clobber-file-bytes-in-encoding-layer.patch new file mode 100644 index 0000000..ca9ef63 --- /dev/null +++ b/perl-5.27.8-don-t-clobber-file-bytes-in-encoding-layer.patch @@ -0,0 +1,127 @@ +From fed9fe5b48ccdffef9065a03c12c237cc7418de6 Mon Sep 17 00:00:00 2001 +From: Zefram +Date: Fri, 16 Feb 2018 17:20:34 +0000 +Subject: [PATCH] don't clobber file bytes in :encoding layer +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The PerlIO::encoding layer, when used on input, was creating an SvLEN==0 +scalar pointing into the byte buffer, to pass to the ->decode method +of the encoding object. Since the method mutates this scalar, for some +encodings this led to mutating the byte buffer, and depending on where +it came from that might be something visible elsewhere that should not +be mutated. Remove the code for the SvLEN==0 scalar, instead always +using the alternate code that would copy the bytes into a separate buffer +owned by the scalar. Fixes [perl #132833]. + +Signed-off-by: Petr Písař +--- + ext/PerlIO-encoding/encoding.pm | 2 +- + ext/PerlIO-encoding/encoding.xs | 43 ++++++++++------------------------------ + ext/PerlIO-encoding/t/encoding.t | 12 ++++++++++- + 3 files changed, 22 insertions(+), 35 deletions(-) + +diff --git a/ext/PerlIO-encoding/encoding.pm b/ext/PerlIO-encoding/encoding.pm +index 08d2df4713..3d740b181a 100644 +--- a/ext/PerlIO-encoding/encoding.pm ++++ b/ext/PerlIO-encoding/encoding.pm +@@ -1,7 +1,7 @@ + package PerlIO::encoding; + + use strict; +-our $VERSION = '0.25'; ++our $VERSION = '0.26'; + our $DEBUG = 0; + $DEBUG and warn __PACKAGE__, " called by ", join(", ", caller), "\n"; + +diff --git a/ext/PerlIO-encoding/encoding.xs b/ext/PerlIO-encoding/encoding.xs +index bb4754f3d9..941d786266 100644 +--- a/ext/PerlIO-encoding/encoding.xs ++++ b/ext/PerlIO-encoding/encoding.xs +@@ -307,42 +307,19 @@ PerlIOEncode_fill(pTHX_ PerlIO * f) + goto end_of_file; + } + } +- if (SvCUR(e->dataSV)) { +- /* something left over from last time - create a normal +- SV with new data appended +- */ +- if (use + SvCUR(e->dataSV) > e->base.bufsiz) { +- if (e->flags & NEEDS_LINES) { +- /* Have to grow buffer */ +- e->base.bufsiz = use + SvCUR(e->dataSV); +- PerlIOEncode_get_base(aTHX_ f); +- } +- else { +- use = e->base.bufsiz - SvCUR(e->dataSV); +- } +- } +- sv_catpvn(e->dataSV,(char*)ptr,use); +- } +- else { +- /* Create a "dummy" SV to represent the available data from layer below */ +- if (SvLEN(e->dataSV) && SvPVX_const(e->dataSV)) { +- Safefree(SvPVX_mutable(e->dataSV)); +- } +- if (use > (SSize_t)e->base.bufsiz) { +- if (e->flags & NEEDS_LINES) { +- /* Have to grow buffer */ +- e->base.bufsiz = use; +- PerlIOEncode_get_base(aTHX_ f); +- } +- else { +- use = e->base.bufsiz; ++ if (!SvCUR(e->dataSV)) ++ SvPVCLEAR(e->dataSV); ++ if (use + SvCUR(e->dataSV) > e->base.bufsiz) { ++ if (e->flags & NEEDS_LINES) { ++ /* Have to grow buffer */ ++ e->base.bufsiz = use + SvCUR(e->dataSV); ++ PerlIOEncode_get_base(aTHX_ f); + } ++ else { ++ use = e->base.bufsiz - SvCUR(e->dataSV); + } +- SvPV_set(e->dataSV, (char *) ptr); +- SvLEN_set(e->dataSV, 0); /* Hands off sv.c - it isn't yours */ +- SvCUR_set(e->dataSV,use); +- SvPOK_only(e->dataSV); + } ++ sv_catpvn(e->dataSV,(char*)ptr,use); + SvUTF8_off(e->dataSV); + PUSHMARK(sp); + XPUSHs(e->enc); +diff --git a/ext/PerlIO-encoding/t/encoding.t b/ext/PerlIO-encoding/t/encoding.t +index 088f89ee20..41cefcb137 100644 +--- a/ext/PerlIO-encoding/t/encoding.t ++++ b/ext/PerlIO-encoding/t/encoding.t +@@ -16,7 +16,7 @@ BEGIN { + require "../../t/charset_tools.pl"; + } + +-use Test::More tests => 24; ++use Test::More tests => 27; + + my $grk = "grk$$"; + my $utf = "utf$$"; +@@ -231,6 +231,16 @@ is $x, "To hymn him who heard her herd herd\n", + + } # SKIP + ++# decoding shouldn't mutate the original bytes [perl #132833] ++{ ++ my $b = "a\0b\0\n\0"; ++ open my $fh, "<:encoding(UTF16-LE)", \$b or die; ++ is scalar(<$fh>), "ab\n"; ++ is $b, "a\0b\0\n\0"; ++ close $fh or die; ++ is $b, "a\0b\0\n\0"; ++} ++ + END { + 1 while unlink($grk, $utf, $fail1, $fail2, $russki, $threebyte); + } +-- +2.14.3 + diff --git a/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch b/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch new file mode 100644 index 0000000..f68569f --- /dev/null +++ b/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch @@ -0,0 +1,61 @@ +From f6bc8fb3d26892ba1a84ba2df76beedd51998dd2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 29 Jan 2018 16:34:17 +0100 +Subject: [PATCH] hints/linux: Add -lphtread to lddlflags +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Passing -z defs to linker flags causes perl to fail to build if threads are +enabled: + +gcc -shared -Wl,-z,relro -Wl,-z,defs -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -L/usr/local/lib -fstack-protector-strong Bzip2.o -o ../../lib/auto/Compress/Raw/Bzip2/Bzip2.so \ + -L/usr/lib64 -lbz2 "-L../.." -lperl \ + +Bzip2.o: In function `deRef': +/builddir/build/BUILD/perl-5.26.1/cpan/Compress-Raw-Bzip2/Bzip2.xs:256: undefined reference to `pthread_getspecific' + +The reason is Bzip2.xs calls dTHX macro included from thread.h via perl.h that +expands to pthread_getspecific() function call that is defined in pthread +library. But the pthread library is not explicitly linked to Bzip.so (see the +gcc command). This is exactly what -z defs linker flag enforces. + +Underlinking ELFs can be dangerous because in case of versioned +symbols it can cause run-time binding to an improper version symbol or +even to an symbold from different library. + +This patch fixes hints for Linux by adding -lpthreads to lddlflags. It +also adds -shared there because Configure.sh adds it only hints return +lddlflags empty. + + + +Signed-off-by: Petr Písař +--- + hints/linux.sh | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea07f1..9ec3bc02ef 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -353,12 +353,16 @@ if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then + echo "$libswanted" >&4 + fi + ++# Flags needed to produce shared libraries. ++lddlflags='-shared' ++ + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' + case "$usethreads" in + $define|true|[yY]*) + ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" ++ lddlflags="-lpthread $lddlflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +-- +2.13.6 + diff --git a/perl-5.27.9-fix-line-numbers-in-multi-line-s.patch b/perl-5.27.9-fix-line-numbers-in-multi-line-s.patch new file mode 100644 index 0000000..80be1f8 --- /dev/null +++ b/perl-5.27.9-fix-line-numbers-in-multi-line-s.patch @@ -0,0 +1,68 @@ +From 823ba440369100de3f2693420a3887a645a57d28 Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Wed, 7 Mar 2018 09:27:26 +0000 +Subject: [PATCH] fix line numbers in multi-line s/// +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +my commit v5.25.6-230-g6432a58, "Eliminate SVrepl_EVAL and SvEVALED()", +introduced a regression: __LINE__ no longer took account of multiple +lines in the s///. + +Now fixed. + +Spotted by Abigail. + +Signed-off-by: Petr Písař +--- + t/re/subst.t | 12 +++++++++++- + toke.c | 2 +- + 2 files changed, 12 insertions(+), 2 deletions(-) + +diff --git a/t/re/subst.t b/t/re/subst.t +index b9b9939b11..dd62e95ee6 100644 +--- a/t/re/subst.t ++++ b/t/re/subst.t +@@ -11,7 +11,7 @@ BEGIN { + require './loc_tools.pl'; + } + +-plan(tests => 275); ++plan(tests => 276); + + $_ = 'david'; + $a = s/david/rules/r; +@@ -1163,6 +1163,16 @@ __EOF__ + pass("RT #130188"); + } + ++# RT #131930 ++# a multi-line s/// wasn't resetting the cop_line correctly ++{ ++ my $l0 = __LINE__; ++ my $s = "a"; ++ $s =~ s[a] ++ [b]; ++ my $lines = __LINE__ - $l0; ++ is $lines, 4, "RT #131930"; ++} + + + +diff --git a/toke.c b/toke.c +index 9dbad98408..0ef33415c0 100644 +--- a/toke.c ++++ b/toke.c +@@ -9884,7 +9884,7 @@ S_scan_subst(pTHX_ char *start) + * the NVX field indicates how many src code lines the replacement + * spreads over */ + sv_upgrade(PL_parser->lex_sub_repl, SVt_PVNV); +- ((XPVNV*)SvANY(PL_parser->lex_sub_repl))->xnv_u.xnv_lines = 0; ++ ((XPVNV*)SvANY(PL_parser->lex_sub_repl))->xnv_u.xnv_lines = linediff; + ((XPVIV*)SvANY(PL_parser->lex_sub_repl))->xiv_u.xivu_eval_seen = + cBOOL(es); + } +-- +2.14.3 + diff --git a/perl-5.28.2-Only-pass-2-digit-years-to-tests-when-testing-2-digi.patch b/perl-5.28.2-Only-pass-2-digit-years-to-tests-when-testing-2-digi.patch new file mode 100644 index 0000000..4fb8553 --- /dev/null +++ b/perl-5.28.2-Only-pass-2-digit-years-to-tests-when-testing-2-digi.patch @@ -0,0 +1,113 @@ +From 381d51822fccaa333cbd0ab9fca8b69f650c05f9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 14 Feb 2020 14:10:10 +0100 +Subject: [PATCH] Only pass 2-digit years to tests when testing 2-digit year + handling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This will start breaking in 2020 if done without working around the whole +breakpoint thing. See https://rt.cpan.org/Ticket/Display.html?id=124787. + +Ported from Time-Local 63265fd81c7f6177bf28dfe0d1ada9cb897de566 commit +by Dave Rolsky to perl 5.28.2. + +Signed-off-by: Petr Písař +--- + cpan/Time-Local/t/Local.t | 40 +++++++++++++++++++++++++++++---------- + 1 file changed, 30 insertions(+), 10 deletions(-) + +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +-- +2.21.1 + diff --git a/perl-5.29.0-Remove-ext-GDBM_File-t-fatal.t.patch b/perl-5.29.0-Remove-ext-GDBM_File-t-fatal.t.patch new file mode 100644 index 0000000..bc4ac01 --- /dev/null +++ b/perl-5.29.0-Remove-ext-GDBM_File-t-fatal.t.patch @@ -0,0 +1,94 @@ +From 892e8b006aa99ac2c880cdc2a81fd16f06c1a0f3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 9 Jul 2018 16:18:36 +0200 +Subject: [PATCH] Remove ext/GDBM_File/t/fatal.t +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +gdbm-1.15 defaults to a memory-mapped I/O and does not report any I/O +errors on store and close operations. Thus ext/GDBM_File/t/fatal.t +test that expects these fatal error reports fails. Because there is +no other way to provoke a fatal error in gdbm-1.15 this patch +removes the test. Future gdbm version promisses reporting a regular +error on closing a database. + +RT#133295 + +Signed-off-by: Petr Písař +--- + MANIFEST | 1 - + ext/GDBM_File/t/fatal.t | 49 ------------------------------------------------- + 2 files changed, 50 deletions(-) + delete mode 100644 ext/GDBM_File/t/fatal.t + +diff --git a/MANIFEST b/MANIFEST +index 95fa539095..b07fed1f54 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -4100,7 +4100,6 @@ ext/GDBM_File/GDBM_File.pm GDBM extension Perl module + ext/GDBM_File/GDBM_File.xs GDBM extension external subroutines + ext/GDBM_File/hints/sco.pl Hint for GDBM_File for named architecture + ext/GDBM_File/Makefile.PL GDBM extension makefile writer +-ext/GDBM_File/t/fatal.t Test the fatal_func argument to gdbm_open + ext/GDBM_File/t/gdbm.t See if GDBM_File works + ext/GDBM_File/typemap GDBM extension interface types + ext/Hash-Util/Changes Change history of Hash::Util +diff --git a/ext/GDBM_File/t/fatal.t b/ext/GDBM_File/t/fatal.t +deleted file mode 100644 +index 0e426d4dbc..0000000000 +--- a/ext/GDBM_File/t/fatal.t ++++ /dev/null +@@ -1,49 +0,0 @@ +-#!./perl -w +-use strict; +- +-use Test::More; +-use Config; +- +-BEGIN { +- plan(skip_all => "GDBM_File was not built") +- unless $Config{extensions} =~ /\bGDBM_File\b/; +- +- # https://rt.perl.org/Public/Bug/Display.html?id=117967 +- plan(skip_all => "GDBM_File is flaky in $^O") +- if $^O =~ /darwin/; +- +- plan(tests => 8); +- use_ok('GDBM_File'); +-} +- +-unlink ; +- +-open my $fh, '<', $^X or die "Can't open $^X: $!"; +-my $fileno = fileno $fh; +-isnt($fileno, undef, "Can find next available file descriptor"); +-close $fh or die $!; +- +-is((open $fh, "<&=$fileno"), undef, +- "Check that we cannot open fileno $fileno. \$! is $!"); +- +-umask(0); +-my %h; +-isa_ok(tie(%h, 'GDBM_File', 'Op_dbmx', GDBM_WRCREAT, 0640), 'GDBM_File'); +- +-isnt((open $fh, "<&=$fileno"), undef, "dup fileno $fileno") +- or diag("\$! = $!"); +-isnt(close $fh, undef, +- "close fileno $fileno, out from underneath the GDBM_File"); +-is(eval { +- $h{Perl} = 'Rules'; +- untie %h; +- 1; +-}, undef, 'Trapped error when attempting to write to knobbled GDBM_File'); +- +-# Observed "File write error" and "lseek error" from two different systems. +-# So there might be more variants. Important part was that we trapped the error +-# via croak. +-like($@, qr/ at .*\bfatal\.t line \d+\.\n\z/, +- 'expected error message from GDBM_File'); +- +-unlink ; +-- +2.14.4 + diff --git a/perl-5.29.0-regexec.c-Call-macro-with-correct-args.patch b/perl-5.29.0-regexec.c-Call-macro-with-correct-args.patch new file mode 100644 index 0000000..cdecb18 --- /dev/null +++ b/perl-5.29.0-regexec.c-Call-macro-with-correct-args.patch @@ -0,0 +1,32 @@ +From e1a2878a55b1a7f11f19b384c4ea5235c29866b2 Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Mon, 11 Jun 2018 13:28:53 -0600 +Subject: [PATCH] regexec.c: Call macro with correct args. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The second argument to this macro is a pointer to the end, as opposed to +a length. + +Signed-off-by: Petr Písař +--- + regexec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/regexec.c b/regexec.c +index 7ed8f4fabc..ba52ae97c7 100644 +--- a/regexec.c ++++ b/regexec.c +@@ -1808,7 +1808,7 @@ STMT_START { + case trie_flu8: \ + _CHECK_AND_WARN_PROBLEMATIC_LOCALE; \ + if (UTF8_IS_ABOVE_LATIN1(*uc)) { \ +- _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(uc, uc_end - uc); \ ++ _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(uc, uc_end); \ + } \ + goto do_trie_utf8_fold; \ + case trie_utf8_exactfa_fold: \ +-- +2.14.4 + diff --git a/perl-5.31.5-PATCH-gh-17218-memory-leak.patch b/perl-5.31.5-PATCH-gh-17218-memory-leak.patch new file mode 100644 index 0000000..abb6223 --- /dev/null +++ b/perl-5.31.5-PATCH-gh-17218-memory-leak.patch @@ -0,0 +1,22 @@ +From 70f089724b15d1b2ed9264f277454aa559d50232 Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Fri, 15 Nov 2019 15:01:15 -0700 +Subject: [PATCH] PATCH: gh#17218 memory leak + +Indeed, a variable's ref count was not getting decremented. +--- + regcomp.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/regcomp.c b/regcomp.c +index ddac290d2bf0..de4f6f24dac8 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -17602,6 +17602,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth, + + /* Likewise for 'posixes' */ + _invlist_union(posixes, cp_list, &cp_list); ++ SvREFCNT_dec(posixes); + + /* Likewise for anything else in the range that matched only + * under UTF-8 */ diff --git a/perl-5.8.0-libdir64.patch b/perl-5.8.0-libdir64.patch new file mode 100644 index 0000000..0ab67a0 --- /dev/null +++ b/perl-5.8.0-libdir64.patch @@ -0,0 +1,46 @@ +--- perl-5.8.0/Configure.orig 2002-09-09 11:31:19.000000000 -0400 ++++ perl-5.8.0/Configure 2002-09-09 11:40:37.000000000 -0400 +@@ -6458,8 +6458,8 @@ + : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7. + case "$installstyle" in + '') case "$prefix" in +- *perl*) dflt='lib';; +- *) dflt='lib/perl5' ;; ++ *perl*) dflt='lib64';; ++ *) dflt='lib64/perl5' ;; + esac + ;; + *) dflt="$installstyle" ;; +@@ -6475,8 +6475,8 @@ + : /opt/perl/lib/perl5... would be redundant. + : The default "style" setting is made in installstyle.U + case "$installstyle" in +-*lib/perl5*) set dflt privlib lib/$package/$version ;; +-*) set dflt privlib lib/$version ;; ++*lib64/perl5*) set dflt privlib lib64/$package/$version ;; ++*) set dflt privlib lib64/$version ;; + esac + eval $prefixit + $cat <_PRINT_PREREQ; +- } ++ } ++ ++ # USE_MM_LD_RUN_PATH - another RedHatism to disable automatic RPATH generation ++ if ( ( ! $self->{USE_MM_LD_RUN_PATH} ) ++ &&( ("@ARGV" =~ /\bUSE_MM_LD_RUN_PATH(=([01]))?\b/) ++ ||( exists( $ENV{USE_MM_LD_RUN_PATH} ) ++ &&( $ENV{USE_MM_LD_RUN_PATH} =~ /([01])?$/ ) ++ ) ++ ) ++ ) ++ { ++ my $v = $1; ++ if( $v ) ++ { ++ $v = ($v=~/=([01])$/)[0]; ++ }else ++ { ++ $v = 1; ++ }; ++ $self->{USE_MM_LD_RUN_PATH}=$v; ++ }; + + print "MakeMaker (v$VERSION)\n" if $Verbose; + if (-f "MANIFEST" && ! -f "Makefile" && ! $UNDER_CORE){ +@@ -2352,6 +2372,40 @@ precedence. A typemap in the current di + precedence, even if it isn't listed in TYPEMAPS. The default system + typemap has lowest precedence. + ++=item USE_MM_LD_RUN_PATH ++ ++boolean ++The Fedora perl MakeMaker distribution differs from the standard ++upstream release in that it disables use of the MakeMaker generated ++LD_RUN_PATH by default, UNLESS this attribute is specified , or the ++USE_MM_LD_RUN_PATH environment variable is set during the MakeMaker run. ++ ++The upstream MakeMaker will set the ld(1) environment variable LD_RUN_PATH ++to the concatenation of every -L ld(1) option directory in which a -l ld(1) ++option library is found, which is used as the ld(1) -rpath option if none ++is specified. This means that, if your application builds shared libraries ++and your MakeMaker application links to them, that the absolute paths of the ++libraries in the build tree will be inserted into the RPATH header of all ++MakeMaker generated binaries, and that such binaries will be unable to link ++to these libraries if they do not still reside in the build tree directories ++(unlikely) or in the system library directories (/lib or /usr/lib), regardless ++of any LD_LIBRARY_PATH setting. So if you specified -L../mylib -lmylib , and ++ your 'libmylib.so' gets installed into /some_directory_other_than_usr_lib, ++ your MakeMaker application will be unable to link to it, even if LD_LIBRARY_PATH ++is set to include /some_directory_other_than_usr_lib, because RPATH overrides ++LD_LIBRARY_PATH. ++ ++So for Fedora MakeMaker builds LD_RUN_PATH is NOT generated by default for ++every link. You can still use explicit -rpath ld options or the LD_RUN_PATH ++environment variable during the build to generate an RPATH for the binaries. ++ ++You can set the USE_MM_LD_RUN_PATH attribute to 1 on the MakeMaker command ++line or in the WriteMakefile arguments to enable generation of LD_RUN_PATH ++for every link command. ++ ++USE_MM_LD_RUN_PATH will default to 1 (LD_RUN_PATH will be used) IF the ++$USE_MM_LD_RUN_PATH environment variable is set during a MakeMaker run. ++ + =item VENDORPREFIX + + Like PERLPREFIX, but only for the vendor install locations. +diff -up perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm.usem perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +--- perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm.usem 2011-05-08 05:10:08.000000000 +0200 ++++ perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm 2011-05-17 11:14:22.172115972 +0200 +@@ -944,7 +944,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $ + } + + my $ld_run_path_shell = ""; +- if ($self->{LD_RUN_PATH} ne "") { ++ if (($self->{LD_RUN_PATH} ne "") && ($self->{USE_MM_LD_RUN_PATH})) { + $ld_run_path_shell = 'LD_RUN_PATH="$(LD_RUN_PATH)" '; + } + diff --git a/perl-example.stp b/perl-example.stp new file mode 100644 index 0000000..040f8e3 --- /dev/null +++ b/perl-example.stp @@ -0,0 +1,21 @@ +/* + Example of the perl systemtap tapset shows a nested view of perl subroutine + calls and returns across the whole system. + + To run: + stap perl-example.stp (for all perl processes) + For specific perl process: + stap perl-example.stp -c COMMAND +*/ + +probe perl.sub.call +{ + printf("%s => sub: %s, filename: %s, line: %d, package: %s\n", + thread_indent(1), sub, filename, lineno, package) +} + +probe perl.sub.return +{ + printf("%s <= sub: %s, filename: %s, line: %d, package: %s\n", + thread_indent(-1), sub, filename, lineno, package) +} diff --git a/perl-perlbug-tag.patch b/perl-perlbug-tag.patch new file mode 100644 index 0000000..0f96ab3 --- /dev/null +++ b/perl-perlbug-tag.patch @@ -0,0 +1,21 @@ +diff -up perl-5.16.0-RC2/utils/perlbug.PL.fedora perl-5.16.0-RC2/utils/perlbug.PL +--- perl-5.16.0-RC2/utils/perlbug.PL.fedora 2012-05-16 16:15:51.000000000 +0200 ++++ perl-5.16.0-RC2/utils/perlbug.PL 2012-05-16 16:18:36.018894464 +0200 +@@ -271,17 +271,6 @@ sub Init { + $ok = ''; + if ($opt{o}) { + if ($opt{o} eq 'k' or $opt{o} eq 'kay') { +- my $age = time - $patchlevel_date; +- if ($opt{o} eq 'k' and $age > 60 * 24 * 60 * 60 ) { +- my $date = localtime $patchlevel_date; +- print <<"EOF"; +-"perlbug -ok" and "perlbug -nok" do not report on Perl versions which +-are more than 60 days old. This Perl version was constructed on +-$date. If you really want to report this, use +-"perlbug -okay" or "perlbug -nokay". +-EOF +- exit(); +- } + # force these options + unless ($opt{n}) { + $opt{S} = 1; # don't prompt for send diff --git a/perl.spec b/perl.spec new file mode 100644 index 0000000..b97a3d5 --- /dev/null +++ b/perl.spec @@ -0,0 +1,6908 @@ +%global perl_version 5.26.3 +%global perl_epoch 4 +%global perl_arch_stem -thread-multi +%global perl_archname %{_arch}-%{_os}%{perl_arch_stem} + +%global multilib_64_archs aarch64 %{power64} s390x sparc64 x86_64 +%global parallel_tests 1 +%global tapsetdir %{_datadir}/systemtap/tapset + +%global dual_life 0 +%global rebuild_from_scratch %{defined perl_bootstrap} + +# This overrides filters from build root (/usr/lib/rpm/macros.d/macros.perl) +# intentionally (unversioned perl(DB) is removed and versioned one is kept). +# Filter provides from *.pl files, bug #924938 +%global __provides_exclude_from .*%{_docdir}|.*%{perl_archlib}/.*\\.pl$|.*%{perl_privlib}/.*\\.pl$ +%global __requires_exclude_from %{_docdir} +%global __provides_exclude perl\\((VMS|Win32|BSD::|DB\\)$) +%global __requires_exclude perl\\((VMS|BSD::|Win32|Tk|Mac::|Your::Module::Here) +# same as we provide in /usr/lib/rpm/macros.d/macros.perl +%global perl5_testdir %{_libexecdir}/perl5-tests + +# Optional features +# We can bootstrap without gdbm +%bcond_without gdbm +# Support for groff, bug #135101 +%bcond_without perl_enables_groff +# Run syslog tests +%bcond_with perl_enables_syslog_test +# SystemTap support +%bcond_without perl_enables_systemtap +# <> operator uses File::Glob nowadays. CSH is not needed. +%bcond_with perl_enables_tcsh +# We can skip %%check phase +%bcond_without test + +Name: perl +# These are all found licenses. They are distributed among various +# subpackages. +# dist/Tie-File/lib/Tie/File.pm: GPLv2+ or Artistic +# cpan/Getopt-Long/lib/Getopt/Long.pm: GPLv2+ or Artistic +# cpan/Compress-Raw-Zlib/Zlib.xs: (GPL+ or Artistic) and zlib +# cpan/Digest-MD5/MD5.xs: (GPL+ or Artistic) and BSD +# cpan/Time-Piece/Piece.xs: (GPL+ or Artistic) and BSD +# dist/PathTools/Cwd.xs: (GPL+ or Artistic) and BSD +# util.c: (GPL+ or Artistic) and BSD +# cpan/perlfaq/lib/perlfaq4.pod: (GPL+ or Artistic) and Public Domain +# cpan/Test-Simple/lib/Test/Tutorial.pod: (GPL+ or Artistic) and +# Public Domain +# cpan/MIME-Base64/Base64.xs: (GPL+ or Artistic) and MIT +# cpan/Test-Simple/lib/ok.pm: CC0 +# cpan/Text-Tabs/lib/Text/Wrap.pm: TTWL +# cpan/Encode/bin/encguess: Artistic 2.0 +# cpan/libnet/lib/Net/libnetFAQ.pod: Artistic (CPAN RT#117888) +# cpan/Unicode-Collate/Collate/allkeys.txt: Unicode +# lib/unicore: UCD +# ext/SDBM_File/sdbm.{c,h}: Public domain +# regexec.c, regcomp.c: HSRL +# cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm: MIT (with +# exception for Perl) +# time64.c: MIT +# pod/perlpodstyle.pod: MIT +# pod/perlunicook.pod: (GPL+ or Artistic) and Public Domain +# pod/perlgpl.pod: GPL text +# pod/perlartistic.pod: Artistic text +# ext/File-Glob/bsd_glob.{c,h}: BSD +# Other files: GPL+ or Artistic +## Not is a binary package +# cpan/podlators/t/style/minimum-version.t MIT +# cpan/Term-ANSIColor/t/lib/Test/RRA/Config.pm: MIT +## Unbundled +# cpan/Compress-Raw-Bzip2/bzip2-src: BSD +# cpan/Compress-Raw-Zlib/zlib-src: zlib +## perl sub-package notice +# perluniprops.pod is generated from lib/unicore sources: UCD +# +# This sub-subpackage doesn't contain any copyrightable material. +# Nevertheless, it needs a License tag, so we'll use the generic +# "perl" license. +License: GPL+ or Artistic +Epoch: %{perl_epoch} +Version: %{perl_version} +# release number must be even higher, because dual-lived modules will be broken otherwise +Release: 421%{?dist} +Summary: Practical Extraction and Report Language +Url: http://www.perl.org/ +Source0: http://www.cpan.org/src/5.0/perl-%{perl_version}.tar.bz2 +Source3: macros.perl +#Systemtap tapset and example that make use of systemtap-sdt-devel +# build requirement. Written by lberk; Not yet upstream. +Source4: perl.stp +Source5: perl-example.stp +# Tom Christiansen confirms Pod::Html uses the same license as perl +Source6: Pod-Html-license-clarification + +# Pregenerated dependencies for bootstrap. +# If your RPM tool fails on including the source file, then you forgot to +# define _sourcedir macro to point to the directory with the sources. +Source7: gendep.macros +%if %{defined perl_bootstrap} +%include %{SOURCE7} +%endif + +# Removes date check, Fedora/RHEL specific +Patch1: perl-perlbug-tag.patch + +# Fedora/RHEL only (64bit only) +Patch3: perl-5.8.0-libdir64.patch + +# Fedora/RHEL specific (use libresolv instead of libbind), bug #151127 +Patch4: perl-5.10.0-libresolv.patch + +# FIXME: May need the "Fedora" references removed before upstreaming +# patches ExtUtils-MakeMaker +Patch5: perl-USE_MM_LD_RUN_PATH.patch + +# Provide maybe_command independently, bug #1129443 +Patch6: perl-5.22.1-Provide-ExtUtils-MM-methods-as-standalone-ExtUtils-M.patch + +# The Fedora builders started randomly failing this futime test +# only on x86_64, so we just don't run it. Works fine on normal +# systems. +Patch7: perl-5.10.0-x86_64-io-test-failure.patch + +# switch off test, which is failing only on koji (fork) +Patch8: perl-5.14.1-offtest.patch + +# Define SONAME for libperl.so +Patch15: perl-5.16.3-create_libperl_soname.patch + +# Install libperl.so to -Dshrpdir value +Patch16: perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch + +# Document Math::BigInt::CalcEmu requires Math::BigInt, rhbz#959096, +# CPAN RT#85015 +Patch22: perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch + +# Make *DBM_File desctructors thread-safe, bug #1107543, RT#61912 +Patch26: perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch + +# Replace ExtUtils::MakeMaker dependency with ExtUtils::MM::Utils. +# This allows not to require perl-devel. Bug #1129443 +Patch30: perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch + +# Make File::Glob more resistant against degenerative matching, RT#131211, +# in upstream after 5.27.0 +Patch31: perl-5.27.0-perl-131211-fixup-File-Glob-degenerate-matching.patch + +# Fix glob UTF-8 flag on a glob reassignment, RT#131263, +# in upstream after 5.27.0 +Patch36: perl-5.26.0-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch + +# Fix handling backslashes in PATH environment variable when executing +# "perl -S", RT#129183, in upstream after 5.27.0 +Patch38: perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch + +# Fix reporting malformed UTF-8 character, RT#131646, in upstream after 5.27.1 +Patch43: perl-5.27.1-t-lib-warnings-utf8-Fix-test.patch + +# Fix File::Glob rt131211.t test random failures, in upstream after 5.27.1 +Patch45: perl-5.27.1-File-Glob-tweak-rt131211.t-to-be-less-sensitive-on-w.patch + +# Fix t/op/hash.t test random failures, in upstream after 5.27.1 +Patch46: perl-5.26.0-t-op-hash.t-fixup-intermittently-failing-test.patch + +# Parse caret variables with subscripts as normal variables inside ${...} +# escaping, RT#131664, in upstream after 5.27.1 +Patch47: perl-5.26.2-RC1-Parse-caret-vars-with-subscripts-the-same-as-normal-.patch +Patch48: perl-5.26.2-RC1-add-an-additional-test-for-whitespace-tolerance-in-c.patch + +# Do not display too many bytes when reporting malformed UTF-8 character, +# in upstream after 5.27.1 +Patch49: perl-5.27.1-utf8n_to_uvchr-Don-t-display-too-many-bytes-in-msg.patch + +# Fix error message for "our sub foo::bar", RT#131679, in upstream after 5.27.1 +Patch51: perl-5.27.1-perl-131679-Fix-our-sub-foo-bar-message.patch + +# Fix executing arybase::_tie_it() in Safe compartement, RT#131588, +# not yet accepted by upstream +Patch52: perl-5.26.0-perl-131588-be-a-little-more-careful-in-arybase-_tie.patch + +# Fix splitting non-ASCII strings if unicode_strings feature is enabled, +# RT#130907 in upstream after 5.27.1 +Patch54: perl-5.27.1-RT-130907-Fix-the-Unicode-Bug-in-split.patch + +# Fix compiler warnings in code generated by ExtUtils::Constant, CPAN RT#63832, +# in upstream after 5.27.2 +Patch55: perl-5.27.2-Avoid-compiler-warnings-due-to-mismatched-types-in-p.patch + +# Fix compiler warnings in code generated by ExtUtils::Constant, CPAN RT#101487, +# in upstream after 5.27.2 +Patch56: perl-5.27.2-EU-Constant-avoid-uninit-warning.patch + +# Fix unreliable Time-HiRes tests, CPAN RT#122819, in Time-HiRes-1.9746 +Patch58: perl-5.26.0-Time-HiRes-Fix-unreliable-t-usleep.t-and-t-utime.t.patch + +# Fix Term::ReadLine not to create spurious &STDERR files, RT#132008, +# in upstream after 5.27.3 +Patch61: perl-5.27.3-perl-132008-try-to-prevent-the-similar-mistakes-in-t.patch + +# Fix an overflow when parsing a character range with no preceding character, +# RT#132245, in upstream after 5.27.5 +Patch64: perl-5.26.1-perl-132245-don-t-try-to-process-a-char-range-with-n.patch + +# Fix walking symbol table for ISA in Carp, in upstream after 5.27.5 +Patch65: perl-5.27.5-Carp-Don-t-choke-on-ISA-constant.patch + +# Fix handling file names with null bytes in stat and lstat functions, +# RT#131895, in upstream after 5.27.5 +Patch66: perl-5.26.1-perl-131895-fail-stat-on-names-with-0-embedded.patch + +# Fix a crash when untying an object witout a stash, in upstream after 5.27.5 +Patch67: perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch + +# Fix deparsing of transliterations with unprintable characters, RT#132405, +# in upstream after 5.27.5 +Patch68: perl-5.26.1-Fix-deparsing-of-transliterations-with-unprintable-c.patch + +# Fix error reporting on do() on a directory, RT#125774, +# in upstream after 5.27.5 +Patch69: perl-5.26.1-fix-do-dir-returning-no.patch + +# Fix stack manipulation when a lexical subroutine is defined in a do block in +# a member of an iteration list, RT#132442, in upstream after 5.27.5 +Patch70: perl-5.27.5-perl-132442-Fix-stack-with-do-my-sub-l-1.patch + +# Fix setting $! when statting a closed filehandle, RT#108288, +# in upstream after 5.27.5 +Patch71: perl-5.26.1-set-when-statting-a-closed-filehandle.patch + +# Fix tainting of s/// with overloaded replacement, RT#115266, +# in upstream after 5.27.5 +Patch72: perl-5.27.5-fix-tainting-of-s-with-overloaded-replacement.patch + +# Expand system() arguments before a fork, RT#121105, +# in upstream after 5.27.6 +Patch73: perl-5.26.2-RC1-perform-system-arg-processing-before-fork.patch +# in upstream after 5.27.7 +Patch74: perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch +Patch75: perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch + +# Avoid undefined behavior when copying memory in Glob and pp_caller, +# RT#131746, in upstream after 5.27.3 +Patch76: perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch +Patch77: perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch + +# Conditionalize a fix for an old and long fixed bug +# in libcrypt / glibc, rhbz#1536752, RT#133184, in upstream after 5.27.11 +Patch78: perl-5.26.1-guard_old_libcrypt_fix.patch + +# Link XS modules to pthread library to fix linking with -z defs, +# +Patch79: perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch + +# Fix parsing braced subscript after parentheses, RT#8045, +# in upstream after 5.27.7 +Patch80: perl-5.26.1-fix-parsing-of-braced-subscript-after-parens.patch + +# Do not clobber file bytes in :encoding layer, RT#132833, +# in upstream after 5.27.8 +Patch81: perl-5.27.8-don-t-clobber-file-bytes-in-encoding-layer.patch + +# Fix line numbers in multi-line s///, RT#131930, in upstream after 5.27.9 +Patch82: perl-5.27.9-fix-line-numbers-in-multi-line-s.patch + +# Fix parsing extended bracketed character classes, RT#132167, +# in upstream after 5.27.10 +Patch83: perl-5.27.10-PATCH-perl-132167-Parse-error-in-regex_sets.patch + +# Fix a possibly unitialized memory read in the Perl parser, RT#133074, +# in upstream after 5.27.10 +Patch84: perl-5.27.10-PATCH-perl-133074-5.26.1-some-coverity-fixes.patch + +# Fix an infinite loop in the regular expression compiler, RT#133185, +# in upstream after 5.27.11 +Patch85: perl-5.26.2-PATCH-perl-133185-Infinite-loop-in-qr.patch + +# Adjust tests to gdbm-1.15, RT#133295 +Patch86: perl-5.29.0-Remove-ext-GDBM_File-t-fatal.t.patch + +# Fix printing a warning about a wide character when matching a regular +# expression while ISO-8859-1 locale is in effect, in upstream after 5.29.0 +Patch88: perl-5.29.0-regexec.c-Call-macro-with-correct-args.patch + +# Fix invoking a check for wide characters while ISO-8859-1 locale is in effect, +# in upstream after 5.29.0 +Patch89: perl-5.26.2-perl.h-Add-parens-around-macro-arguments.patch + +# Pass the correct CFLAGS to dtrace +Patch90: perl-5.26.2-Pass-CFLAGS-to-dtrace.patch + +# Fix Time-Local tests to pass after year 2019, bug #1807120, CPAN RT#124787, +# GH#17410, in Time-Local-1.26 +Patch91: perl-5.28.2-Only-pass-2-digit-years-to-tests-when-testing-2-digi.patch + +# Fix CVE-2020-12723, bug #1839279, GH#16947, fixed in upstream 5.28.3, ported from +# upstream 3f4ba871d2d397dcd4386ed75e05353c36135c29. +Patch92: perl-5.26.3-CVE-2020-12723.patch + +# Fix CVE-2020-10543, bug #1839273, fixed in upstream 5.28.3 +# Fix heap buffer overflow in Perl's regular expression compiler +Patch93: perl-5.26.3-CVE-2020-10543.patch + +# Fix CVE-2020-10878, bug #1839276, fixed in upstream 5.28.3 +# Fix integer overflows in the calculation of offsets between instructions +# for the regex engine +Patch94: perl-5.26.3-CVE-2020-10878.patch + +# Fix bug #1973030, fixed in Net-Ping 2.68 +# Fixed _resolv return value on failing DNS name lookup +Patch95: perl-5.26.3-Net-Ping-carp-not-croak-on-most-name-lookup-failures.patch +Patch96: perl-5.26.3-Net-Ping-Fix-_resolv-return-value.patch + +# Fix a memory leak when compiling a regular expression with a non-word class, +# GH#17218, in upstream after 5.31.5 +Patch97: perl-5.31.5-PATCH-gh-17218-memory-leak.patch + +# Link XS modules to libperl.so with EU::CBuilder on Linux, bug #960048 +Patch200: perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch + +# Link XS modules to libperl.so with EU::MM on Linux, bug #960048 +Patch201: perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch + +# Update some of the bundled modules +# see http://fedoraproject.org/wiki/Perl/perl.spec for instructions + +BuildRequires: bash +BuildRequires: bzip2-devel +BuildRequires: coreutils +BuildRequires: findutils +BuildRequires: gcc +%if %{with gdbm} +BuildRequires: gdbm-devel +%endif +# glibc-common for iconv +BuildRequires: glibc-common +%if %{with perl_enables_groff} +# Build-require groff tools for populating %%Config correctly, bug #135101 +BuildRequires: groff-base +%endif +BuildRequires: libdb-devel +BuildRequires: make +%if !%{defined perl_bootstrap} +BuildRequires: perl-interpreter +BuildRequires: perl-generators +%endif +BuildRequires: sed +%if %{with perl_enables_systemtap} +BuildRequires: systemtap-sdt-devel +%endif +BuildRequires: tar +%if %{with perl_enables_tcsh} +BuildRequires: tcsh +%endif +BuildRequires: zlib-devel + +# For tests +%if %{with test} +BuildRequires: procps +%if %{with perl_enables_syslog_test} +BuildRequires: rsyslog +%endif +%endif + + +# compat macro needed for rebuild +%global perl_compat perl(:MODULE_COMPAT_5.26.3) + +Requires: %perl_compat +Requires: perl-interpreter%{?_isa} = %{perl_epoch}:%{perl_version}-%{release} +Requires: perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release} +Requires: perl-devel%{?_isa} = %{perl_epoch}:%{perl_version}-%{release} +Requires: perl-macros +Requires: perl-utils +%if %{defined perl_bootstrap} +%gendep_perl +%endif + +Requires: perl-Archive-Tar, perl-Attribute-Handlers, perl-autodie, +Requires: perl-B-Debug, perl-bignum +Requires: perl-Compress-Raw-Bzip2, +Requires: perl-Carp, perl-Compress-Raw-Zlib, perl-Config-Perl-V, +Requires: perl-constant, +Requires: perl-CPAN, perl-CPAN-Meta, perl-CPAN-Meta-Requirements, +Requires: perl-CPAN-Meta-YAML +Requires: perl-Data-Dumper, perl-DB_File, +Requires: perl-Devel-Peek, perl-Devel-PPPort, perl-Devel-SelfStubber, +Requires: perl-Digest, perl-Digest-MD5, +Requires: perl-Digest-SHA, +Requires: perl-Encode, perl-Encode-devel, perl-encoding +Requires: perl-Env, perl-Errno, perl-Exporter, perl-experimental +Requires: perl-ExtUtils-CBuilder, perl-ExtUtils-Command, +Requires: perl-ExtUtils-Embed, +Requires: perl-ExtUtils-Install, perl-ExtUtils-MakeMaker +Requires: perl-ExtUtils-Manifest, perl-ExtUtils-Miniperl +Requires: perl-ExtUtils-ParseXS, perl-File-Fetch +Requires: perl-File-Path, perl-File-Temp, perl-Filter, +Requires: perl-Filter-Simple, perl-Getopt-Long +Requires: perl-HTTP-Tiny, +Requires: perl-IO, perl-IO-Compress, perl-IO-Socket-IP +Requires: perl-IO-Zlib, perl-IPC-Cmd, perl-IPC-SysV, perl-JSON-PP +Requires: perl-libnet, perl-libnetcfg, +Requires: perl-Locale-Codes, perl-Locale-Maketext, +Requires: perl-Locale-Maketext-Simple +Requires: perl-Math-BigInt, perl-Math-BigInt-FastCalc, perl-Math-BigRat, +Requires: perl-Math-Complex, perl-Memoize, +Requires: perl-MIME-Base64, +Requires: perl-Module-CoreList, +Requires: perl-Module-CoreList-tools, perl-Module-Load +Requires: perl-Module-Load-Conditional, perl-Module-Loaded, +Requires: perl-Module-Metadata, perl-Net-Ping, +Requires: perl-open, perl-PathTools +Requires: perl-Params-Check +Requires: perl-perlfaq, +Requires: perl-PerlIO-via-QuotedPrint, perl-Perl-OSType +Requires: perl-Pod-Checker, perl-Pod-Escapes, perl-Pod-Html, +Requires: perl-Pod-Parser, perl-Pod-Perldoc, perl-Pod-Usage +Requires: perl-podlators, perl-Pod-Simple, perl-Scalar-List-Utils +Requires: perl-SelfLoader, perl-Socket, perl-Storable, perl-Sys-Syslog, +Requires: perl-Term-ANSIColor, perl-Term-Cap, +Requires: perl-Test, perl-Test-Harness, perl-Test-Simple +Requires: perl-Text-Balanced, perl-Text-ParseWords, perl-Text-Tabs+Wrap, +Requires: perl-Thread-Queue +Requires: perl-Time-HiRes +Requires: perl-Time-Local, perl-Time-Piece +Requires: perl-Unicode-Collate, perl-Unicode-Normalize, +Requires: perl-version, perl-threads, perl-threads-shared, perl-parent + +# Full EVR is for compatibility with systems that swapped perl and perl-core +# , +# bug #1464903. +Provides: perl-core = %{perl_version}-%{release} +Provides: perl-core%{?_isa} = %{perl_version}-%{release} +# perl was renamed to perl-interpreter and perl-core renamed to perl +Obsoletes: perl-core < 5.26.0-395 + + +%description +Perl is a high-level programming language with roots in C, sed, awk and shell +scripting. Perl is good at handling processes and files, and is especially +good at handling text. Perl's hallmarks are practicality and efficiency. +While it is used to do a lot of different things, Perl's most common +applications are system administration utilities and web programming. + +This is a metapackage with all the Perl bits and core modules that can be +found in the upstream tarball from perl.org. + +If you need only a specific feature, you can install a specific package +instead. E.g. to handle Perl scripts with %{_bindir}/perl interpreter, +install perl-interpreter package. See perl-interpreter description for more +details on the Perl decomposition into packages. + + +%package interpreter +Summary: Standalone executable Perl interpreter +License: (GPL+ or Artistic) and (GPLv2+ or Artistic) and BSD and Public Domain and UCD +# perl-interpreter denotes a package with the perl executable. +# Full EVR is for compatibility with systems that swapped perl and perl-core +# , +# bug #1464903. +Version: %{perl_version} +Epoch: %{perl_epoch} + +Requires: perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release} +# Require this till perl-interpreter sub-package provides any modules +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_interpreter +%endif + +# We need this to break the dependency loop, and ensure that perl-libs +# gets installed before perl-interpreter. +Requires(post): perl-libs +# Same as perl-libs. We need macros in basic buildroot, where Perl is only +# because of git. +Requires(post): perl-macros + +# File provides +Provides: perl(bytes_heavy.pl) +Provides: perl(dumpvar.pl) +Provides: perl(perl5db.pl) + +# suidperl isn't created by upstream since 5.12.0 +Obsoletes: perl-suidperl <= 4:5.12.2 +# perl was renamed to perl-interpreter and perl-core renamed to perl +# , +# bug #1464903. +Obsoletes: perl < 4:5.26.0-395 + + +%description interpreter +This is a Perl interpreter as a standalone executable %{_bindir}/perl +required for handling Perl scripts. It does not provide all the other Perl +modules or tools. + +Install this package if you want to program in Perl or enable your system to +handle Perl scripts with %{_bindir}/perl interpreter. + +If your script requires some Perl modules, you can install them with +"perl(MODULE)" where "MODULE" is a name of required module. E.g. install +"perl(Test::More)" to make Test::More Perl module available. + +If you need all the Perl modules that come with upstream Perl sources, so +called core modules, install perl package. + +If you only need perl run-time as a shared library, i.e. Perl interpreter +embedded into another application, the only essential package is perl-libs. + +Perl header files can be found in perl-devel package. + +Perl utils like "splain" or "perlbug" can be found in perl-utils package. + + +%package libs +Summary: The libraries for the perl run-time +License: (GPL+ or Artistic) and HSRL and MIT and UCD +# Compat provides +Provides: %perl_compat +Provides: perl(:MODULE_COMPAT_5.26.2) +Provides: perl(:MODULE_COMPAT_5.26.1) +Provides: perl(:MODULE_COMPAT_5.26.0) +# Interpreter version to fulfil required genersted from "require 5.006;" +Provides: perl(:VERSION) = %{perl_version} +# Integeres are 64-bit on all platforms +Provides: perl(:WITH_64BIT) +# Threading provides +Provides: perl(:WITH_ITHREADS) +Provides: perl(:WITH_THREADS) +# Largefile provides +Provides: perl(:WITH_LARGEFILES) +# PerlIO provides +Provides: perl(:WITH_PERLIO) +# Loaded by charnames, unicore/Name.pm does not declare unicore::Name module +Provides: perl(unicore::Name) +# Keep utf8 modules in perl-libs because a sole regular expression like /\pN/ +# causes loading utf8 and unicore/Heave.pl and unicore/lib files. +Provides: perl(utf8_heavy.pl) +# utf8 and utf8_heavy.pl require Carp, re, strict, warnings, XSLoader +Requires: perl(Carp) +# Encode is loaded in BOOT section of PerlIO::encoding +Requires: perl(Encode) +Requires: perl(Exporter) +# Term::Cap is optional +Requires: perl(XSLoader) +%if %{defined perl_bootstrap} +%gendep_perl_libs +%endif + +# Remove private redefinitions +# XSLoader redefines DynaLoader name space for compatibility, but does not +# load the DynaLoader.pm (though the DynaLoader.xs is compiled into libperl). +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\((charnames|DynaLoader)\\)$ + +%description libs +The is a perl run-time (interpreter as a shared library and include +directories). + + +%package devel +Summary: Header #files for use in perl development +# l1_char_class_tab.h is generated from lib/unicore sources: UCD +License: (GPL+ or Artistic) and UCD +%if %{with perl_enables_systemtap} +Requires: systemtap-sdt-devel +%endif +Requires: perl(ExtUtils::ParseXS) +Requires: %perl_compat +# Match library and header files when downgrading releases +Requires: perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release} +# Compiler and linker options stored into perl and used when building XS +# modules refer to hardering profiles like +# /usr/lib/rpm/redhat/redhat-hardened-cc1 that are delivered by +# redhat-rpm-config. Bug #1557667. +Requires: redhat-rpm-config +%if %{defined perl_bootstrap} +%gendep_perl_devel +%endif + +%description devel +This package contains header files and development modules. +Most perl packages will need to install perl-devel to build. + + +%package macros +Summary: Macros for rpmbuild +License: GPL+ or Artistic +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_macros +%endif + +%description macros +RPM macros that are handy when building binary RPM packages. + + +%package tests +Summary: The Perl test suite +License: GPL+ or Artistic +# right? +AutoReqProv: 0 +Requires: %perl_compat +# FIXME - note this will need to change when doing the core/minimal swizzle +Requires: perl +%if %{defined perl_bootstrap} +%gendep_perl_tests +%endif + +%description tests +This package contains the test suite included with Perl %{perl_version}. + +Install this if you want to test your Perl installation (binary and core +modules). + + +%package utils +Summary: Utilities packaged with the Perl distribution +License: GPL+ or Artistic +Epoch: 0 +Version: %{perl_version} +BuildArch: noarch +# Match library exactly for splain messages +Requires: perl-libs = %{perl_epoch}:%{perl_version}-%{release} +# Keep /usr/sbin/sendmail and Module::CoreList optional for the perlbug tool +%if %{defined perl_bootstrap} +%gendep_perl_utils +%endif +Conflicts: perl < 4:5.22.0-351 + +%description utils +Several utilities which come with Perl distribution like h2ph, perlbug, +perlthanks, pl2pm, and splain. Some utilities are provided by more specific +packages like perldoc by perl-Pod-Perldoc. + + +%if %{dual_life} || %{rebuild_from_scratch} +%package Archive-Tar +Summary: A module for Perl manipulation of .tar files +License: GPL+ or Artistic +Epoch: 0 +Version: 2.24 +BuildArch: noarch +Requires: %perl_compat +Requires: perl(IO::Zlib) >= 1.01 +# Optional run-time: +Requires: perl(IO::Compress::Bzip2) >= 2.015 +# IO::String not used if perl supports useperlio which is true +# Use Compress::Zlib's version for IO::Uncompress::Bunzip2 +Requires: perl(IO::Uncompress::Bunzip2) >= 2.015 +%if !%{defined perl_bootstrap} +Requires: perl(Text::Diff) +%endif +%if %{defined perl_bootstrap} +%gendep_perl_Archive_Tar +%endif + +%description Archive-Tar +Archive::Tar provides an object oriented mechanism for handling tar files. It +provides class methods for quick and easy files handling while also allowing +for the creation of tar file objects for custom manipulation. If you have the +IO::Zlib module installed, Archive::Tar will also support compressed or +gzipped tar files. +%endif + +%package Attribute-Handlers +Summary: Simpler definition of attribute handlers +License: GPL+ or Artistic +Epoch: 0 +Version: 0.99 +BuildArch: noarch +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Attribute_Handlers +%endif +Conflicts: perl < 4:5.22.0-351 + +%description Attribute-Handlers +This Perl module, when inherited by a package, allows that package's class to +define attribute handler subroutines for specific attributes. Variables and +subroutines subsequently defined in that package, or in packages derived from +that package may be given attributes with the same names as the attribute +handler subroutines, which will then be called in one of the compilation +phases (i.e. in a "BEGIN", "CHECK", "INIT", or "END" block). + +%if %{dual_life} || %{rebuild_from_scratch} +%package autodie +Summary: Replace functions with ones that succeed or die +License: GPL+ or Artistic +Epoch: 0 +Version: 2.29 +Requires: %perl_compat +BuildArch: noarch +Requires: perl(B) +Requires: perl(Fcntl) +Requires: perl(overload) +Requires: perl(POSIX) +%if %{defined perl_bootstrap} +%gendep_perl_autodie +%endif +Conflicts: perl < 4:5.16.2-259 + +%description autodie +The "autodie" and "Fatal" pragma provides a convenient way to replace +functions that normally return false on failure with equivalents that throw an +exception on failure. + +However "Fatal" has been obsoleted by the new autodie pragma. Please use +autodie in preference to "Fatal". +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package B-Debug +Summary: Walk Perl syntax tree, print debug information about op-codes +License: GPL+ or Artistic +Epoch: 0 +Version: 1.24 +Requires: %perl_compat +BuildArch: noarch +%if %{defined perl_bootstrap} +%gendep_perl_B_Debug +%endif +Conflicts: perl < 4:5.20.1-310 + +%description B-Debug +Walk Perl syntax tree and print debug information about op-codes. See +B::Concise and B::Terse for other details. + +%package bignum +Summary: Transparent big number support for Perl +License: GPL+ or Artistic +Epoch: 0 +Version: 0.47 +Requires: %perl_compat +Requires: perl(Carp) +# Math::BigInt::Lite is optional +Requires: perl(Math::BigRat) +Requires: perl(warnings) +BuildArch: noarch +%if %{defined perl_bootstrap} +%gendep_perl_bignum +%endif +Conflicts: perl < 4:5.22.0-348 + +%description bignum +This package attempts to make it easier to write scripts that use BigInts and +BigFloats in a transparent way. + +%package Carp +Summary: Alternative warn and die for modules +Epoch: 0 +# Real version 1.42 +Version: 1.42 +License: GPL+ or Artistic +Requires: %perl_compat +Provides: perl(Carp::Heavy) = %{version} +%if %{defined perl_bootstrap} +%gendep_perl_Carp +%endif +BuildArch: noarch + +# Do not export unversioned module +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(Carp\\)\\s*$ + +%description Carp +The Carp routines are useful in your own modules because they act like +die() or warn(), but with a message which is more likely to be useful to a +user of your module. In the case of cluck, confess, and longmess that +context is a summary of every call in the call-stack. For a shorter message +you can use carp or croak which report the error as being from where your +module was called. There is no guarantee that that is where the error was, +but it is a good educated guess. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Compress-Raw-Bzip2 +Summary: Low-Level Interface to bzip2 compression library +License: GPL+ or Artistic +Epoch: 0 +Version: 2.074 +Requires: perl(Exporter), perl(File::Temp) +%if %{defined perl_bootstrap} +%gendep_perl_Compress_Raw_Bzip2 +%endif + +%description Compress-Raw-Bzip2 +This module provides a Perl interface to the bzip2 compression library. +It is used by IO::Compress::Bzip2. + +%package Compress-Raw-Zlib +Summary: Low-Level Interface to the zlib compression library +License: (GPL+ or Artistic) and zlib +Epoch: 0 +Version: 2.074 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Compress_Raw_Zlib +%endif + +%description Compress-Raw-Zlib +This module provides a Perl interface to the zlib compression library. +It is used by IO::Compress::Zlib. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Config-Perl-V +Summary: Structured data retrieval of perl -V output +License: GPL+ or Artistic +Epoch: 0 +Version: 0.28 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Config_Perl_V +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-347 + +%description Config-Perl-V +The command "perl -V" will return you an excerpt from the %%Config::Config +hash combined with the output of "perl -V" that is not stored inside the hash, +but only available to the perl binary itself. This package provides Perl +module that will return you the output of "perl -V" in a structure. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package constant +Summary: Perl pragma to declare constants +License: GPL+ or Artistic +Epoch: 0 +Version: 1.33 +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_constant +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.3-264 + +%description constant +This pragma allows you to declare constants at compile-time: + +use constant PI => 4 * atan2(1, 1); + +When you declare a constant such as "PI" using the method shown above, +each machine your script runs upon can have as many digits of accuracy +as it can use. Also, your program will be easier to read, more likely +to be maintained (and maintained correctly), and far less likely to +send a space probe to the wrong planet because nobody noticed the one +equation in which you wrote 3.14195. + +When a constant is used in an expression, Perl replaces it with its +value at compile time, and may then optimize the expression further. +In particular, any code in an "if (CONSTANT)" block will be optimized +away if the constant is false. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package CPAN +Summary: Query, download and build perl modules from CPAN sites +License: GPL+ or Artistic +Epoch: 0 +Version: 2.18 +Requires: make +# Prefer Archive::Tar and Compress::Zlib over tar and gzip +Requires: perl(Archive::Tar) >= 1.50 +Requires: perl(base) +Requires: perl(Data::Dumper) +%if !%{defined perl_bootstrap} +Requires: perl(Devel::Size) +%endif +Requires: perl(ExtUtils::Manifest) +%if !%{defined perl_bootstrap} +Requires: perl(File::HomeDir) >= 0.65 +%endif +Requires: perl(File::Temp) >= 0.16 +Requires: perl(lib) +Requires: perl(Net::Config) +Requires: perl(Net::FTP) +Requires: perl(POSIX) +Requires: perl(Term::ReadLine) +%if !%{defined perl_bootstrap} +Requires: perl(URI) +Requires: perl(URI::Escape) +%endif +Requires: perl(User::pwent) +# Optional but higly recommended: +%if !%{defined perl_bootstrap} +Requires: perl(Archive::Zip) +Requires: perl(Compress::Bzip2) +Requires: perl(CPAN::Meta) >= 2.110350 +%endif +Requires: perl(Compress::Zlib) +Requires: perl(Digest::MD5) +# CPAN encourages Digest::SHA strongly because of integrity checks +Requires: perl(Digest::SHA) +Requires: perl(Dumpvalue) +Requires: perl(ExtUtils::CBuilder) +%if ! %{defined perl_bootstrap} +# Avoid circular deps local::lib -> Module::Install -> CPAN when bootstraping +# local::lib recommended by CPAN::FirstTime default choice, bug #1122498 +Requires: perl(local::lib) +%endif +Requires: perl(Module::Build) +%if ! %{defined perl_bootstrap} +Requires: perl(Text::Glob) +%endif +Requires: %perl_compat +Provides: cpan = %{version} +%if %{defined perl_bootstrap} +%gendep_perl_CPAN +%endif +BuildArch: noarch + +%description CPAN +The CPAN module automates or at least simplifies the make and install of +perl modules and extensions. It includes some primitive searching +capabilities and knows how to use LWP, HTTP::Tiny, Net::FTP and certain +external download clients to fetch distributions from the net. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package CPAN-Meta +Summary: Distribution metadata for a CPAN dist +Epoch: 0 +Version: 2.150010 +License: GPL+ or Artistic +Requires: %perl_compat +Requires: perl(CPAN::Meta::YAML) >= 0.011 +Requires: perl(Encode) +Requires: perl(JSON::PP) >= 2.27300 +%if %{defined perl_bootstrap} +%gendep_perl_CPAN_Meta +%endif +BuildArch: noarch + +%description CPAN-Meta +Software distributions released to the CPAN include a META.json or, for +older distributions, META.yml, which describes the distribution, its +contents, and the requirements for building and installing the +distribution. The data structure stored in the META.json file is described +in CPAN::Meta::Spec. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package CPAN-Meta-Requirements +Summary: Set of version requirements for a CPAN dist +Epoch: 0 +# Real version 2.140 +Version: 2.140 +License: GPL+ or Artistic +Requires: %perl_compat +BuildArch: noarch +# CPAN-Meta-Requirements used to have six decimal places +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(CPAN::Meta::Requirements\\) +Provides: perl(CPAN::Meta::Requirements) = %{version}000 +%if %{defined perl_bootstrap} +%gendep_perl_CPAN_Meta_Requirements +%endif + +%description CPAN-Meta-Requirements +A CPAN::Meta::Requirements object models a set of version constraints like +those specified in the META.yml or META.json files in CPAN distributions. +It can be built up by adding more and more constraints, and it will reduce +them to the simplest representation. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package CPAN-Meta-YAML +Version: 0.018 +Epoch: 0 +Summary: Read and write a subset of YAML for CPAN Meta files +License: GPL+ or Artistic +BuildArch: noarch +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_CPAN_Meta_YAML +%endif + +%description CPAN-Meta-YAML +This module implements a subset of the YAML specification for use in reading +and writing CPAN metadata files like META.yml and MYMETA.yml. It should not be +used for any other general YAML parsing or generation task. +%endif + + +%if %{dual_life} || %{rebuild_from_scratch} +%package Data-Dumper +Summary: Stringify perl data structures, suitable for printing and eval +License: GPL+ or Artistic +Epoch: 0 +Version: 2.167 +Requires: %perl_compat +Requires: perl(Scalar::Util) +Requires: perl(XSLoader) +%if %{defined perl_bootstrap} +%gendep_perl_Data_Dumper +%endif + +%description Data-Dumper +Given a list of scalars or reference variables, writes out their contents +in perl syntax. The references can also be objects. The content of each +variable is output in a single Perl statement. Handles self-referential +structures correctly. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package DB_File +Summary: Perl5 access to Berkeley DB version 1.x +License: GPL+ or Artistic +Epoch: 0 +Version: 1.840 +Requires: %perl_compat +Requires: perl(Fcntl) +Requires: perl(XSLoader) +%if %{defined perl_bootstrap} +%gendep_perl_DB_File +%endif +Conflicts: perl < 4:5.16.3-264 + +%description DB_File +DB_File is a module which allows Perl programs to make use of the facilities +provided by Berkeley DB version 1.x (if you have a newer version of DB, you +will be limited to functionality provided by interface of version 1.x). The +interface defined here mirrors the Berkeley DB interface closely. +%endif + +%package Devel-Peek +Summary: A data debugging tool for the XS programmer +License: GPL+ or Artistic +Epoch: 0 +Version: 1.26 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Devel_Peek +%endif +Conflicts: perl < 4:5.22.0-351 + +%description Devel-Peek +Devel::Peek contains functions which allows raw Perl data types to be +manipulated from a Perl script. This is used by those who do XS programming to +check that the data they are sending from C to Perl looks as they think it +should look. + +%if %{dual_life} || %{rebuild_from_scratch} +%package Devel-PPPort +Summary: Perl Pollution Portability header generator +License: GPL+ or Artistic +Epoch: 0 +Version: 3.35 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Devel_PPPort +%endif +Conflicts: perl < 4:5.20.1-310 + +%description Devel-PPPort +Perl's API has changed over time, gaining new features, new functions, +increasing its flexibility, and reducing the impact on the C name space +environment (reduced pollution). The header file written by this module, +typically ppport.h, attempts to bring some of the newer Perl API features +to older versions of Perl, so that you can worry less about keeping track +of old releases, but users can still reap the benefit. +%endif + +%package Devel-SelfStubber +Summary: Generate stubs for a SelfLoading module +License: GPL+ or Artistic +Epoch: 0 +Version: 1.06 +BuildArch: noarch +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Devel_SelfStubber +%endif +Conflicts: perl < 4:5.22.0-351 + +%description Devel-SelfStubber +Devel::SelfStubber prints the stubs you need to put in the module before the +__DATA__ token (or you can get it to print the entire module with stubs +correctly placed). The stubs ensure that if a method is called, it will get +loaded. They are needed specifically for inherited autoloaded methods. + +%if %{dual_life} || %{rebuild_from_scratch} +%package Digest +Summary: Modules that calculate message digests +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 0 +Version: 1.17 +BuildArch: noarch +Requires: %perl_compat +Requires: perl(MIME::Base64) +%if %{defined perl_bootstrap} +%gendep_perl_Digest +%endif + +%description Digest +The Digest:: modules calculate digests, also called "fingerprints" or +"hashes", of some data, called a message. The digest is (usually) +some small/fixed size string. The actual size of the digest depend of +the algorithm used. The message is simply a sequence of arbitrary +bytes or bits. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Digest-MD5 +Summary: Perl interface to the MD5 Algorithm +License: (GPL+ or Artistic) and BSD +# Epoch bump for clean upgrade over old standalone package +Epoch: 0 +Version: 2.55 +Requires: %perl_compat +Requires: perl(XSLoader) +# Recommended +Requires: perl(Digest::base) >= 1.00 +%if %{defined perl_bootstrap} +%gendep_perl_Digest_MD5 +%endif + +%description Digest-MD5 +The Digest::MD5 module allows you to use the RSA Data Security Inc. MD5 +Message Digest algorithm from within Perl programs. The algorithm takes as +input a message of arbitrary length and produces as output a 128-bit +"fingerprint" or "message digest" of the input. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Digest-SHA +Summary: Perl extension for SHA-1/224/256/384/512 +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 5.96 +Requires: %perl_compat +Requires: perl(Carp) +# Recommended +Requires: perl(Digest::base) +%if %{defined perl_bootstrap} +%gendep_perl_Digest_SHA +%endif + +%description Digest-SHA +Digest::SHA is a complete implementation of the NIST Secure Hash +Standard. It gives Perl programmers a convenient way to calculate +SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512 message digests. The +module can handle all types of input, including partial-byte data. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Encode +Summary: Character encodings in Perl +License: (GPL+ or Artistic) and Artistic 2.0 and UCD +Epoch: 4 +Version: 2.88 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Encode +%endif +Conflicts: perl < 4:5.16.2-256 + +%description Encode +The Encode module provides the interface between Perl strings and the rest +of the system. Perl strings are sequences of characters. + +%package encoding +Summary: Write your Perl script in non-ASCII or non-UTF-8 +License: GPL+ or Artistic +Epoch: 4 +Version: 2.19 +# Keeping this sub-package arch-specific because it installs files into +# arch-specific directories. +Requires: %perl_compat +Requires: perl(Carp) +# Config not needed on perl ≥ 5.008 +# Consider Filter::Util::Call as mandatory, bug #1165183, CPAN RT#100427 +Requires: perl(Filter::Util::Call) +# I18N::Langinfo is optional +# PerlIO::encoding is optional +Requires: perl(utf8) +%if %{defined perl_bootstrap} +%gendep_perl_encoding +%endif +Conflicts: perl-Encode < 2:2.60-314 + +%description encoding +With the encoding pragma, you can write your Perl script in any encoding you +like (so long as the Encode module supports it) and still enjoy Unicode +support. + +However, this encoding module is deprecated under perl 5.18. It uses +a mechanism provided by perl that is deprecated under 5.18 and higher, and may +be removed in a future version. + +The easiest and the best alternative is to write your script in UTF-8. + +%package Encode-devel +Summary: Character encodings in Perl +License: (GPL+ or Artistic) and UCD +Epoch: 4 +Version: 2.88 +Requires: %perl_compat +Requires: %{name}-Encode = %{epoch}:%{version}-%{release} +Recommends: perl-devel +%if %{defined perl_bootstrap} +%gendep_perl_Encode_devel +%endif +BuildArch: noarch + +%description Encode-devel +enc2xs builds a Perl extension for use by Encode from either Unicode Character +Mapping files (.ucm) or Tcl Encoding Files (.enc). You can use enc2xs to add +your own encoding to perl. No knowledge of XS is necessary. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Env +Summary: Perl module that imports environment variables as scalars or arrays +License: GPL+ or Artistic +Epoch: 0 +Version: 1.04 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Env +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.2-265 + +%description Env +Perl maintains environment variables in a special hash named %%ENV. For when +this access method is inconvenient, the Perl module Env allows environment +variables to be treated as scalar or array variables. +%endif + +%package Errno +Summary: System errno constants +License: GPL+ or Artistic +Epoch: 0 +Version: 1.28 +Requires: %perl_compat +# Errno.pm bakes in kernel version at build time and compares it against +# $Config{osvers} at run time. Match exact interpreter build. Bug #1393421. +Requires: perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release} +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_Errno +%endif +Conflicts: perl < 4:5.22.0-351 + +%description Errno +"Errno" defines and conditionally exports all the error constants defined in +your system "errno.h" include file. It has a single export tag, ":POSIX", +which will export all POSIX defined error numbers. + +%if %{dual_life} || %{rebuild_from_scratch} +%package experimental +Summary: Experimental features made easy +License: GPL+ or Artistic +Epoch: 0 +Version: 0.016 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_experimental +%endif +BuildArch: noarch +Conflicts: perl < 4:5.20.0-303 + +%description experimental +This pragma provides an easy and convenient way to enable or disable +experimental features. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Exporter +Summary: Implements default import method for modules +License: GPL+ or Artistic +Epoch: 0 +Version: 5.72 +Requires: %perl_compat +Requires: perl(Carp) >= 1.05 +%if %{defined perl_bootstrap} +%gendep_perl_Exporter +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.2-265 + +%description Exporter +The Exporter module implements an import method which allows a module to +export functions and variables to its users' name spaces. Many modules use +Exporter rather than implementing their own import method because Exporter +provides a highly flexible interface, with an implementation optimized for +the common case. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package ExtUtils-CBuilder +Summary: Compile and link C code for Perl modules +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 0.280225 +BuildArch: noarch +Requires: perl-devel +Requires: %perl_compat +Requires: perl(DynaLoader) +Requires: perl(ExtUtils::Mksymlists) +Requires: perl(File::Spec) >= 3.13 +Requires: perl(Perl::OSType) >= 1 +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_CBuilder +%endif + +%description ExtUtils-CBuilder +This module can build the C portions of Perl modules by invoking the +appropriate compilers and linkers in a cross-platform manner. It was motivated +by the Module::Build project, but may be useful for other purposes as well. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package ExtUtils-Command +Summary: Perl routines to replace common UNIX commands in Makefiles +License: GPL+ or Artistic +Epoch: 1 +Version: 7.24 +BuildArch: noarch +Requires: %perl_compat +Conflicts: perl < 4:5.20.1-312 +Requires: perl(File::Find) +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_Command +%endif + +%description ExtUtils-Command +This Perl module is used to replace common UNIX commands. In all cases the +functions work with @ARGV rather than taking arguments. This makes them +easier to deal with in Makefiles. +%endif + +%package ExtUtils-Embed +Summary: Utilities for embedding Perl in C/C++ applications +License: GPL+ or Artistic +Epoch: 0 +Version: 1.34 +Requires: perl-devel +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_Embed +%endif +BuildArch: noarch + +%description ExtUtils-Embed +Utilities for embedding Perl in C/C++ applications. + + +%if %{dual_life} || %{rebuild_from_scratch} +%package ExtUtils-Install +Summary: Install files from here to there +License: GPL+ or Artistic +Epoch: 0 +Version: 2.04 +BuildArch: noarch +Requires: %perl_compat +Requires: perl(Data::Dumper) +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_Install +%endif + +%description ExtUtils-Install +Handles the installing and uninstalling of perl modules, scripts, man +pages, etc. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package ExtUtils-MakeMaker +Summary: Create a module Makefile +License: GPL+ or Artistic +Epoch: 1 +Version: 7.24 +# If an XS module is built, code generated from XS will be compiled and it +# includes Perl header files. +# TODO: This dependency will be weaken in order to relieve building noarch +# packages from perl-devel and gcc. +Requires: perl-devel +Requires: %perl_compat +Requires: perl(Data::Dumper) +Requires: perl(DynaLoader) +Requires: perl(ExtUtils::Command) +Requires: perl(ExtUtils::Install) +Requires: perl(ExtUtils::Manifest) +Requires: perl(File::Find) +Requires: perl(Getopt::Long) +# Optional Pod::Man is needed for generating manual pages from POD +Requires: perl(Pod::Man) +Requires: perl(POSIX) +Requires: perl(Test::Harness) +Requires: perl(version) +# If an XS module is compiled, xsubpp(1) is needed +Requires: perl-ExtUtils-ParseXS +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_MakeMaker +%endif +BuildArch: noarch + +# Filter false DynaLoader provides. Versioned perl(DynaLoader) keeps +# unfiltered on perl package, no need to reinject it. +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(DynaLoader\\)\\s*$ +%global __provides_exclude %__provides_exclude|^perl\\(ExtUtils::MakeMaker::_version\\) + +%description ExtUtils-MakeMaker +Create a module Makefile. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package ExtUtils-Manifest +Summary: Utilities to write and check a MANIFEST file +License: GPL+ or Artistic +Epoch: 0 +Version: 1.70 +Requires: %perl_compat +Requires: perl(File::Path) +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_Manifest +%endif +BuildArch: noarch + +%description ExtUtils-Manifest +%{summary}. +%endif + +%package ExtUtils-Miniperl +Summary: Write the C code for perlmain.c +License: GPL+ or Artistic +Epoch: 0 +Version: 1.06 +Requires: perl-devel +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_Miniperl +%endif +BuildArch: noarch + +%description ExtUtils-Miniperl +writemain() takes an argument list of directories containing archive libraries +that relate to perl modules and should be linked into a new perl binary. It +writes a corresponding perlmain.c file that is a plain C file containing all +the bootstrap code to make the If the first argument to writemain() is a +reference to a scalar it is used as the file name to open for output. Any other +reference is used as the file handle to write to. Otherwise output defaults to +STDOUT. + +%if %{dual_life} || %{rebuild_from_scratch} +%package ExtUtils-MM-Utils +Summary: ExtUtils::MM methods without dependency on ExtUtils::MakeMaker +License: GPL+ or Artistic +Epoch: 1 +# Real version 7.11 +# Dual-life ExtUtils-MakeMaker generate it with its version +Version: 7.24 +BuildArch: noarch +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_MM_Utils +%endif + +%description ExtUtils-MM-Utils +This is a collection of ExtUtils::MM subroutines that are used by many +other modules but that do not need full-featured ExtUtils::MakeMaker. The +issue with ExtUtils::MakeMaker is it pulls in Perl header files and that +is an overkill for small subroutines. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package ExtUtils-ParseXS +Summary: Module and a script for converting Perl XS code into C code +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 3.34 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_ExtUtils_ParseXS +%endif +BuildArch: noarch + +%description ExtUtils-ParseXS +ExtUtils::ParseXS will compile XS code into C code by embedding the constructs +necessary to let C functions manipulate Perl values and creates the glue +necessary to let Perl access those functions. +%endif + + +%if %{dual_life} || %{rebuild_from_scratch} +%package File-Fetch +Summary: Generic file fetching mechanism +License: GPL+ or Artistic +Epoch: 0 +Version: 0.52 +Requires: perl(IPC::Cmd) >= 0.36 +Requires: perl(Module::Load::Conditional) >= 0.04 +Requires: perl(Params::Check) >= 0.07 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_File_Fetch +%endif +BuildArch: noarch + +%description File-Fetch +File::Fetch is a generic file fetching mechanism. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package File-Path +Summary: Create or remove directory trees +License: GPL+ or Artistic +Epoch: 0 +Version: 2.12 +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_File_Path +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.2-265 + +%description File-Path +This module provides a convenient way to create directories of arbitrary +depth and to delete an entire directory subtree from the file system. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package File-Temp +Summary: Return name and handle of a temporary file safely +License: GPL+ or Artistic +Epoch: 0 +# Normalized version +Version: 0.230.400 +Requires: %perl_compat +BuildArch: noarch +Requires: perl(File::Path) >= 2.06 +Requires: perl(POSIX) +%if %{defined perl_bootstrap} +%gendep_perl_File_Temp +%endif +Conflicts: perl < 4:5.16.2-265 + +%description File-Temp +File::Temp can be used to create and open temporary files in a safe way. +There is both a function interface and an object-oriented interface. The +File::Temp constructor or the tempfile() function can be used to return the +name and the open file handle of a temporary file. The tempdir() function +can be used to create a temporary directory. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +# FIXME Filter-Simple? version? +%package Filter +Summary: Perl source filters +License: GPL+ or Artistic +Epoch: 2 +Version: 1.55 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Filter +%endif + +%description Filter +Source filters alter the program text of a module before Perl sees it, much as +a C preprocessor alters the source text of a C program before the compiler +sees it. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Filter-Simple +Summary: Simplified Perl source filtering +License: GPL+ or Artistic +Epoch: 0 +Version: 0.93 +BuildArch: noarch +Requires: %perl_compat +Conflicts: perl < 4:5.20.1-312 +Requires: perl(Text::Balanced) >= 1.97 +Requires: perl(warnings) +%if %{defined perl_bootstrap} +%gendep_perl_Filter_Simple +%endif + +%description Filter-Simple +The Filter::Simple Perl module provides a simplified interface to +Filter::Util::Call; one that is sufficient for most common cases. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Getopt-Long +Summary: Extended processing of command line options +License: GPLv2+ or Artistic +Epoch: 1 +Version: 2.49 +Requires: %perl_compat +Requires: perl(overload) +Requires: perl(Text::ParseWords) +# Recommended: +Requires: perl(Pod::Usage) >= 1.14 +%if %{defined perl_bootstrap} +%gendep_perl_Getopt_Long +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.3-268 + +%description Getopt-Long +The Getopt::Long module implements an extended getopt function called +GetOptions(). It parses the command line from @ARGV, recognizing and removing +specified options and their possible values. It adheres to the POSIX syntax +for command line options, with GNU extensions. In general, this means that +options have long names instead of single letters, and are introduced with +a double dash "--". Support for bundling of command line options, as was the +case with the more traditional single-letter approach, is provided but not +enabled by default. +%endif + +%package IO +Summary: Perl input/output modules +License: GPL+ or Artistic +Epoch: 0 +Version: 1.38 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_IO +%endif +Conflicts: perl < 4:5.22.0-351 + +%description IO +This is a collection of Perl input/output modules. + +%if %{dual_life} || %{rebuild_from_scratch} +%package IO-Compress +Summary: IO::Compress wrapper for modules +License: GPL+ or Artistic +Epoch: 0 +Version: 2.074 +Requires: %perl_compat +Obsoletes: perl-Compress-Zlib <= 2.020 +Provides: perl(IO::Uncompress::Bunzip2) +%if %{defined perl_bootstrap} +%gendep_perl_IO_Compress +%endif +BuildArch: noarch + +%description IO-Compress +This module is the base class for all IO::Compress and IO::Uncompress modules. +This module is not intended for direct use in application code. Its sole +purpose is to to be sub-classed by IO::Compress modules. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package IO-Socket-IP +Summary: Drop-in replacement for IO::Socket::INET supporting both IPv4 and IPv6 +License: GPL+ or Artistic +Epoch: 0 +Version: 0.38 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_IO_Socket_IP +%endif +BuildArch: noarch +Conflicts: perl < 4:5.20.0-303 + +%description IO-Socket-IP +This module provides a protocol-independent way to use IPv4 and IPv6 +sockets, as a drop-in replacement for IO::Socket::INET. Most constructor +arguments and methods are provided in a backward-compatible way. +%endif + +%package IO-Zlib +Summary: Perl IO:: style interface to Compress::Zlib +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 1.10 +Requires: perl(Compress::Zlib) +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_IO_Zlib +%endif +BuildArch: noarch + +%description IO-Zlib +This modules provides an IO:: style interface to the Compress::Zlib package. +The main advantage is that you can use an IO::Zlib object in much the same way +as an IO::File object so you can have common code that doesn't know which sort +of file it is using. + + +%if %{dual_life} || %{rebuild_from_scratch} +%package IPC-Cmd +Summary: Finding and running system commands made easy +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 2 +Version: 0.96 +Requires: perl(ExtUtils::MM::Utils) +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_IPC_Cmd +%endif +BuildArch: noarch + +%description IPC-Cmd +IPC::Cmd allows you to run commands, interactively if desired, in a platform +independent way, but have them still work. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package IPC-SysV +Summary: Object interface to System V IPC +License: GPL+ or Artistic +Epoch: 0 +Version: 2.07 +Requires: %perl_compat +Requires: perl(DynaLoader) +%if %{defined perl_bootstrap} +%gendep_perl_IPC_SysV +%endif +Conflicts: perl < 4:5.22.0-351 + +%description IPC-SysV +This is an object interface for System V messages, semaphores, and +inter-process calls. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package HTTP-Tiny +Summary: A small, simple, correct HTTP/1.1 client +License: GPL+ or Artistic +Epoch: 0 +Version: 0.070 +Requires: perl(bytes) +Requires: perl(Carp) +Requires: perl(IO::Socket) +Requires: perl(Time::Local) +%if %{defined perl_bootstrap} +%gendep_perl_HTTP_Tiny +%endif +BuildArch: noarch + +%description HTTP-Tiny +This is a very simple HTTP/1.1 client, designed primarily for doing simple GET +requests without the overhead of a large framework like LWP::UserAgent. +It is more correct and more complete than HTTP::Lite. It supports proxies +(currently only non-authenticating ones) and redirection. It also correctly +resumes after EINTR. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package JSON-PP +Summary: JSON::XS compatible pure-Perl module +Epoch: 1 +# Real version 2.27400 +Version: 2.27.400 +License: GPL+ or Artistic +BuildArch: noarch +Requires: %perl_compat +Requires: perl(Data::Dumper) +Requires: perl(Encode) +Requires: perl(Math::BigFloat) +Requires: perl(Math::BigInt) +Requires: perl(Scalar::Util) +Requires: perl(subs) +%if %{defined perl_bootstrap} +%gendep_perl_JSON_PP +%endif +Conflicts: perl-JSON < 2.50 + +%description JSON-PP +JSON::XS is the fastest and most proper JSON module on CPAN. It is written by +Marc Lehmann in C, so must be compiled and installed in the used environment. +JSON::PP is a pure-Perl module and is compatible with JSON::XS. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package libnet +Summary: Perl clients for various network protocols +License: (GPL+ or Artistic) and Artistic +Epoch: 0 +Version: 3.10 +Requires: %perl_compat +Requires: perl(File::Basename) +Requires: perl(IO::Socket) >= 1.05 +# Prefer IO::Socket::IP over IO::Socket::INET6 and IO::Socket::INET +Requires: perl(IO::Socket::IP) >= 0.20 +Requires: perl(POSIX) +Requires: perl(Socket) >= 2.016 +Requires: perl(utf8) +%if %{defined perl_bootstrap} +%gendep_perl_libnet +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-347 + +%description libnet +This is a collection of Perl modules which provides a simple and +consistent programming interface (API) to the client side of various +protocols used in the internet community. +%endif + +%package libnetcfg +Summary: Configure libnet +License: GPL+ or Artistic +Epoch: %perl_epoch +Version: %perl_version +# Net::Config is optional +BuildArch: noarch +%if %{defined perl_bootstrap} +%gendep_perl_libnetcfg +%endif +Conflicts: perl-devel < 4:5.22.0-347 + +%description libnetcfg +The libnetcfg utility can be used to configure the libnet. + +%if %{dual_life} || %{rebuild_from_scratch} +%package Locale-Codes +Summary: Distribution of modules to handle locale codes +Epoch: 0 +Version: 3.25 +License: GPL+ or Artistic +Requires: %perl_compat +Requires: perl(constant) +Provides: perl(Locale::Codes) = %{version} +%if %{defined perl_bootstrap} +%gendep_perl_Locale_Codes +%endif +BuildArch: noarch + +# Do not export unversioned module +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(Locale::Codes\\)\\s*$ + +# Filter dependencies on private modules. Generator: +# for F in $(find lib -type f); do perl -e '$/ = undef; $_ = <>; if (/^package #\R([\w:]*);/m) { print qq{|^perl\\\\($1\\\\)} }' "$F"; done +%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\(Locale::Codes::Country_Retired\\)|^perl\\(Locale::Codes::LangFam_Retired\\)|^perl\\(Locale::Codes::Script_Retired\\)|^perl\\(Locale::Codes::LangExt_Codes\\)|^perl\\(Locale::Codes::LangFam_Codes\\)|^perl\\(Locale::Codes::Script_Codes\\)|^perl\\(Locale::Codes::Language_Codes\\)|^perl\\(Locale::Codes::LangExt_Retired\\)|^perl\\(Locale::Codes::Currency_Codes\\)|^perl\\(Locale::Codes::LangVar_Retired\\)|^perl\\(Locale::Codes::Language_Retired\\)|^perl\\(Locale::Codes::Country_Codes\\)|^perl\\(Locale::Codes::LangVar_Codes\\)|^perl\\(Locale::Codes::Currency_Retired\\) + +%description Locale-Codes +Locale-Codes is a distribution containing a set of modules. The modules +each deal with different types of codes which identify parts of the locale +including languages, countries, currency, etc. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Locale-Maketext +Summary: Framework for localization +License: GPL+ or Artistic +Epoch: 0 +Version: 1.28 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Locale_Maketext +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.3-268 + +%description Locale-Maketext +It is a common feature of applications (whether run directly, or via the Web) +for them to be "localized" -- i.e., for them to present an English interface +to an English-speaker, a German interface to a German-speaker, and so on for +all languages it's programmed with. Locale::Maketext is a framework for +software localization; it provides you with the tools for organizing and +accessing the bits of text and text-processing code that you need for +producing localized applications. +%endif + +%package Locale-Maketext-Simple +Summary: Simple interface to Locale::Maketext::Lexicon +License: MIT +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 0.21 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Locale_Maketext_Simple +%endif +BuildArch: noarch + +%description Locale-Maketext-Simple +This module is a simple wrapper around Locale::Maketext::Lexicon, designed +to alleviate the need of creating Language Classes for module authors. + +%if %{dual_life} || %{rebuild_from_scratch} +%package Math-BigInt +Summary: Arbitrary-size integer and float mathematics +License: GPL+ or Artistic +Epoch: 1 +# Real version 1.999806 +Version: 1.9998.06 +Requires: %perl_compat +Requires: perl(Carp) +# File::Spec not used on recent perl +%if %{defined perl_bootstrap} +%gendep_perl_Math_BigInt +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-347 + +# Do not export unversioned module +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(Math::BigInt\\)\\s*$ + +%description Math-BigInt +This provides Perl modules for arbitrary-size integer and float mathematics. + +%package Math-BigInt-FastCalc +Summary: Math::BigInt::Calc XS implementation +License: GPL+ or Artistic +Epoch: 0 +# Version normalized to dot format +# Real version 0.5005 +Version: 0.500.500 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Math_BigInt_FastCalc +%endif +Conflicts: perl < 4:5.22.0-348 + +%description Math-BigInt-FastCalc +This package provides support for faster big integer calculations. + +%package Math-BigRat +Summary: Arbitrary big rational numbers +License: GPL+ or Artistic +Epoch: 0 +# Real version 0.2611 +Version: 0.2611 +Requires: %perl_compat +Requires: perl(Math::BigInt) +%if %{defined perl_bootstrap} +%gendep_perl_Math_BigRat +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-348 + +%description Math-BigRat +Math::BigRat complements Math::BigInt and Math::BigFloat by providing support +for arbitrary big rational numbers. +%endif + +%package Math-Complex +Summary: Complex numbers and trigonometric functions +License: GPL+ or Artistic +Epoch: 0 +Version: 1.59 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Math_Complex +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-348 + +%description Math-Complex +This package lets you create and manipulate complex numbers. By default, Perl +limits itself to real numbers, but an extra "use" statement brings full +complex support, along with a full set of mathematical functions typically +associated with and/or extended to complex numbers. + +%package Memoize +Summary: Transparently speed up functions by caching return values +License: GPL+ or Artistic +Epoch: 0 +Version: 1.03 +Requires: %perl_compat +# Keep Time::HiRes optional +%if %{defined perl_bootstrap} +%gendep_perl_Memoize +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-350 + +%description Memoize +Memoizing a function makes it faster by trading space for time. It does +this by caching the return values of the function in a table. If you call +the function again with the same arguments, memoize jumps in and gives +you the value out of the table, instead of letting the function compute +the value all over again. + +%if %{dual_life} || %{rebuild_from_scratch} +%package MIME-Base64 +Summary: Encoding and decoding of Base64 and quoted-printable strings +# cpan/MIME-Base64/Base64.xs: (GPL+ or Artistic) and MIT (Bellcore's part) +# Other files: GPL+ or Artistic +License: (GPL+ or Artistic) and MIT +Epoch: 0 +Version: 3.15 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_MIME_Base64 +%endif +Conflicts: perl < 4:5.22.0-347 + +%description MIME-Base64 +This package contains a Base64 encoder/decoder and a quoted-printable +encoder/decoder. These encoding methods are specified in RFC 2045 - MIME +(Multipurpose Internet Mail Extensions). +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Module-CoreList +Summary: What modules are shipped with versions of perl +License: GPL+ or Artistic +Epoch: 1 +# Real version 5.20181129_26 +Version: 5.20181129 +Requires: %perl_compat +Requires: perl(List::Util) +Requires: perl(version) >= 0.88 +%if %{defined perl_bootstrap} +%gendep_perl_Module_CoreList +%endif +BuildArch: noarch + +%description Module-CoreList +Module::CoreList provides information on which core and dual-life modules +are shipped with each version of perl. + + +%package Module-CoreList-tools +Summary: Tool for listing modules shipped with perl +License: GPL+ or Artistic +Epoch: 1 +# Real version 5.20181129_26 +Version: 5.20181129 +Requires: %perl_compat +Requires: perl(feature) +Requires: perl(version) >= 0.88 +Requires: perl-Module-CoreList = %{epoch}:%{version}-%{release} +%if %{defined perl_bootstrap} +%gendep_perl_Module_CoreList_tools +%endif +# The files were distributed with perl.spec's subpackage +# perl-Module-CoreList <= 1:5.020001-309 +Conflicts: perl-Module-CoreList < 1:5.020001-310 +BuildArch: noarch + +%description Module-CoreList-tools +This package provides a corelist(1) tool which can be used to query what +modules were shipped with given perl version. +%endif + + +%if %{dual_life} || %{rebuild_from_scratch} +%package Module-Load +Summary: Runtime require of both modules and files +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 0.32 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Module_Load +%endif +BuildArch: noarch + +%description Module-Load +Module::Load eliminates the need to know whether you are trying to require +either a file or a module. +%endif + + +%if %{dual_life} || %{rebuild_from_scratch} +%package Module-Load-Conditional +Summary: Looking up module information / loading at runtime +License: GPL+ or Artistic +Epoch: 0 +Version: 0.68 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Module_Load_Conditional +%endif +BuildArch: noarch + +%description Module-Load-Conditional +Module::Load::Conditional provides simple ways to query and possibly load any +of the modules you have installed on your system during runtime. +%endif + + +%package Module-Loaded +Summary: Mark modules as loaded or unloaded +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 0.08 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Module_Loaded +%endif +BuildArch: noarch + +%description Module-Loaded +When testing applications, often you find yourself needing to provide +functionality in your test environment that would usually be provided by +external modules. Rather than munging the %%INC by hand to mark these external +modules as loaded, so they are not attempted to be loaded by perl, this module +offers you a very simple way to mark modules as loaded and/or unloaded. + + +%if %{dual_life} || %{rebuild_from_scratch} +%package Module-Metadata +Summary: Gather package and POD information from perl module files +Epoch: 0 +Version: 1.000033 +License: GPL+ or Artistic +BuildArch: noarch +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Module_Metadata +%endif + +%description Module-Metadata +Gather package and POD information from perl module files +%endif + +%package Net-Ping +Summary: Check a remote host for reachability +License: GPL+ or Artistic +Epoch: 0 +Version: 2.55 +Requires: %perl_compat +# Keep Net::Ping::External optional +%if %{defined perl_bootstrap} +%gendep_perl_Net_Ping +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-350 + +%description Net-Ping +Net::Ping module contains methods to test the reachability of remote hosts on +a network. + +%package open +Summary: Perl pragma to set default PerlIO layers for input and output +License: GPL+ or Artistic +Epoch: 0 +Version: 1.11 +Requires: %perl_compat +Requires: perl(Carp) +Requires: perl(Encode) +Requires: perl(encoding) +%if %{defined perl_bootstrap} +%gendep_perl_open +%endif +Conflicts: perl < 4:5.20.2-326 +BuildArch: noarch + +%description open +The "open" pragma serves as one of the interfaces to declare default "layers" +(also known as "disciplines") for all I/O. + +%if %{dual_life} || %{rebuild_from_scratch} +%package parent +Summary: Establish an ISA relationship with base classes at compile time +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 0.236 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_parent +%endif +BuildArch: noarch + +%description parent +parent allows you to both load one or more modules, while setting up +inheritance from those modules at the same time. Mostly similar in effect to: + + package Baz; + + BEGIN { + require Foo; + require Bar; + + push @ISA, qw(Foo Bar); + } +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Params-Check +Summary: Generic input parsing/checking mechanism +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 0.38 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Params_Check +%endif +BuildArch: noarch + +%description Params-Check +Params::Check is a generic input parsing/checking mechanism. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package PathTools +Summary: PathTools Perl module (Cwd, File::Spec) +License: (GPL+ or Artistic) and BSD +Epoch: 0 +Version: 3.67 +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_PathTools +%endif + +%description PathTools +PathTools Perl module (Cwd, File::Spec). +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package perlfaq +Summary: Frequently asked questions about Perl +# Code examples are Public Domain +License: (GPL+ or Artistic) and Public Domain +Epoch: 0 +Version: 5.021011 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_perlfaq +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-347 + +%description perlfaq +The perlfaq comprises several documents that answer the most commonly asked +questions about Perl and Perl programming. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package PerlIO-via-QuotedPrint +Summary: PerlIO layer for quoted-printable strings +License: GPL+ or Artistic +Epoch: 0 +Version: 0.08 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_PerlIO_via_QuotedPrint +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-347 + +%description PerlIO-via-QuotedPrint +This module implements a PerlIO layer that works on files encoded in the +quoted-printable format. It will decode from quoted-printable while +reading from a handle, and it will encode as quoted-printable while +writing to a handle. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Perl-OSType +Summary: Map Perl operating system names to generic types +Version: 1.010 +Epoch: 0 +License: GPL+ or Artistic +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Perl_OSType +%endif +BuildArch: noarch + +%description Perl-OSType +Modules that provide OS-specific behaviors often need to know if the current +operating system matches a more generic type of operating systems. For example, +'linux' is a type of 'Unix' operating system and so is 'freebsd'. +This module provides a mapping between an operating system name as given by $^O +and a more generic type. The initial version is based on the OS type mappings +provided in Module::Build and ExtUtils::CBuilder (thus, Microsoft operating +systems are given the type 'Windows' rather than 'Win32'). +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Pod-Checker +Summary: Check POD documents for syntax errors +Epoch: 4 +Version: 1.73 +License: GPL+ or Artistic +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Pod_Checker +%endif +BuildArch: noarch + +%description Pod-Checker +Module and tools to verify POD documentation contents for compliance with the +Plain Old Documentation format specifications. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Pod-Escapes +Summary: Resolve POD escape sequences +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 1.07 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Pod_Escapes +%endif +BuildArch: noarch + +%description Pod-Escapes +This module provides things that are useful in decoding Pod E<...> sequences. +%endif + +%package Pod-Html +Summary: Convert POD files to HTML +License: GPL+ or Artistic +Epoch: 0 +# Real version 1.2202 +Version: 1.22.02 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Pod_Html +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-350 + +%description Pod-Html +This package converts files from POD format (see perlpod) to HTML format. It +can automatically generate indexes and cross-references, and it keeps a cache +of things it knows how to cross-reference. + +%if %{dual_life} || %{rebuild_from_scratch} +%package Pod-Parser +Summary: Basic perl modules for handling Plain Old Documentation (POD) +License: GPL+ or Artistic +Epoch: 0 +Version: 1.63 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Pod_Parser +%endif +BuildArch: noarch + +%description Pod-Parser +This software distribution contains the packages for using Perl5 POD (Plain +Old Documentation). See the "perlpod" and "perlsyn" manual pages from your +Perl5 distribution for more information about POD. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Pod-Perldoc +Summary: Look up Perl documentation in Pod format +License: GPL+ or Artistic +Epoch: 0 +Version: 3.28 +%if %{with perl_enables_groff} +# Pod::Perldoc::ToMan executes roff +Requires: groff-base +%endif +Requires: %perl_compat +Requires: perl(File::Temp) >= 0.22 +Requires: perl(HTTP::Tiny) +Requires: perl(IO::Handle) +Requires: perl(IPC::Open3) +# POD2::Base is optional +# Pod::Checker is not needed if Pod::Simple::Checker is available +Requires: perl(Pod::Simple::Checker) +Requires: perl(Pod::Simple::RTF) >= 3.16 +Requires: perl(Pod::Simple::XMLOutStream) >= 3.16 +Requires: perl(Text::ParseWords) +# Tk is optional +Requires: perl(Symbol) +%if %{defined perl_bootstrap} +%gendep_perl_Pod_Perldoc +%endif +BuildArch: noarch + +%description Pod-Perldoc +perldoc looks up a piece of documentation in .pod format that is embedded +in the perl installation tree or in a perl script, and displays it via +"groff -man | $PAGER". This is primarily used for the documentation for +the perl library modules. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Pod-Simple +Summary: Framework for parsing POD documentation +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 1 +Version: 3.35 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Pod_Simple +%endif +BuildArch: noarch + +%description Pod-Simple +Pod::Simple is a Perl library for parsing text in the Pod ("plain old +documentation") markup language that is typically used for writing +documentation for Perl and for Perl modules. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Pod-Usage +Summary: Print a usage message from embedded pod documentation +License: GPL+ or Artistic +Epoch: 4 +Version: 1.69 +Requires: %perl_compat +# Pod::Usage executes perldoc from perl-Pod-Perldoc by default +Requires: perl-Pod-Perldoc +Requires: perl(Pod::Text) +%if %{defined perl_bootstrap} +%gendep_perl_Pod_Usage +%endif +BuildArch: noarch + +%description Pod-Usage +pod2usage will print a usage message for the invoking script (using its +embedded POD documentation) and then exit the script with the desired exit +status. The usage message printed may have any one of three levels of +"verboseness": If the verbose level is 0, then only a synopsis is printed. +If the verbose level is 1, then the synopsis is printed along with a +description (if present) of the command line options and arguments. If the +verbose level is 2, then the entire manual page is printed. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package podlators +Summary: Format POD source into various output formats +License: (GPL+ or Artistic) and MIT +Epoch: 0 +Version: 4.09 +BuildArch: noarch +Requires: %perl_compat +Requires: perl(File::Spec) >= 0.8 +Requires: perl(Pod::Simple) >= 3.06 +%if %{defined perl_bootstrap} +%gendep_perl_podlators +%endif +Conflicts: perl < 4:5.16.1-234 + +%description podlators +This package contains Pod::Man and Pod::Text modules which convert POD input +to *roff source output, suitable for man pages, or plain text. It also +includes several sub-classes of Pod::Text for formatted output to terminals +with various capabilities. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Scalar-List-Utils +Summary: A selection of general-utility scalar and list subroutines +License: GPL+ or Artistic +Epoch: 3 +# Real version 1.46_02 +Version: 1.46 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Scalar_List_Utils +%endif + +%description Scalar-List-Utils +Scalar::Util and List::Util contain a selection of subroutines that people have +expressed would be nice to have in the perl core, but the usage would not +really be high enough to warrant the use of a keyword, and the size so small +such that being individual extensions would be wasteful. +%endif + +%package SelfLoader +Summary: Load functions only on demand +License: GPL+ or Artistic +Epoch: 0 +Version: 1.23 +BuildArch: noarch +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_SelfLoader +%endif +Conflicts: perl < 4:5.22.0-351 + +%description SelfLoader +This Perl module tells its users that functions in a package are to be +autoloaded from after the "__DATA__" token. See also "Autoloading" in +perlsub. + +%if %{dual_life} || %{rebuild_from_scratch} +%package Socket +Summary: C socket.h defines and structure manipulators +License: GPL+ or Artistic +Epoch: 4 +Version: 2.020 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Socket +%endif + +%description Socket +This module is just a translation of the C socket.h file. Unlike the old +mechanism of requiring a translated socket.ph file, this uses the h2xs program +(see the Perl source distribution) and your native C compiler. This means +that it has a far more likely chance of getting the numbers right. This +includes all of the commonly used pound-defines like AF_INET, SOCK_STREAM, etc. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Storable +Summary: Persistence for Perl data structures +License: GPL+ or Artistic +Epoch: 1 +Version: 2.62 +Requires: %perl_compat +# Carp substitutes missing Log::Agent +Requires: perl(Carp) +Requires: perl(Config) +# Fcntl is optional, but locking is good +Requires: perl(Fcntl) +Requires: perl(IO::File) +%if %{defined perl_bootstrap} +%gendep_perl_Storable +%endif +Conflicts: perl < 4:5.16.3-274 + +%description Storable +The Storable package brings persistence to your Perl data structures +containing scalar, array, hash or reference objects, i.e. anything that +can be conveniently stored to disk and retrieved at a later time. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Sys-Syslog +Summary: Perl interface to the UNIX syslog(3) calls +License: GPL+ or Artistic +Epoch: 0 +Version: 0.35 +Requires: %perl_compat +Requires: perl(XSLoader) +%if %{defined perl_bootstrap} +%gendep_perl_Sys_Syslog +%endif +Conflicts: perl < 4:5.16.3-269 + +%description Sys-Syslog +Sys::Syslog is an interface to the UNIX syslog(3) function. Call syslog() with +a string priority and a list of printf() arguments just like at syslog(3). +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Term-ANSIColor +Summary: Color screen output using ANSI escape sequences +License: GPL+ or Artistic +Epoch: 0 +Version: 4.06 +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_Term_ANSIColor +%endif +BuildArch: noarch +Conflicts: perl < 4:5.18.2-302 + +%description Term-ANSIColor +This module has two interfaces, one through color() and colored() and the +other through constants. It also offers the utility functions uncolor(), +colorstrip(), colorvalid(), and coloralias(), which have to be explicitly +imported to be used. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Term-Cap +Summary: Perl termcap interface +License: GPL+ or Artistic +Epoch: 0 +Version: 1.17 +Requires: %perl_compat +# ncurses for infocmp tool +Requires: ncurses +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_Term_Cap +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-347 + +%description Term-Cap +These are low-level functions to extract and use capabilities from a terminal +capability (termcap) database. +%endif + +%package Test +Summary: Simple framework for writing test scripts +License: GPL+ or Artistic +Epoch: 0 +Version: 1.30 +Requires: %perl_compat +# Algorithm::Diff 1.15 is optional +Requires: perl(File::Temp) +%if %{defined perl_bootstrap} +%gendep_perl_Test +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-351 + +%description Test +The Test Perl module simplifies the task of writing test files for Perl modules, +such that their output is in the format that Test::Harness expects to see. + +%if %{dual_life} || %{rebuild_from_scratch} +%package Test-Harness +Summary: Run Perl standard test scripts with statistics +License: GPL+ or Artistic +Epoch: 1 +Version: 3.38 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Test_Harness +%endif +BuildArch: noarch + +%description Test-Harness +Run Perl standard test scripts with statistics. +Use TAP::Parser, Test::Harness package was whole rewritten. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Test-Simple +Summary: Basic utilities for writing tests +License: (GPL+ or Artistic) and CC0 and Public Domain +Epoch: 1 +Version: 1.302073 +Requires: %perl_compat +Requires: perl(Data::Dumper) +%if %{defined perl_bootstrap} +%gendep_perl_Test_Simple +%endif +BuildArch: noarch + +%description Test-Simple +Basic utilities for writing tests. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Text-Balanced +Summary: Extract delimited text sequences from strings +License: GPL+ or Artistic +Epoch: 0 +Version: 2.03 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Text_Balanced +%endif +BuildArch: noarch +Conflicts: perl < 4:5.22.0-347 + +%description Text-Balanced +These Perl subroutines may be used to extract a delimited substring, possibly +after skipping a specified prefix string. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Text-ParseWords +Summary: Parse text into an array of tokens or array of arrays +License: GPL+ or Artistic +Epoch: 0 +Version: 3.30 +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_Text_ParseWords +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.2-256 + +%description Text-ParseWords +Parse text into an array of tokens or array of arrays. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Text-Tabs+Wrap +Summary: Expand tabs and do simple line wrapping +License: TTWL +Epoch: 0 +Version: 2013.0523 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Text_Tabs_Wrap +%endif +BuildArch: noarch +Conflicts: perl < 4:5.20.2-325 + +%description Text-Tabs+Wrap +Text::Tabs performs the same job that the UNIX expand(1) and unexpand(1) +commands do: adding or removing tabs from a document. + +Text::Wrap::wrap() will reformat lines into paragraphs. All it does is break +up long lines, it will not join short lines together. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Thread-Queue +Summary: Thread-safe queues +License: GPL+ or Artistic +Epoch: 0 +Version: 3.12 +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_Thread_Queue +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.2-257 + +%description Thread-Queue +This module provides thread-safe FIFO queues that can be accessed safely by +any number of threads. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Time-HiRes +Summary: High resolution alarm, sleep, gettimeofday, interval timers +License: GPL+ or Artistic +Epoch: 0 +Version: 1.9741 +Requires: %perl_compat +Requires: perl(Carp) +%if %{defined perl_bootstrap} +%gendep_perl_Time_HiRes +%endif +Conflicts: perl < 4:5.16.3-271 + +%description Time-HiRes +The Time::HiRes module implements a Perl interface to the usleep, nanosleep, +ualarm, gettimeofday, and setitimer/getitimer system calls, in other words, +high resolution time and timers. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Time-Local +Summary: Efficiently compute time from local and GMT time +License: GPL+ or Artistic +Epoch: 0 +# Real version 1.25 +Version: 1.250 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Time_Local +%endif +BuildArch: noarch +Conflicts: perl < 4:5.16.3-262 + +%description Time-Local +This module provides functions that are the inverse of built-in perl functions +localtime() and gmtime(). They accept a date as a six-element array, and +return the corresponding time(2) value in seconds since the system epoch +(Midnight, January 1, 1970 GMT on Unix, for example). This value can be +positive or negative, though POSIX only requires support for positive values, +so dates before the system's epoch may not work on all operating systems. +%endif + +%package Time-Piece +Summary: Time objects from localtime and gmtime +License: (GPL+ or Artistic) and BSD +Epoch: 0 +Version: 1.31 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_Time_Piece +%endif + +%description Time-Piece +The Time::Piece module replaces the standard localtime and gmtime functions +with implementations that return objects. It does so in a backwards compatible +manner, so that using localtime or gmtime as documented in perlfunc still +behave as expected. + +%if %{dual_life} || %{rebuild_from_scratch} +%package threads +Summary: Perl interpreter-based threads +License: GPL+ or Artistic +Epoch: 1 +Version: 2.15 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_threads +%endif + +%description threads +Since Perl 5.8, thread programming has been available using a model called +interpreter threads which provides a new Perl interpreter for each thread, +and, by default, results in no data or state information being shared between +threads. + +(Prior to Perl 5.8, 5005threads was available through the Thread.pm API. This +threading model has been deprecated, and was removed as of Perl 5.10.0.) + +As just mentioned, all variables are, by default, thread local. To use shared +variables, you need to also load threads::shared. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package threads-shared +Summary: Perl extension for sharing data structures between threads +License: GPL+ or Artistic +Epoch: 0 +Version: 1.56 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_threads_shared +%endif + +%description threads-shared +By default, variables are private to each thread, and each newly created thread +gets a private copy of each existing variable. This module allows you to share +variables across different threads (and pseudo-forks on Win32). It is used +together with the threads module. This module supports the sharing of the +following data types only: scalars and scalar refs, arrays and array refs, and +hashes and hash refs. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Unicode-Collate +Summary: Unicode Collation Algorithm +License: (GPL+ or Artistic) and Unicode +Epoch: 0 +Version: 1.19 +Requires: %perl_compat +Requires: perl(Unicode::Normalize) +%if %{defined perl_bootstrap} +%gendep_perl_Unicode_Collate +%endif +Conflicts: perl < 4:5.22.0-347 + +%description Unicode-Collate +This package is Perl implementation of Unicode Technical Standard #10 (Unicode +Collation Algorithm). +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package Unicode-Normalize +Summary: Unicode Normalization Forms +License: GPL+ or Artistic +Epoch: 0 +Version: 1.25 +Requires: %perl_compat +# unicore/CombiningClass.pl and unicore/Decomposition.pl from perl, perl is +# auto-detected. +%if %{defined perl_bootstrap} +%gendep_perl_Unicode_Normalize +%endif +Conflicts: perl < 4:5.22.0-347 + +%description Unicode-Normalize +This package provides Perl functions that can convert strings into various +Unicode normalization forms as defined in Unicode Standard Annex #15. +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%package version +Summary: Perl extension for Version Objects +License: GPL+ or Artistic +# Epoch bump for clean upgrade over old standalone package +Epoch: 6 +# real version 0.9917 +Version: 0.99.17 +Requires: %perl_compat +%if %{defined perl_bootstrap} +%gendep_perl_version +%endif +BuildArch: noarch + +%description version +Perl extension for Version Objects +%endif + +%prep +%setup -q -n perl-%{perl_version} +%patch1 -p1 +%ifarch %{multilib_64_archs} +%patch3 -p1 +%endif +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch15 -p1 +%patch16 -p1 +%patch22 -p1 +%patch26 -p1 +%patch30 -p1 +%patch31 -p1 +%patch36 -p1 +%patch38 -p1 +%patch43 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch51 -p1 +%patch52 -p1 +%patch54 -p1 +%patch55 -p1 +%patch56 -p1 +%patch58 -p1 +%patch61 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 +%patch69 -p1 +%patch70 -p1 +%patch71 -p1 +%patch72 -p1 +%patch73 -p1 +%patch74 -p1 +%patch75 -p1 +%patch76 -p1 +%patch77 -p1 +%patch78 -p1 +%patch79 -p1 +%patch80 -p1 +%patch81 -p1 +%patch82 -p1 +%patch83 -p1 +%patch84 -p1 +%patch85 -p1 +%patch86 -p1 +%patch88 -p1 +%patch89 -p1 +%patch90 -p1 +%patch91 -p1 +%patch92 -p1 +%patch93 -p1 +%patch94 -p1 +%patch95 -p1 +%patch96 -p1 +%patch97 -p1 +%patch200 -p1 +%patch201 -p1 + +%if !%{defined perl_bootstrap} +# Local patch tracking +perl -x patchlevel.h \ + 'Fedora Patch1: Removes date check, Fedora/RHEL specific' \ +%ifarch %{multilib_64_archs} + 'Fedora Patch3: support for libdir64' \ +%endif + 'Fedora Patch4: use libresolv instead of libbind' \ + 'Fedora Patch5: USE_MM_LD_RUN_PATH' \ + 'Fedora Patch6: Provide MM::maybe_command independently (bug #1129443)' \ + 'Fedora Patch7: Dont run one io test due to random builder failures' \ + 'Fedora Patch15: Define SONAME for libperl.so' \ + 'Fedora Patch16: Install libperl.so to -Dshrpdir value' \ + 'Fedora Patch22: Document Math::BigInt::CalcEmu requires Math::BigInt (CPAN RT#85015)' \ + 'Fedora Patch26: Make *DBM_File desctructors thread-safe (RT#61912)' \ + 'Fedora Patch27: Make PadlistNAMES() lvalue again (CPAN RT#101063)' \ + 'Fedora Patch30: Replace EU::MakeMaker dependency with EU::MM::Utils in IPC::Cmd (bug #1129443)' \ + 'Fedora Patch31: Make File::Glob more resistant against degenerative matching (RT#131211)' \ + 'Fedora Patch36: Fix glob UTF-8 flag on a glob reassignment (RT#131263)' \ + 'Fedora Patch38: Fix handling backslashes in PATH environment variable when executing "perl -S" (RT#129183)' \ + 'Fedora Patch45: Fix File::Glob rt131211.t test random failures' \ + 'Fedora Patch46: Fix t/op/hash.t test random failures' \ + 'Fedora Patch47: Parse caret variables with subscripts as normal variables inside ${...} escaping (RT#131664)' \ + 'Fedora Patch49: Do not display too many bytes when reporting malformed UTF-8 character' \ + 'Fedora Patch51: Fix error message for "our sub foo::bar" (RT#131679)' \ + 'Fedora Patch52: Fix executing arybase::_tie_it() in Safe compartement (RT#131588)' \ + 'Fedora Patch54: Fix splitting non-ASCII strings if unicode_strings feature is enabled (RT#130907)' \ + 'Fedora Patch55: Fix compiler warnings in code generated by ExtUtils::Constant (CPAN RT#63832)' \ + 'Fedora Patch56: Fix compiler warnings in code generated by ExtUtils::Constant (CPAN RT#101487)' \ + 'Fedora Patch58: Fix unreliable Time-HiRes tests (CPAN RT#122819)' \ + 'Fedora Patch61: Fix Term::ReadLine not to create spurious &STDERR files (RT#132008)' \ + 'Fedora Patch64: Fix an overflow when parsing a character range with no preceding character (RT#132245)' \ + 'Fedora Patch65: Fix walking symbol table for ISA in Carp' \ + 'Fedora Patch66: Fix handling file names with null bytes in stat and lstat functions (RT#131895)' \ + 'Fedora Patch67: Fix a crash when untying an object witout a stash' \ + 'Fedora Patch68: Fix deparsing of transliterations with unprintable characters (RT#132405)' \ + 'Fedora Patch69: Fix error reporting on do() on a directory (RT#125774)' \ + 'Fedora Patch70: Fix stack manipulation when a lexical subroutine is defined in a do block in a member of an iteration list (RT#132442)' \ + 'Fedora Patch71: Fix setting $! when statting a closed filehandle (RT#108288)' \ + 'Fedora Patch72: Fix tainting of s/// with overloaded replacement (RT#115266)' \ + 'Fedora Patch73: Expand system() arguments before a fork (RT#121105)' \ + 'Fedora Patch76: Avoid undefined behavior when copying memory in Glob and pp_caller (RT#131746)' \ + 'Fedora Patch78: Fix compatibility with libxcrypt (RT#133184)' \ + 'Fedora Patch79: Link XS modules to pthread library to fix linking with -z defs' \ + 'Fedora Patch80: Fix parsing braced subscript after parentheses (RT#8045)' \ + 'Fedora Patch81: Do not clobber file bytes in :encoding layer (RT#132833)' \ + 'Fedora Patch82: Fix line numbers in multi-line s/// (RT#131930)' \ + 'Fedora Patch83: Fix parsing extended bracketed character classes (RT#132167)' \ + 'Fedora Patch84: Fix a possibly unitialized memory read in the Perl parser (RT#133074)' \ + 'Fedora Patch85: Fix an infinite loop in the regular expression compiler (RT#133185)' \ + 'Fedora Patch86: Adjust tests to gdbm-1.15 (RT#133295)' \ + 'Fedora Patch88: Fix printing a warning about a wide character when matching a regular expression while ISO-8859-1 locale is in effect' \ + 'Fedora Patch89: Fix invoking a check for wide characters while ISO-8859-1 locale is in effect' \ + 'Fedora Patch90: Pass the correct CFLAGS to dtrace' \ + 'RHEL Patch91: Fix Time-Local tests to pass after year 2019 (bug #1807120)' \ + 'RHEL Patch92: Fix CVE-2020-12723 (GH#16947)' \ + 'RHEL Patch93: Fix CVE-2020-10543' \ + 'RHEL Patch94: Fix CVE-2020-10878' \ + 'RHEL Patch95: Fix Net-Ping _resolv return value on failing DNS name lookup (bug #1973030)' \ + 'RHEL Patch97: Fix a memory leak when compiling a regular expression with a non-word class (GH#17218)' \ + 'Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux' \ + 'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \ + %{nil} +%endif + +#copy the example script +install -m 0644 %{SOURCE5} . + +#copy Pod-Html license clarification +cp %{SOURCE6} . + +# +# Candidates for doc recoding (need case by case review): +# find . -name "*.pod" -o -name "README*" -o -name "*.pm" | xargs file -i | grep charset= | grep -v '\(us-ascii\|utf-8\)' +recode() +{ + iconv -f "${2:-iso-8859-1}" -t utf-8 < "$1" > "${1}_" + touch -r "$1" "${1}_" + mv -f "${1}_" "$1" +} +# TODO iconv fail on this one +##recode README.tw big5 +#recode pod/perlebcdic.pod +#recode pod/perlhack.pod +#recode pod/perlhist.pod +#recode pod/perlthrtut.pod +#recode AUTHORS + +find . -name \*.orig -exec rm -fv {} \; + +# Configure Compress::Zlib to use system zlib +sed -i 's|BUILD_ZLIB = True|BUILD_ZLIB = False| + s|INCLUDE = ./zlib-src|INCLUDE = %{_includedir}| + s|LIB = ./zlib-src|LIB = %{_libdir}|' \ + cpan/Compress-Raw-Zlib/config.in + +# Ensure that we never accidentally bundle zlib or bzip2 +rm -rf cpan/Compress-Raw-Zlib/zlib-src +rm -rf cpan/Compress-Raw-Bzip2/bzip2-src +sed -i '/\(bzip2\|zlib\)-src/d' MANIFEST + +%if !%{with gdbm} +# Do not install anything requiring NDBM_File if NDBM is not available. +rm -rf 'cpan/Memoize/Memoize/NDBM_File.pm' +sed -i '\|cpan/Memoize/Memoize/NDBM_File.pm|d' MANIFEST +%endif + + +%build +echo "RPM Build arch: %{_arch}" + +# use "lib", not %%{_lib}, for privlib, sitelib, and vendorlib +# To build production version, we would need -DDEBUGGING=-g + +# Perl INC path (perl -V) in search order: +# - /usr/local/share/perl5 -- for CPAN (site lib) +# - /usr/local/lib[64]/perl5 -- for CPAN (site arch) +# - /usr/share/perl5/vendor_perl -- 3rd party (vendor lib) +# - /usr/lib[64]/perl5/vendor_perl -- 3rd party (vendor arch) +# - /usr/share/perl5 -- Fedora (priv lib) +# - /usr/lib[64]/perl5 -- Fedora (arch lib) + +%global privlib %{_prefix}/share/perl5 +%global archlib %{_libdir}/perl5 + +%global perl_vendorlib %{privlib}/vendor_perl +%global perl_vendorarch %{archlib}/vendor_perl + +# ldflags is not used when linking XS modules. +# Only ldflags is used when linking miniperl. +# Only ccflags and ldflags are used for Configure's compiler checks. +# Set optimize=none to prevent from injecting upstream's value. +/bin/sh Configure -des \ + -Doptimize="none" \ + -Dccflags="$RPM_OPT_FLAGS" \ + -Dldflags="$RPM_LD_FLAGS" \ + -Dccdlflags="-Wl,--enable-new-dtags $RPM_LD_FLAGS" \ + -Dlddlflags="-shared $RPM_LD_FLAGS" \ + -Dshrpdir="%{_libdir}" \ + -DDEBUGGING=-g \ + -Dversion=%{perl_version} \ + -Dmyhostname=localhost \ + -Dperladmin=root@localhost \ + -Dcc='%{__cc}' \ + -Dcf_by='Red Hat, Inc.' \ + -Dprefix=%{_prefix} \ +%if %{without perl_enables_groff} + -Dman1dir="%{_mandir}/man1" \ + -Dman3dir="%{_mandir}/man3" \ +%endif + -Dvendorprefix=%{_prefix} \ + -Dsiteprefix=%{_prefix}/local \ + -Dsitelib="%{_prefix}/local/share/perl5" \ + -Dsitearch="%{_prefix}/local/%{_lib}/perl5" \ + -Dprivlib="%{privlib}" \ + -Dvendorlib="%{perl_vendorlib}" \ + -Darchlib="%{archlib}" \ + -Dvendorarch="%{perl_vendorarch}" \ + -Darchname=%{perl_archname} \ +%ifarch %{multilib_64_archs} + -Dlibpth="/usr/local/lib64 /lib64 %{_prefix}/lib64" \ +%endif +%ifarch sparc sparcv9 + -Ud_longdbl \ +%endif + -Duseshrplib \ + -Dusethreads \ + -Duseithreads \ +%if %{with perl_enables_systemtap} + -Dusedtrace='/usr/bin/dtrace' \ +%else + -Uusedtrace \ +%endif + -Duselargefiles \ + -Dd_semctl_semun \ + -Di_db \ +%if %{with gdbm} + -Ui_ndbm \ + -Di_gdbm \ +%endif + -Di_shadow \ + -Di_syslog \ + -Dman3ext=3pm \ + -Duseperlio \ + -Dinstallusrbinperl=n \ + -Ubincompat5005 \ + -Uversiononly \ + -Dpager='/usr/bin/less -isr' \ + -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto \ + -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto \ + -Ud_endservent_r_proto -Ud_setservent_r_proto \ + -Dscriptdir='%{_bindir}' \ + -Dusesitecustomize \ + -Duse64bitint + +# -Duseshrplib creates libperl.so, -Ubincompat5005 help create DSO -> libperl.so + +BUILD_BZIP2=0 +BZIP2_LIB=%{_libdir} +export BUILD_BZIP2 BZIP2_LIB + +# Prepapre a symlink from proper DSO name to libperl.so now so that new perl +# can be executed from make. +%global soname libperl.so.%(echo '%{perl_version}' | sed 's/^\\([^.]*\\.[^.]*\\).*/\\1/') +test -L %soname || ln -s libperl.so %soname + +%ifarch sparc64 %{arm} +make +%else +make %{?_smp_mflags} +%endif + +%install +make install DESTDIR=$RPM_BUILD_ROOT + +%global build_archlib $RPM_BUILD_ROOT%{archlib} +%global build_privlib $RPM_BUILD_ROOT%{privlib} +%global build_bindir $RPM_BUILD_ROOT%{_bindir} +%global new_perl LD_PRELOAD="%{build_archlib}/CORE/libperl.so" \\\ + LD_LIBRARY_PATH="%{build_archlib}/CORE" \\\ + PERL5LIB="%{build_archlib}:%{build_privlib}" \\\ + %{build_bindir}/perl + +# Make proper DSO names, move libperl to standard path. +mv "%{build_archlib}/CORE/libperl.so" \ + "$RPM_BUILD_ROOT%{_libdir}/libperl.so.%{perl_version}" +ln -s "libperl.so.%{perl_version}" "$RPM_BUILD_ROOT%{_libdir}/%{soname}" +ln -s "libperl.so.%{perl_version}" "$RPM_BUILD_ROOT%{_libdir}/libperl.so" +# XXX: Keep symlink from original location because various code glues +# $archlib/CORE/$libperl to get the DSO. +ln -s "../../libperl.so.%{perl_version}" "%{build_archlib}/CORE/libperl.so" +# XXX: Remove the soname named file from CORE directory that was created as +# a symlink in build section and installed as a regular file by perl build +# system. +rm -f "%{build_archlib}/CORE/%{soname}" + +install -p -m 755 utils/pl2pm %{build_bindir}/pl2pm + +for i in asm/termios.h syscall.h syslimits.h syslog.h \ + sys/ioctl.h sys/socket.h sys/time.h wait.h +do + %{new_perl} %{build_bindir}/h2ph -a -d %{build_archlib} $i || true +done + +# vendor directories (in this case for third party rpms) +# perl doesn't create the auto subdirectory, but modules put things in it, +# so we need to own it. + +mkdir -p $RPM_BUILD_ROOT%{perl_vendorarch}/auto +mkdir -p $RPM_BUILD_ROOT%{perl_vendorlib} + +# +# perl RPM macros +# +mkdir -p ${RPM_BUILD_ROOT}%{_rpmmacrodir} +install -p -m 644 %{SOURCE3} ${RPM_BUILD_ROOT}%{_rpmmacrodir} + +# +# Core modules removal +# +# Dual-living binaries clashes on debuginfo files between perl and standalone +# packages. Excluding is not enough, we need to remove them. This is +# a work-around for rpmbuild bug #878863. +find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -delete +chmod -R u+w $RPM_BUILD_ROOT/* + +# miniperl? As an interpreter? How odd. Anyway, a symlink does it: +rm %{build_privlib}/ExtUtils/xsubpp +ln -s ../../../bin/xsubpp %{build_privlib}/ExtUtils/ + +# Don't need the .packlist +rm %{build_archlib}/.packlist + +# Do not distribute File::Spec::VMS as it works on VMS only (bug #973713) +# We cannot remove it in %%prep because dist/Cwd/t/Spec.t test needs it. +rm %{build_archlib}/File/Spec/VMS.pm +rm $RPM_BUILD_ROOT%{_mandir}/man3/File::Spec::VMS.3* + +# Fix some manpages to be UTF-8 +mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1/ +pushd $RPM_BUILD_ROOT%{_mandir}/man1/ + for i in perl588delta.1 perldelta.1 ; do + iconv -f MS-ANSI -t UTF-8 $i --output new-$i + rm $i + mv new-$i $i + done +popd + +# for now, remove Bzip2: +# Why? Now is missing Bzip2 files and provides +##find $RPM_BUILD_ROOT -name Bzip2 | xargs rm -r +##find $RPM_BUILD_ROOT -name '*B*zip2*'| xargs rm + +# tests -- FIXME need to validate that this all works as expected +mkdir -p %{buildroot}%{perl5_testdir}/perl-tests + +# "core" +tar -cf - t/ | ( cd %{buildroot}%{perl5_testdir}/perl-tests && tar -xf - ) + +# "dual-lifed" +for dir in `find ext/ -type d -name t -maxdepth 2` ; do + + tar -cf - $dir | ( cd %{buildroot}%{perl5_testdir}/perl-tests/t && tar -xf - ) +done + +# Normalize shell bangs in tests. +# brp-mangle-shebangs executed by rpm-build chokes on t/TEST. +%{new_perl} -MConfig -i -pn \ + -e 's"\A#!(?:perl|\./perl|/usr/bin/perl|/usr/bin/env perl)\b"$Config{startperl}"' \ + $(find %{buildroot}%{perl5_testdir}/perl-tests -type f) + +%if %{with perl_enables_systemtap} +# Systemtap tapset install +mkdir -p %{buildroot}%{tapsetdir} +%ifarch %{multilib_64_archs} +%global libperl_stp libperl%{perl_version}-64.stp +%else +%global libperl_stp libperl%{perl_version}-32.stp +%endif + +sed \ + -e "s|LIBRARY_PATH|%{_libdir}/%{soname}|" \ + %{SOURCE4} \ + > %{buildroot}%{tapsetdir}/%{libperl_stp} +%endif + +# TODO: Canonicalize test files (rewrite intrerpreter path, fix permissions) +# XXX: We cannot rewrite ./perl before %%check phase. Otherwise the test +# would run against system perl at build-time. +# See __spec_check_pre global macro in macros.perl. +#T_FILES=`find %%{buildroot}%%{perl5_testdir} -type f -name '*.t'` +#%%fix_shbang_line $T_FILES +#%%{__chmod} +x $T_FILES +#%%{_fixperms} %%{buildroot}%%{perl5_testdir} +# +# lib/perl5db.t will fail if Term::ReadLine::Gnu is available +%check +%if %{with test} +%{new_perl} -I/lib regen/lib_cleanup.pl +pushd t +%{new_perl} -I../lib porting/customized.t --regen +popd +%if %{parallel_tests} + JOBS=$(printf '%%s' "%{?_smp_mflags}" | sed 's/.*-j\([0-9][0-9]*\).*/\1/') + LC_ALL=C TEST_JOBS=$JOBS make test_harness +%else + LC_ALL=C make test +%endif +%endif + +%ldconfig_scriptlets libs + +%files +# We sub-package modules from perl-interpreter subpackage. Main perl package +# is a meta package. + +%files interpreter +%{_mandir}/man1/*.1* +%{_mandir}/man3/*.3* +%{_bindir}/* +%{archlib}/* +%{privlib}/* + + +# libs +%exclude %dir %{archlib} +%exclude %dir %{archlib}/auto +%exclude %{archlib}/auto/re +%exclude %dir %{archlib}/CORE +%exclude %{archlib}/CORE/libperl.so +%exclude %{archlib}/re.pm +%exclude %{_libdir}/libperl.so.* +%exclude %dir %{perl_vendorarch} +%exclude %dir %{perl_vendorarch}/auto +%exclude %dir %{privlib} +%exclude %{privlib}/integer.pm +%exclude %{privlib}/strict.pm +%exclude %{privlib}/unicore +%exclude %{privlib}/utf8.pm +%exclude %{privlib}/utf8_heavy.pl +%exclude %{privlib}/warnings.pm +%exclude %{privlib}/XSLoader.pm +%exclude %dir %{perl_vendorlib} +%exclude %{_mandir}/man3/integer.* +%exclude %{_mandir}/man3/re.* +%exclude %{_mandir}/man3/strict.* +%exclude %{_mandir}/man3/utf8.* +%exclude %{_mandir}/man3/warnings.* +%exclude %{_mandir}/man3/XSLoader.* + +# devel +%exclude %{_bindir}/h2xs +%exclude %{_mandir}/man1/h2xs* +%exclude %{_bindir}/perlivp +%exclude %{_mandir}/man1/perlivp* +%exclude %{archlib}/CORE/*.h +%exclude %{_libdir}/libperl.so +%exclude %{_mandir}/man1/perlxs* +%if %{with perl_enables_systemtap} +%exclude %dir %{_datadir}/systemtap +%exclude %dir %{_datadir}/systemtap/tapset +%endif + +# utils +%exclude %{_bindir}/h2ph +%exclude %{_bindir}/perlbug +%exclude %{_bindir}/perlthanks +%exclude %{_bindir}/pl2pm +%exclude %{_bindir}/splain +%exclude %{privlib}/pod/perlutil.pod +%exclude %{_mandir}/man1/h2ph.* +%exclude %{_mandir}/man1/perlbug.* +%exclude %{_mandir}/man1/perlthanks.* +%exclude %{_mandir}/man1/perlutil.* +%exclude %{_mandir}/man1/pl2pm.* +%exclude %{_mandir}/man1/splain.* + +# Archive-Tar +%exclude %{_bindir}/ptar +%exclude %{_bindir}/ptardiff +%exclude %{_bindir}/ptargrep +%exclude %dir %{privlib}/Archive +%exclude %{privlib}/Archive/Tar +%exclude %{privlib}/Archive/Tar.pm +%exclude %{_mandir}/man1/ptar.1* +%exclude %{_mandir}/man1/ptardiff.1* +%exclude %{_mandir}/man1/ptargrep.1* +%exclude %{_mandir}/man3/Archive::Tar* + +# Attribute-Handlers +%exclude %{privlib}/Attribute +%exclude %{_mandir}/man3/Attribute::Handlers.* + +# autodie +%exclude %{privlib}/autodie/ +%exclude %{privlib}/autodie.pm +%exclude %{privlib}/Fatal.pm +%exclude %{_mandir}/man3/autodie.3* +%exclude %{_mandir}/man3/autodie::* +%exclude %{_mandir}/man3/Fatal.3* + +# B-Debug +%exclude %{privlib}/B/Debug.pm +%exclude %{_mandir}/man3/B::Debug.3* + +# bignum +%exclude %{privlib}/bigint.pm +%exclude %{privlib}/bignum.pm +%exclude %{privlib}/bigrat.pm +%exclude %{privlib}/Math/BigFloat +%exclude %{privlib}/Math/BigInt/Trace.pm +%exclude %{_mandir}/man3/bigint.* +%exclude %{_mandir}/man3/bignum.* +%exclude %{_mandir}/man3/bigrat.* + +# Carp +%exclude %{privlib}/Carp +%exclude %{privlib}/Carp.* +%exclude %{_mandir}/man3/Carp.* + +# Config-Perl-V +%exclude %{privlib}/Config/Perl +%exclude %{_mandir}/man3/Config::Perl::V.* + +# constant +%exclude %{privlib}/constant.pm +%exclude %{_mandir}/man3/constant.3* + +# CPAN +%exclude %{_bindir}/cpan +%exclude %dir %{privlib}/App +%exclude %{privlib}/App/Cpan.pm +%exclude %{privlib}/CPAN +%exclude %{privlib}/CPAN.pm +%exclude %{_mandir}/man1/cpan.1* +%exclude %{_mandir}/man3/App::Cpan.* +%exclude %{_mandir}/man3/CPAN.* +%exclude %{_mandir}/man3/CPAN:* + +# CPAN-Meta +%exclude %dir %{privlib}/CPAN +%exclude %{privlib}/CPAN/Meta.pm +%exclude %dir %{privlib}/CPAN/Meta +%exclude %{privlib}/CPAN/Meta/Converter.pm +%exclude %{privlib}/CPAN/Meta/Feature.pm +%exclude %dir %{privlib}/CPAN/Meta/History +%exclude %{privlib}/CPAN/Meta/History.pm +%exclude %{privlib}/CPAN/Meta/Merge.pm +%exclude %{privlib}/CPAN/Meta/Prereqs.pm +%exclude %{privlib}/CPAN/Meta/Spec.pm +%exclude %{privlib}/CPAN/Meta/Validator.pm +%exclude %dir %{privlib}/Parse +%exclude %dir %{privlib}/Parse/CPAN +%exclude %{privlib}/Parse/CPAN/Meta.pm +%exclude %{_mandir}/man3/CPAN::Meta* +%exclude %{_mandir}/man3/Parse::CPAN::Meta.3* + +# CPAN-Meta-Requirements +%exclude %dir %{privlib}/CPAN +%exclude %dir %{privlib}/CPAN/Meta +%exclude %{privlib}/CPAN/Meta/Requirements.pm +%exclude %{_mandir}/man3/CPAN::Meta::Requirements.3* + +# CPAN-Meta-YAML +%exclude %dir %{privlib}/CPAN +%exclude %dir %{privlib}/CPAN/Meta +%exclude %{privlib}/CPAN/Meta/YAML.pm +%exclude %{_mandir}/man3/CPAN::Meta::YAML* + +# Compress-Raw-Bzip2 +%exclude %dir %{archlib}/Compress +%exclude %dir %{archlib}/Compress/Raw +%exclude %{archlib}/Compress/Raw/Bzip2.pm +%exclude %dir %{archlib}/auto/Compress +%exclude %dir %{archlib}/auto/Compress/Raw +%exclude %{archlib}/auto/Compress/Raw/Bzip2 +%exclude %{_mandir}/man3/Compress::Raw::Bzip2* + +# Compress-Raw-Zlib +%exclude %dir %{archlib}/Compress +%exclude %dir %{archlib}/Compress/Raw +%exclude %{archlib}/Compress/Raw/Zlib.pm +%exclude %dir %{archlib}/auto/Compress +%exclude %dir %{archlib}/auto/Compress/Raw +%exclude %{archlib}/auto/Compress/Raw/Zlib +%exclude %{_mandir}/man3/Compress::Raw::Zlib* + +# Data-Dumper +%exclude %dir %{archlib}/auto/Data +%exclude %dir %{archlib}/auto/Data/Dumper +%exclude %{archlib}/auto/Data/Dumper/Dumper.so +%exclude %dir %{archlib}/Data +%exclude %{archlib}/Data/Dumper.pm +%exclude %{_mandir}/man3/Data::Dumper.3* + +# DB_File +%exclude %{archlib}/DB_File.pm +%exclude %dir %{archlib}/auto/DB_File +%exclude %{archlib}/auto/DB_File/DB_File.so +%exclude %{_mandir}/man3/DB_File* + +# Devel-Peek +%dir %exclude %{archlib}/Devel +%exclude %{archlib}/Devel/Peek.pm +%dir %exclude %{archlib}/auto/Devel +%exclude %{archlib}/auto/Devel/Peek +%exclude %{_mandir}/man3/Devel::Peek.* + +# Devel-PPPort +%exclude %{archlib}/Devel/PPPort.pm +%exclude %{_mandir}/man3/Devel::PPPort.3* + +# Devel-SelfStubber +%exclude %dir %{privlib}/Devel +%exclude %{privlib}/Devel/SelfStubber.pm +%exclude %{_mandir}/man3/Devel::SelfStubber.* + +# Digest +%exclude %{privlib}/Digest.pm +%exclude %dir %{privlib}/Digest +%exclude %{privlib}/Digest/base.pm +%exclude %{privlib}/Digest/file.pm +%exclude %{_mandir}/man3/Digest.3* +%exclude %{_mandir}/man3/Digest::base.3* +%exclude %{_mandir}/man3/Digest::file.3* + +# Digest-MD5 +%exclude %dir %{archlib}/Digest +%exclude %{archlib}/Digest/MD5.pm +%exclude %dir %{archlib}/auto/Digest +%exclude %{archlib}/auto/Digest/MD5 +%exclude %{_mandir}/man3/Digest::MD5.3* + +# Digest-SHA +%exclude %{_bindir}/shasum +%exclude %dir %{archlib}/Digest +%exclude %{archlib}/Digest/SHA.pm +%exclude %dir %{archlib}/auto/Digest +%exclude %{archlib}/auto/Digest/SHA +%exclude %{_mandir}/man1/shasum.1* +%exclude %{_mandir}/man3/Digest::SHA.3* + +# Encode +%exclude %{_bindir}/encguess +%exclude %{_bindir}/piconv +%exclude %{archlib}/Encode* +%exclude %{archlib}/auto/Encode* +%exclude %{privlib}/Encode +%exclude %{_mandir}/man1/encguess.1* +%exclude %{_mandir}/man1/piconv.1* +%exclude %{_mandir}/man3/Encode*.3* + +# encoding +%exclude %{archlib}/encoding.pm +%exclude %{_mandir}/man3/encoding.3* + +# Encode-devel +%exclude %{_bindir}/enc2xs +%exclude %dir %{privlib}/Encode +%exclude %{privlib}/Encode/*.e2x +%exclude %{privlib}/Encode/encode.h +%exclude %{_mandir}/man1/enc2xs.1* + +# Env +%exclude %{privlib}/Env.pm +%exclude %{_mandir}/man3/Env.3* + +# Errno +%exclude %{archlib}/Errno.pm +%exclude %{_mandir}/man3/Errno.* + +# Exporter +%exclude %{privlib}/Exporter* +%exclude %{_mandir}/man3/Exporter* + +# experimental +%exclude %{privlib}/experimental* +%exclude %{_mandir}/man3/experimental* + +# ExtUtils-CBuilder +%exclude %{privlib}/ExtUtils/CBuilder +%exclude %{privlib}/ExtUtils/CBuilder.pm +%exclude %{_mandir}/man3/ExtUtils::CBuilder* + +# ExtUtils-Command +%exclude %{privlib}/ExtUtils/Command.pm +%exclude %{_mandir}/man3/ExtUtils::Command.* + +# ExtUtils-Embed +%exclude %{privlib}/ExtUtils/Embed.pm +%exclude %{_mandir}/man3/ExtUtils::Embed* + +# ExtUtils-Install +%exclude %{privlib}/ExtUtils/Install.pm +%exclude %{privlib}/ExtUtils/Installed.pm +%exclude %{privlib}/ExtUtils/Packlist.pm +%exclude %{_mandir}/man3/ExtUtils::Install.3* +%exclude %{_mandir}/man3/ExtUtils::Installed.3* +%exclude %{_mandir}/man3/ExtUtils::Packlist.3* + +# ExtUtils-Manifest +%exclude %{privlib}/ExtUtils/Manifest.pm +%exclude %{privlib}/ExtUtils/MANIFEST.SKIP +%exclude %{_mandir}/man3/ExtUtils::Manifest.3* + +# ExtUtils-MakeMaker +%exclude %{_bindir}/instmodsh +%exclude %{privlib}/ExtUtils/Command +%exclude %{privlib}/ExtUtils/Liblist +%exclude %{privlib}/ExtUtils/Liblist.pm +%exclude %{privlib}/ExtUtils/MakeMaker +%exclude %{privlib}/ExtUtils/MakeMaker.pm +%exclude %{privlib}/ExtUtils/MM.pm +%exclude %{privlib}/ExtUtils/MM_*.pm +%exclude %{privlib}/ExtUtils/MY.pm +%exclude %{privlib}/ExtUtils/Mkbootstrap.pm +%exclude %{privlib}/ExtUtils/Mksymlists.pm +%exclude %{privlib}/ExtUtils/testlib.pm +%exclude %{_mandir}/man1/instmodsh.1* +%exclude %{_mandir}/man3/ExtUtils::Command::MM* +%exclude %{_mandir}/man3/ExtUtils::Liblist.3* +%exclude %{_mandir}/man3/ExtUtils::MM.3* +%exclude %{_mandir}/man3/ExtUtils::MM_* +%exclude %{_mandir}/man3/ExtUtils::MY.3* +%exclude %{_mandir}/man3/ExtUtils::MakeMaker* +%exclude %{_mandir}/man3/ExtUtils::Mkbootstrap.3* +%exclude %{_mandir}/man3/ExtUtils::Mksymlists.3* +%exclude %{_mandir}/man3/ExtUtils::testlib.3* + +# ExtUtils-Miniperl +%exclude %{privlib}/ExtUtils/Miniperl.pm +%exclude %{_mandir}/man3/ExtUtils::Miniperl.3* + +# ExtUtils-MM-Utils +%exclude %dir %{privlib}/ExtUtils/MM +%exclude %{privlib}/ExtUtils/MM/Utils.pm +%exclude %{_mandir}/man3/ExtUtils::MM::Utils.* + +# ExtUtils-ParseXS +%exclude %dir %{privlib}/ExtUtils/ParseXS +%exclude %{privlib}/ExtUtils/ParseXS.pm +%exclude %{privlib}/ExtUtils/ParseXS.pod +%exclude %{privlib}/ExtUtils/ParseXS/Constants.pm +%exclude %{privlib}/ExtUtils/ParseXS/CountLines.pm +%exclude %{privlib}/ExtUtils/ParseXS/Eval.pm +%exclude %{privlib}/ExtUtils/ParseXS/Utilities.pm +%exclude %dir %{privlib}/ExtUtils/Typemaps +%exclude %{privlib}/ExtUtils/Typemaps.pm +%exclude %{privlib}/ExtUtils/Typemaps/Cmd.pm +%exclude %{privlib}/ExtUtils/Typemaps/InputMap.pm +%exclude %{privlib}/ExtUtils/Typemaps/OutputMap.pm +%exclude %{privlib}/ExtUtils/Typemaps/Type.pm +%exclude %{privlib}/ExtUtils/xsubpp +%exclude %{_bindir}/xsubpp +%exclude %{_mandir}/man1/xsubpp* +%exclude %{_mandir}/man3/ExtUtils::ParseXS.3* +%exclude %{_mandir}/man3/ExtUtils::ParseXS::Constants.3* +%exclude %{_mandir}/man3/ExtUtils::ParseXS::Eval.3* +%exclude %{_mandir}/man3/ExtUtils::ParseXS::Utilities.3* +%exclude %{_mandir}/man3/ExtUtils::Typemaps.3* +%exclude %{_mandir}/man3/ExtUtils::Typemaps::Cmd.3* +%exclude %{_mandir}/man3/ExtUtils::Typemaps::InputMap.3* +%exclude %{_mandir}/man3/ExtUtils::Typemaps::OutputMap.3* +%exclude %{_mandir}/man3/ExtUtils::Typemaps::Type.3* + +# File-Fetch +%exclude %{privlib}/File/Fetch.pm +%exclude %{_mandir}/man3/File::Fetch.3* + +# File-Path +%exclude %{privlib}/File/Path.pm +%exclude %{_mandir}/man3/File::Path.3* + +# File-Temp +%exclude %{privlib}/File/Temp.pm +%exclude %{_mandir}/man3/File::Temp.3* + +# Filter +%exclude %dir %{archlib}/auto/Filter +%exclude %{archlib}/auto/Filter/Util +%exclude %dir %{archlib}/Filter +%exclude %{archlib}/Filter/Util +%exclude %{privlib}/pod/perlfilter.pod +%exclude %{_mandir}/man1/perlfilter.* +%exclude %{_mandir}/man3/Filter::Util::* + +# Filter-Simple +%exclude %dir %{privlib}/Filter +%exclude %{privlib}/Filter/Simple.pm +%exclude %{_mandir}/man3/Filter::Simple.3* + +# Getopt-Long +%exclude %{privlib}/Getopt/Long.pm +%exclude %{_mandir}/man3/Getopt::Long.3* + +# IO +%exclude %dir %{archlib}/IO +%exclude %{archlib}/IO.pm +%exclude %{archlib}/IO/Dir.pm +%exclude %{archlib}/IO/File.pm +%exclude %{archlib}/IO/Handle.pm +%exclude %{archlib}/IO/Pipe.pm +%exclude %{archlib}/IO/Poll.pm +%exclude %{archlib}/IO/Seekable.pm +%exclude %{archlib}/IO/Select.pm +%exclude %dir %{archlib}/IO/Socket +%exclude %{archlib}/IO/Socket/INET.pm +%exclude %{archlib}/IO/Socket/UNIX.pm +%exclude %{archlib}/IO/Socket.pm +%exclude %dir %{archlib}/auto/IO +%exclude %{archlib}/auto/IO/IO.so +%exclude %{_mandir}/man3/IO.* +%exclude %{_mandir}/man3/IO::Dir.* +%exclude %{_mandir}/man3/IO::File.* +%exclude %{_mandir}/man3/IO::Handle.* +%exclude %{_mandir}/man3/IO::Pipe.* +%exclude %{_mandir}/man3/IO::Poll.* +%exclude %{_mandir}/man3/IO::Seekable.* +%exclude %{_mandir}/man3/IO::Select.* +%exclude %{_mandir}/man3/IO::Socket::INET.* +%exclude %{_mandir}/man3/IO::Socket::UNIX.* +%exclude %{_mandir}/man3/IO::Socket.* + +# IO-Compress +%exclude %{_bindir}/zipdetails +%exclude %dir %{privlib}/IO +%exclude %dir %{privlib}/IO/Compress +%exclude %{privlib}/IO/Compress/FAQ.pod +%exclude %{_mandir}/man1/zipdetails.* +%exclude %{_mandir}/man3/IO::Compress::FAQ.* +# Compress-Zlib +%exclude %dir %{privlib}/Compress +%exclude %{privlib}/Compress/Zlib.pm +%exclude %{_mandir}/man3/Compress::Zlib* +# IO-Compress-Base +%exclude %{privlib}/File/GlobMapper.pm +%exclude %dir %{privlib}/IO +%exclude %dir %{privlib}/IO/Compress +%exclude %{privlib}/IO/Compress/Base +%exclude %{privlib}/IO/Compress/Base.pm +%exclude %dir %{privlib}/IO/Uncompress +%exclude %{privlib}/IO/Uncompress/AnyUncompress.pm +%exclude %{privlib}/IO/Uncompress/Base.pm +%exclude %{_mandir}/man3/File::GlobMapper.* +%exclude %{_mandir}/man3/IO::Compress::Base.* +%exclude %{_mandir}/man3/IO::Uncompress::AnyUncompress.* +%exclude %{_mandir}/man3/IO::Uncompress::Base.* +# IO-Compress-Zlib +%exclude %dir %{privlib}/IO +%exclude %dir %{privlib}/IO/Compress +%exclude %{privlib}/IO/Compress/Adapter +%exclude %{privlib}/IO/Compress/Deflate.pm +%exclude %{privlib}/IO/Compress/Gzip +%exclude %{privlib}/IO/Compress/Gzip.pm +%exclude %{privlib}/IO/Compress/RawDeflate.pm +%exclude %{privlib}/IO/Compress/Bzip2.pm +%exclude %{privlib}/IO/Compress/Zip +%exclude %{privlib}/IO/Compress/Zip.pm +%exclude %{privlib}/IO/Compress/Zlib +%exclude %dir %{privlib}/IO/Uncompress +%exclude %{privlib}/IO/Uncompress/Adapter +%exclude %{privlib}/IO/Uncompress/AnyInflate.pm +%exclude %{privlib}/IO/Uncompress/Bunzip2.pm +%exclude %{privlib}/IO/Uncompress/Gunzip.pm +%exclude %{privlib}/IO/Uncompress/Inflate.pm +%exclude %{privlib}/IO/Uncompress/RawInflate.pm +%exclude %{privlib}/IO/Uncompress/Unzip.pm +%exclude %{_mandir}/man3/IO::Compress::Deflate* +%exclude %{_mandir}/man3/IO::Compress::Bzip2* +%exclude %{_mandir}/man3/IO::Compress::Gzip* +%exclude %{_mandir}/man3/IO::Compress::RawDeflate* +%exclude %{_mandir}/man3/IO::Compress::Zip* +%exclude %{_mandir}/man3/IO::Uncompress::AnyInflate* +%exclude %{_mandir}/man3/IO::Uncompress::Bunzip2* +%exclude %{_mandir}/man3/IO::Uncompress::Gunzip* +%exclude %{_mandir}/man3/IO::Uncompress::Inflate* +%exclude %{_mandir}/man3/IO::Uncompress::RawInflate* +%exclude %{_mandir}/man3/IO::Uncompress::Unzip* + +# IO-Socket-IP +%exclude %dir %{privlib}/IO +%exclude %dir %{privlib}/IO/Socket +%exclude %{privlib}/IO/Socket/IP.pm +%exclude %{_mandir}/man3/IO::Socket::IP.* + +# IO-Zlib +%exclude %dir %{privlib}/IO +%exclude %{privlib}/IO/Zlib.pm +%exclude %{_mandir}/man3/IO::Zlib.* + +# HTTP-Tiny +%exclude %dir %{privlib}/HTTP +%exclude %{privlib}/HTTP/Tiny.pm +%exclude %{_mandir}/man3/HTTP::Tiny* + +# IPC-Cmd +%exclude %{privlib}/IPC/Cmd.pm +%exclude %{_mandir}/man3/IPC::Cmd.3* + +# IPC-SysV +%exclude %{archlib}/auto/IPC +%exclude %{archlib}/IPC/Msg.pm +%exclude %{archlib}/IPC/Semaphore.pm +%exclude %{archlib}/IPC/SharedMem.pm +%exclude %{archlib}/IPC/SysV.pm +%exclude %{_mandir}/man3/IPC::Msg.* +%exclude %{_mandir}/man3/IPC::Semaphore.* +%exclude %{_mandir}/man3/IPC::SharedMem.* +%exclude %{_mandir}/man3/IPC::SysV.* + +# JSON-PP +%exclude %{_bindir}/json_pp +%exclude %dir %{privlib}/JSON +%exclude %{privlib}/JSON/PP +%exclude %{privlib}/JSON/PP.pm +%exclude %{_mandir}/man1/json_pp.1* +%exclude %{_mandir}/man3/JSON::PP.3* +%exclude %{_mandir}/man3/JSON::PP::Boolean.3pm* + +# libnet +%exclude %{privlib}/Net/Cmd.pm +%exclude %{privlib}/Net/Config.pm +%exclude %{privlib}/Net/Domain.pm +%exclude %{privlib}/Net/FTP +%exclude %{privlib}/Net/FTP.pm +%exclude %{privlib}/Net/libnetFAQ.pod +%exclude %{privlib}/Net/NNTP.pm +%exclude %{privlib}/Net/Netrc.pm +%exclude %{privlib}/Net/POP3.pm +%exclude %{privlib}/Net/SMTP.pm +%exclude %{privlib}/Net/Time.pm +%exclude %{_mandir}/man3/Net::Cmd.* +%exclude %{_mandir}/man3/Net::Config.* +%exclude %{_mandir}/man3/Net::Domain.* +%exclude %{_mandir}/man3/Net::FTP.* +%exclude %{_mandir}/man3/Net::libnetFAQ.* +%exclude %{_mandir}/man3/Net::NNTP.* +%exclude %{_mandir}/man3/Net::Netrc.* +%exclude %{_mandir}/man3/Net::POP3.* +%exclude %{_mandir}/man3/Net::SMTP.* +%exclude %{_mandir}/man3/Net::Time.* + +# libnetcfg +%exclude %{_bindir}/libnetcfg +%exclude %{_mandir}/man1/libnetcfg* + +# Locale-Codes +%exclude %dir %{privlib}/Locale +%exclude %{privlib}/Locale/Codes +%exclude %{privlib}/Locale/Codes.* +%exclude %{privlib}/Locale/Country.* +%exclude %{privlib}/Locale/Currency.* +%exclude %{privlib}/Locale/Language.* +%exclude %{privlib}/Locale/Script.* +%exclude %{_mandir}/man3/Locale::Codes::* +%exclude %{_mandir}/man3/Locale::Codes.* +%exclude %{_mandir}/man3/Locale::Country.* +%exclude %{_mandir}/man3/Locale::Currency.* +%exclude %{_mandir}/man3/Locale::Language.* +%exclude %{_mandir}/man3/Locale::Script.* + +# Locale-Maketext +%exclude %dir %{privlib}/Locale +%exclude %dir %{privlib}/Locale/Maketext +%exclude %{privlib}/Locale/Maketext.* +%exclude %{privlib}/Locale/Maketext/Cookbook.* +%exclude %{privlib}/Locale/Maketext/Guts.* +%exclude %{privlib}/Locale/Maketext/GutsLoader.* +%exclude %{privlib}/Locale/Maketext/TPJ13.* +%exclude %{_mandir}/man3/Locale::Maketext.* +%exclude %{_mandir}/man3/Locale::Maketext::Cookbook.* +%exclude %{_mandir}/man3/Locale::Maketext::Guts.* +%exclude %{_mandir}/man3/Locale::Maketext::GutsLoader.* +%exclude %{_mandir}/man3/Locale::Maketext::TPJ13.* + +# Locale-Maketext-Simple +%exclude %dir %{privlib}/Locale +%exclude %dir %{privlib}/Locale/Maketext +%exclude %{privlib}/Locale/Maketext/Simple.pm +%exclude %{_mandir}/man3/Locale::Maketext::Simple.* + +# Math-BigInt +%exclude %{privlib}/Math/BigFloat.pm +%exclude %{privlib}/Math/BigInt.pm +%exclude %dir %exclude %{privlib}/Math/BigInt +%exclude %{privlib}/Math/BigInt/Calc.pm +%exclude %{privlib}/Math/BigInt/CalcEmu.pm +%exclude %{privlib}/Math/BigInt/Lib.pm +%exclude %{_mandir}/man3/Math::BigFloat.* +%exclude %{_mandir}/man3/Math::BigInt.* +%exclude %{_mandir}/man3/Math::BigInt::Calc.* +%exclude %{_mandir}/man3/Math::BigInt::CalcEmu.* +%exclude %{_mandir}/man3/Math::BigInt::Lib.* + +# Math-BigInt-FastCalc +%exclude %{archlib}/Math +%exclude %{archlib}/auto/Math +%exclude %{_mandir}/man3/Math::BigInt::FastCalc.* + +# Math-BigRat +%exclude %{privlib}/Math/BigRat.pm +%exclude %{_mandir}/man3/Math::BigRat.* + +# Math-Complex +%dir %exclude %{privlib}/Math +%exclude %{privlib}/Math/Complex.pm +%exclude %{privlib}/Math/Trig.pm +%exclude %{_mandir}/man3/Math::Complex.* +%exclude %{_mandir}/man3/Math::Trig.* + +# Memoize +%exclude %{privlib}/Memoize +%exclude %{privlib}/Memoize.pm +%exclude %{_mandir}/man3/Memoize::* +%exclude %{_mandir}/man3/Memoize.* + +# MIME-Base64 +%exclude %{archlib}/auto/MIME +%exclude %{archlib}/MIME +%exclude %{_mandir}/man3/MIME::* + +# Module-CoreList +%exclude %dir %{privlib}/Module +%exclude %{privlib}/Module/CoreList +%exclude %{privlib}/Module/CoreList.pm +%exclude %{privlib}/Module/CoreList.pod +%exclude %{_mandir}/man3/Module::CoreList* + +# Module-CoreList-tools +%exclude %{_bindir}/corelist +%exclude %{_mandir}/man1/corelist* + +# Module-Load +%exclude %dir %{privlib}/Module +%exclude %{privlib}/Module/Load.pm +%exclude %{_mandir}/man3/Module::Load.* + +# Module-Load-Conditional +%exclude %dir %{privlib}/Module +%exclude %{privlib}/Module/Load +%exclude %{_mandir}/man3/Module::Load::Conditional* + +# Module-Loaded +%exclude %dir %{privlib}/Module +%exclude %{privlib}/Module/Loaded.pm +%exclude %{_mandir}/man3/Module::Loaded* + +# Module-Metadata +%exclude %dir %{privlib}/Module +%exclude %{privlib}/Module/Metadata.pm +%exclude %{_mandir}/man3/Module::Metadata.3pm* + +# Net-Ping +%exclude %{privlib}/Net/Ping.pm +%exclude %{_mandir}/man3/Net::Ping.* + +# PathTools +%exclude %{archlib}/Cwd.pm +%exclude %{archlib}/File/Spec* +%exclude %{archlib}/auto/Cwd/ +%exclude %{_mandir}/man3/Cwd* +%exclude %{_mandir}/man3/File::Spec* + +# Params-Check +%exclude %{privlib}/Params/ +%exclude %{_mandir}/man3/Params::Check* + +# perlfaq +%exclude %{privlib}/perlfaq.pm +%exclude %{privlib}/pod/perlfaq* +%exclude %{privlib}/pod/perlglossary.pod +%exclude %{_mandir}/man1/perlfaq* +%exclude %{_mandir}/man1/perlglossary.* + +# PerlIO-via-QuotedPrint +%exclude %{privlib}/PerlIO +%exclude %{_mandir}/man3/PerlIO::via::QuotedPrint.* + +# Perl-OSType +%exclude %dir %{privlib}/Perl +%exclude %{privlib}/Perl/OSType.pm +%exclude %{_mandir}/man3/Perl::OSType.3pm* + +# open +%exclude %{privlib}/open.pm +%exclude %{_mandir}/man3/open.3* + +# parent +%exclude %{privlib}/parent.pm +%exclude %{_mandir}/man3/parent.3* + +# Pod-Checker +%exclude %{_bindir}/podchecker +%exclude %{privlib}/Pod/Checker.pm +%exclude %{_mandir}/man1/podchecker.* +%exclude %{_mandir}/man3/Pod::Checker.* + +# Pod-Escapes +%exclude %{privlib}/Pod/Escapes.pm +%exclude %{_mandir}/man3/Pod::Escapes.* + +# Pod-Html +%exclude %{_bindir}/pod2html +%exclude %{privlib}/Pod/Html.pm +%exclude %{_mandir}/man1/pod2html.1* +%exclude %{_mandir}/man3/Pod::Html.* + +# Pod-Parser +%exclude %{_bindir}/podselect +%exclude %{privlib}/Pod/Find.pm +%exclude %{privlib}/Pod/InputObjects.pm +%exclude %{privlib}/Pod/ParseUtils.pm +%exclude %{privlib}/Pod/Parser.pm +%exclude %{privlib}/Pod/PlainText.pm +%exclude %{privlib}/Pod/Select.pm +%exclude %{_mandir}/man1/podselect.1* +%exclude %{_mandir}/man3/Pod::Find.* +%exclude %{_mandir}/man3/Pod::InputObjects.* +%exclude %{_mandir}/man3/Pod::ParseUtils.* +%exclude %{_mandir}/man3/Pod::Parser.* +%exclude %{_mandir}/man3/Pod::PlainText.* +%exclude %{_mandir}/man3/Pod::Select.* + +# Pod-Perldoc +%exclude %{_bindir}/perldoc +%exclude %{privlib}/pod/perldoc.pod +%exclude %{privlib}/Pod/Perldoc.pm +%exclude %{privlib}/Pod/Perldoc/ +%exclude %{_mandir}/man1/perldoc.1* +%exclude %{_mandir}/man3/Pod::Perldoc* + +# Pod-Usage +%exclude %{_bindir}/pod2usage +%exclude %{privlib}/Pod/Usage.pm +%exclude %{_mandir}/man1/pod2usage.* +%exclude %{_mandir}/man3/Pod::Usage.* + +# podlators +%exclude %{_bindir}/pod2man +%exclude %{_bindir}/pod2text +%exclude %{privlib}/pod/perlpodstyle.pod +%exclude %{privlib}/Pod/Man.pm +%exclude %{privlib}/Pod/ParseLink.pm +%exclude %{privlib}/Pod/Text +%exclude %{privlib}/Pod/Text.pm +%exclude %{_mandir}/man1/pod2man.1* +%exclude %{_mandir}/man1/pod2text.1* +%exclude %{_mandir}/man1/perlpodstyle.1* +%exclude %{_mandir}/man3/Pod::Man* +%exclude %{_mandir}/man3/Pod::ParseLink* +%exclude %{_mandir}/man3/Pod::Text* + +# Pod-Simple +%exclude %{privlib}/Pod/Simple/ +%exclude %{privlib}/Pod/Simple.pm +%exclude %{privlib}/Pod/Simple.pod +%exclude %{_mandir}/man3/Pod::Simple* + +# Scalar-List-Utils +%exclude %{archlib}/List/ +%exclude %{archlib}/Scalar/ +%exclude %{archlib}/Sub/ +%exclude %{archlib}/auto/List/ +%exclude %{_mandir}/man3/List::Util* +%exclude %{_mandir}/man3/Scalar::Util* +%exclude %{_mandir}/man3/Sub::Util* + +# SelfLoader +%exclude %{privlib}/SelfLoader.pm +%exclude %{_mandir}/man3/SelfLoader* + +# Storable +%exclude %{archlib}/Storable.pm +%exclude %{archlib}/auto/Storable/ +%exclude %{_mandir}/man3/Storable.* + +# Sys-Syslog +%exclude %{archlib}/Sys/Syslog.pm +%exclude %{archlib}/auto/Sys/Syslog/ +%exclude %{_mandir}/man3/Sys::Syslog.* + +# Term-ANSIColor +%exclude %{privlib}/Term/ANSIColor.pm +%exclude %{_mandir}/man3/Term::ANSIColor* + +# Term-Cap +%exclude %{privlib}/Term/Cap.pm +%exclude %{_mandir}/man3/Term::Cap.* + +# Test +%exclude %{privlib}/Test.pm +%exclude %{_mandir}/man3/Test.* + +# Test-Harness +%exclude %{_bindir}/prove +%exclude %dir %{privlib}/App +%exclude %{privlib}/App/Prove* +%exclude %{privlib}/TAP* +%exclude %dir %{privlib}/Test +%exclude %{privlib}/Test/Harness* +%exclude %{_mandir}/man1/prove.1* +%exclude %{_mandir}/man3/App::Prove* +%exclude %{_mandir}/man3/TAP* +%exclude %{_mandir}/man3/Test::Harness* + +# Test-Simple +%exclude %{privlib}/ok* +%exclude %dir %{privlib}/Test +%exclude %{privlib}/Test/More* +%exclude %{privlib}/Test/Builder* +%exclude %{privlib}/Test/Tester* +%exclude %{privlib}/Test/Simple* +%exclude %{privlib}/Test/Tutorial* +%exclude %{privlib}/Test/use +%exclude %{privlib}/Test2* +%exclude %{_mandir}/man3/ok* +%exclude %{_mandir}/man3/Test::More* +%exclude %{_mandir}/man3/Test::Builder* +%exclude %{_mandir}/man3/Test::Tester* +%exclude %{_mandir}/man3/Test::Simple* +%exclude %{_mandir}/man3/Test::Tutorial* +%exclude %{_mandir}/man3/Test::use::* +%exclude %{_mandir}/man3/Test2* + +# Text-Balanced +%exclude %{privlib}/Text/Balanced.pm +%exclude %{_mandir}/man3/Text::Balanced.* + +# Text-ParseWords +%exclude %{privlib}/Text/ParseWords.pm +%exclude %{_mandir}/man3/Text::ParseWords.* + +# Text-Tabs+Wrap +%exclude %{privlib}/Text/Tabs.pm +%exclude %{privlib}/Text/Wrap.pm +%exclude %{_mandir}/man3/Text::Tabs.* +%exclude %{_mandir}/man3/Text::Wrap.* + +# Thread-Queue +%exclude %{privlib}/Thread/Queue.pm +%exclude %{_mandir}/man3/Thread::Queue.* + +# Time-HiRes +%exclude %dir %{archlib}/Time +%exclude %{archlib}/Time/HiRes.pm +%exclude %dir %{archlib}/auto/Time +%exclude %{archlib}/auto/Time/HiRes +%exclude %{_mandir}/man3/Time::HiRes.* + +# Time-Local +%exclude %{privlib}/Time/Local.pm +%exclude %{_mandir}/man3/Time::Local.* + +# Time-Piece +%exclude %dir %{archlib}/Time +%exclude %{archlib}/Time/Piece.pm +%exclude %{archlib}/Time/Seconds.pm +%exclude %dir %{archlib}/auto/Time +%exclude %{archlib}/auto/Time/Piece +%exclude %{_mandir}/man3/Time::Piece.3* +%exclude %{_mandir}/man3/Time::Seconds.3* + +# Socket +%exclude %dir %{archlib}/auto/Socket +%exclude %{archlib}/auto/Socket/Socket.* +%exclude %{archlib}/Socket.pm +%exclude %{_mandir}/man3/Socket.3* + +# threads +%dir %exclude %{archlib}/auto/threads +%exclude %{archlib}/auto/threads/threads* +%exclude %{archlib}/threads.pm +%exclude %{_mandir}/man3/threads.3* + +# threads-shared +%exclude %{archlib}/auto/threads/shared* +%exclude %dir %{archlib}/threads +%exclude %{archlib}/threads/shared* +%exclude %{_mandir}/man3/threads::shared* + +# Unicode-Collate +%dir %exclude %{archlib}/auto/Unicode +%exclude %{archlib}/auto/Unicode/Collate +%dir %exclude %{archlib}/Unicode +%exclude %{archlib}/Unicode/Collate +%exclude %{archlib}/Unicode/Collate.pm +%exclude %{privlib}/Unicode/Collate +%exclude %{_mandir}/man3/Unicode::Collate.* +%exclude %{_mandir}/man3/Unicode::Collate::* + +# Unicode-Normalize +%exclude %{archlib}/auto/Unicode/Normalize +%exclude %{archlib}/Unicode/Normalize.pm +%exclude %{_mandir}/man3/Unicode::Normalize.* + +# version +%exclude %{privlib}/version.pm +%exclude %{privlib}/version.pod +%exclude %{privlib}/version/ +%exclude %{_mandir}/man3/version.3* +%exclude %{_mandir}/man3/version::Internals.3* + +%files libs +%license Artistic Copying +%doc AUTHORS README Changes +%dir %{archlib} +%dir %{archlib}/auto +%{archlib}/auto/re +%dir %{archlib}/CORE +%{archlib}/CORE/libperl.so +%{archlib}/re.pm +%{_libdir}/libperl.so.* +%dir %{perl_vendorarch} +%dir %{perl_vendorarch}/auto +%dir %{privlib} +%{privlib}/integer.pm +%{privlib}/strict.pm +%{privlib}/unicore +%{privlib}/utf8.pm +%{privlib}/utf8_heavy.pl +%{privlib}/warnings.pm +%{privlib}/XSLoader.pm +%dir %{perl_vendorlib} +%{_mandir}/man3/integer.* +%{_mandir}/man3/re.* +%{_mandir}/man3/strict.* +%{_mandir}/man3/utf8.* +%{_mandir}/man3/warnings.* +%{_mandir}/man3/XSLoader.* + +%files devel +%{_bindir}/h2xs +%{_mandir}/man1/h2xs* +%{_bindir}/perlivp +%{_mandir}/man1/perlivp* +%{archlib}/CORE/*.h +%{_libdir}/libperl.so +%{_mandir}/man1/perlxs* +%if %{with perl_enables_systemtap} +%dir %{_datadir}/systemtap +%dir %{_datadir}/systemtap/tapset +%{tapsetdir}/%{libperl_stp} +%doc perl-example.stp +%endif + +%files macros +%{_rpmmacrodir}/macros.perl + +%files tests +%{perl5_testdir}/ + +%files utils +%{_bindir}/h2ph +%{_bindir}/perlbug +%{_bindir}/perlthanks +%{_bindir}/pl2pm +%{_bindir}/splain +%dir %{privlib}/pod +%{privlib}/pod/perlutil.pod +%{_mandir}/man1/h2ph.* +%{_mandir}/man1/perlbug.* +%{_mandir}/man1/perlthanks.* +%{_mandir}/man1/perlutil.* +%{_mandir}/man1/pl2pm.* +%{_mandir}/man1/splain.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Archive-Tar +%{_bindir}/ptar +%{_bindir}/ptardiff +%{_bindir}/ptargrep +%dir %{privlib}/Archive +%{privlib}/Archive/Tar +%{privlib}/Archive/Tar.pm +%{_mandir}/man1/ptar.1* +%{_mandir}/man1/ptardiff.1* +%{_mandir}/man1/ptargrep.1* +%{_mandir}/man3/Archive::Tar* +%endif + +%files Attribute-Handlers +%{privlib}/Attribute +%{_mandir}/man3/Attribute::Handlers.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files autodie +%{privlib}/autodie/ +%{privlib}/autodie.pm +%{privlib}/Fatal.pm +%{_mandir}/man3/autodie.3* +%{_mandir}/man3/autodie::* +%{_mandir}/man3/Fatal.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files B-Debug +%dir %{privlib}/B +%{privlib}/B/Debug.pm +%{_mandir}/man3/B::Debug.3* + +%files bignum +%{privlib}/bigint.pm +%{privlib}/bignum.pm +%{privlib}/bigrat.pm +%dir %{privlib}/Math +%{privlib}/Math/BigFloat +%dir %{privlib}/Math/BigInt +%{privlib}/Math/BigInt/Trace.pm +%{_mandir}/man3/bigint.* +%{_mandir}/man3/bignum.* +%{_mandir}/man3/bigrat.* + +%files Carp +%{privlib}/Carp +%{privlib}/Carp.* +%{_mandir}/man3/Carp.* + +%files Compress-Raw-Bzip2 +%dir %{archlib}/Compress +%dir %{archlib}/Compress/Raw +%{archlib}/Compress/Raw/Bzip2.pm +%dir %{archlib}/auto/Compress +%dir %{archlib}/auto/Compress/Raw +%{archlib}/auto/Compress/Raw/Bzip2 +%{_mandir}/man3/Compress::Raw::Bzip2* + +%files Compress-Raw-Zlib +%dir %{archlib}/Compress +%dir %{archlib}/Compress/Raw +%{archlib}/Compress/Raw/Zlib.pm +%dir %{archlib}/auto/Compress +%dir %{archlib}/auto/Compress/Raw +%{archlib}/auto/Compress/Raw/Zlib +%{_mandir}/man3/Compress::Raw::Zlib* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Config-Perl-V +%dir %{privlib}/Config +%{privlib}/Config/Perl +%{_mandir}/man3/Config::Perl::V.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files constant +%{privlib}/constant.pm +%{_mandir}/man3/constant.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files CPAN +%{_bindir}/cpan +%dir %{privlib}/App +%{privlib}/App/Cpan.pm +%{privlib}/CPAN +%{privlib}/CPAN.pm +%{_mandir}/man1/cpan.1* +%{_mandir}/man3/App::Cpan.* +%{_mandir}/man3/CPAN.* +%{_mandir}/man3/CPAN:* +%exclude %{privlib}/CPAN/Meta/ +%exclude %{privlib}/CPAN/Meta.pm +%exclude %{_mandir}/man3/CPAN::Meta* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files CPAN-Meta +%dir %{privlib}/CPAN/Meta +%{privlib}/CPAN/Meta.pm +%{privlib}/CPAN/Meta/Converter.pm +%{privlib}/CPAN/Meta/Feature.pm +%dir %{privlib}/CPAN/Meta/History +%{privlib}/CPAN/Meta/History.pm +%{privlib}/CPAN/Meta/Merge.pm +%{privlib}/CPAN/Meta/Prereqs.pm +%{privlib}/CPAN/Meta/Spec.pm +%{privlib}/CPAN/Meta/Validator.pm +%dir %{privlib}/Parse/ +%dir %{privlib}/Parse/CPAN/ +%{privlib}/Parse/CPAN/Meta.pm +%{_mandir}/man3/CPAN::Meta* +%{_mandir}/man3/Parse::CPAN::Meta.3* +%exclude %{_mandir}/man3/CPAN::Meta::YAML* +%exclude %{_mandir}/man3/CPAN::Meta::Requirements* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files CPAN-Meta-Requirements +%dir %{privlib}/CPAN +%dir %{privlib}/CPAN/Meta +%{privlib}/CPAN/Meta/Requirements.pm +%{_mandir}/man3/CPAN::Meta::Requirements.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files CPAN-Meta-YAML +%dir %{privlib}/CPAN +%dir %{privlib}/CPAN/Meta +%{privlib}/CPAN/Meta/YAML.pm +%{_mandir}/man3/CPAN::Meta::YAML* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Data-Dumper +%dir %{archlib}/auto/Data +%dir %{archlib}/auto/Data/Dumper +%{archlib}/auto/Data/Dumper/Dumper.so +%dir %{archlib}/Data +%{archlib}/Data/Dumper.pm +%{_mandir}/man3/Data::Dumper.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files DB_File +%{archlib}/DB_File.pm +%dir %{archlib}/auto/DB_File +%{archlib}/auto/DB_File/DB_File.so +%{_mandir}/man3/DB_File* +%endif + +%files Devel-Peek +%dir %{archlib}/Devel +%{archlib}/Devel/Peek.pm +%dir %{archlib}/auto/Devel +%{archlib}/auto/Devel/Peek +%{_mandir}/man3/Devel::Peek.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Devel-PPPort +%dir %{archlib}/Devel +%{archlib}/Devel/PPPort.pm +%{_mandir}/man3/Devel::PPPort.3* +%endif + +%files Devel-SelfStubber +%dir %{privlib}/Devel +%{privlib}/Devel/SelfStubber.pm +%{_mandir}/man3/Devel::SelfStubber.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Digest +%{privlib}/Digest.pm +%dir %{privlib}/Digest +%{privlib}/Digest/base.pm +%{privlib}/Digest/file.pm +%{_mandir}/man3/Digest.3* +%{_mandir}/man3/Digest::base.3* +%{_mandir}/man3/Digest::file.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Digest-MD5 +%dir %{archlib}/Digest +%{archlib}/Digest/MD5.pm +%dir %{archlib}/auto/Digest +%{archlib}/auto/Digest/MD5 +%{_mandir}/man3/Digest::MD5.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Digest-SHA +%{_bindir}/shasum +%dir %{archlib}/Digest +%{archlib}/Digest/SHA.pm +%dir %{archlib}/auto/Digest +%{archlib}/auto/Digest/SHA +%{_mandir}/man1/shasum.1* +%{_mandir}/man3/Digest::SHA.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Encode +%{_bindir}/encguess +%{_bindir}/piconv +%{archlib}/Encode* +%{archlib}/auto/Encode* +%{privlib}/Encode +%exclude %{privlib}/Encode/*.e2x +%exclude %{privlib}/Encode/encode.h +%{_mandir}/man1/encguess.1* +%{_mandir}/man1/piconv.1* +%{_mandir}/man3/Encode*.3* + +%files encoding +%{archlib}/encoding.pm +%{_mandir}/man3/encoding.3* + +%files Encode-devel +%{_bindir}/enc2xs +%dir %{privlib}/Encode +%{privlib}/Encode/*.e2x +%{privlib}/Encode/encode.h +%{_mandir}/man1/enc2xs.1* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Env +%{privlib}/Env.pm +%{_mandir}/man3/Env.3* +%endif + +%files Errno +%{archlib}/Errno.pm +%{_mandir}/man3/Errno.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Exporter +%{privlib}/Exporter* +%{_mandir}/man3/Exporter* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files experimental +%{privlib}/experimental* +%{_mandir}/man3/experimental* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files ExtUtils-CBuilder +%dir %{privlib}/ExtUtils +%{privlib}/ExtUtils/CBuilder +%{privlib}/ExtUtils/CBuilder.pm +%{_mandir}/man3/ExtUtils::CBuilder* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files ExtUtils-Command +%dir %{privlib}/ExtUtils +%{privlib}/ExtUtils/Command.pm +%{_mandir}/man3/ExtUtils::Command.* +%endif + +%files ExtUtils-Embed +%dir %{privlib}/ExtUtils +%{privlib}/ExtUtils/Embed.pm +%{_mandir}/man3/ExtUtils::Embed* + +%if %{dual_life} || %{rebuild_from_scratch} +%files ExtUtils-Install +%dir %{privlib}/ExtUtils +%{privlib}/ExtUtils/Install.pm +%{privlib}/ExtUtils/Installed.pm +%{privlib}/ExtUtils/Packlist.pm +%{_mandir}/man3/ExtUtils::Install.3* +%{_mandir}/man3/ExtUtils::Installed.3* +%{_mandir}/man3/ExtUtils::Packlist.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files ExtUtils-Manifest +%dir %{privlib}/ExtUtils +%{privlib}/ExtUtils/Manifest.pm +%{privlib}/ExtUtils/MANIFEST.SKIP +%{_mandir}/man3/ExtUtils::Manifest.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files ExtUtils-MakeMaker +%{_bindir}/instmodsh +%dir %{privlib}/ExtUtils +%{privlib}/ExtUtils/Command/ +%{privlib}/ExtUtils/Liblist +%{privlib}/ExtUtils/Liblist.pm +%{privlib}/ExtUtils/MakeMaker +%{privlib}/ExtUtils/MakeMaker.pm +%{privlib}/ExtUtils/MM.pm +%{privlib}/ExtUtils/MM_*.pm +%{privlib}/ExtUtils/MY.pm +%{privlib}/ExtUtils/Mkbootstrap.pm +%{privlib}/ExtUtils/Mksymlists.pm +%{privlib}/ExtUtils/testlib.pm +%{_mandir}/man1/instmodsh.1* +%{_mandir}/man3/ExtUtils::Command::MM* +%{_mandir}/man3/ExtUtils::Liblist.3* +%{_mandir}/man3/ExtUtils::MM.3* +%{_mandir}/man3/ExtUtils::MM_* +%{_mandir}/man3/ExtUtils::MY.3* +%{_mandir}/man3/ExtUtils::MakeMaker* +%{_mandir}/man3/ExtUtils::Mkbootstrap.3* +%{_mandir}/man3/ExtUtils::Mksymlists.3* +%{_mandir}/man3/ExtUtils::testlib.3* +%endif + +%files ExtUtils-Miniperl +%dir %{privlib}/ExtUtils +%{privlib}/ExtUtils/Miniperl.pm +%{_mandir}/man3/ExtUtils::Miniperl.3* + +%if %{dual_life} || %{rebuild_from_scratch} +%files ExtUtils-MM-Utils +%dir %{privlib}/ExtUtils +%dir %{privlib}/ExtUtils/MM +%{privlib}/ExtUtils/MM/Utils.pm +%{_mandir}/man3/ExtUtils::MM::Utils.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files ExtUtils-ParseXS +%dir %{privlib}/ExtUtils +%dir %{privlib}/ExtUtils/ParseXS +%{privlib}/ExtUtils/ParseXS.pm +%{privlib}/ExtUtils/ParseXS.pod +%{privlib}/ExtUtils/ParseXS/Constants.pm +%{privlib}/ExtUtils/ParseXS/CountLines.pm +%{privlib}/ExtUtils/ParseXS/Eval.pm +%{privlib}/ExtUtils/ParseXS/Utilities.pm +%dir %{privlib}/ExtUtils/Typemaps +%{privlib}/ExtUtils/Typemaps.pm +%{privlib}/ExtUtils/Typemaps/Cmd.pm +%{privlib}/ExtUtils/Typemaps/InputMap.pm +%{privlib}/ExtUtils/Typemaps/OutputMap.pm +%{privlib}/ExtUtils/Typemaps/Type.pm +%{privlib}/ExtUtils/xsubpp +%{_bindir}/xsubpp +%{_mandir}/man1/xsubpp* +%{_mandir}/man3/ExtUtils::ParseXS.3* +%{_mandir}/man3/ExtUtils::ParseXS::Constants.3* +%{_mandir}/man3/ExtUtils::ParseXS::Eval.3* +%{_mandir}/man3/ExtUtils::ParseXS::Utilities.3* +%{_mandir}/man3/ExtUtils::Typemaps.3* +%{_mandir}/man3/ExtUtils::Typemaps::Cmd.3* +%{_mandir}/man3/ExtUtils::Typemaps::InputMap.3* +%{_mandir}/man3/ExtUtils::Typemaps::OutputMap.3* +%{_mandir}/man3/ExtUtils::Typemaps::Type.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files File-Fetch +%dir %{privlib}/File +%{privlib}/File/Fetch.pm +%{_mandir}/man3/File::Fetch.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files File-Path +%dir %{privlib}/File +%{privlib}/File/Path.pm +%{_mandir}/man3/File::Path.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files File-Temp +%dir %{privlib}/File +%{privlib}/File/Temp.pm +%{_mandir}/man3/File::Temp.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Filter +%dir %{archlib}/auto/Filter +%{archlib}/auto/Filter/Util +%dir %{archlib}/Filter +%{archlib}/Filter/Util +%{privlib}/pod/perlfilter.pod +%{_mandir}/man1/perlfilter.* +%{_mandir}/man3/Filter::Util::* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Filter-Simple +%dir %{privlib}/Filter +%{privlib}/Filter/Simple.pm +%{_mandir}/man3/Filter::Simple.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Getopt-Long +%dir %{privlib}/Getopt +%{privlib}/Getopt/Long.pm +%{_mandir}/man3/Getopt::Long.3* +%endif + +%files IO +%dir %{archlib}/IO +%{archlib}/IO.pm +%{archlib}/IO/Dir.pm +%{archlib}/IO/File.pm +%{archlib}/IO/Handle.pm +%{archlib}/IO/Pipe.pm +%{archlib}/IO/Poll.pm +%{archlib}/IO/Seekable.pm +%{archlib}/IO/Select.pm +%dir %{archlib}/IO/Socket +%{archlib}/IO/Socket/INET.pm +%{archlib}/IO/Socket/UNIX.pm +%{archlib}/IO/Socket.pm +%dir %{archlib}/auto/IO +%{archlib}/auto/IO/IO.so +%{_mandir}/man3/IO.* +%{_mandir}/man3/IO::Dir.* +%{_mandir}/man3/IO::File.* +%{_mandir}/man3/IO::Handle.* +%{_mandir}/man3/IO::Pipe.* +%{_mandir}/man3/IO::Poll.* +%{_mandir}/man3/IO::Seekable.* +%{_mandir}/man3/IO::Select.* +%{_mandir}/man3/IO::Socket::INET.* +%{_mandir}/man3/IO::Socket::UNIX.* +%{_mandir}/man3/IO::Socket.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files IO-Compress +# IO-Compress +%{_bindir}/zipdetails +%dir %{privlib}/IO +%dir %{privlib}/IO/Compress +%{privlib}/IO/Compress/FAQ.pod +%{_mandir}/man1/zipdetails.* +%{_mandir}/man3/IO::Compress::FAQ.* +# Compress-Zlib +%dir %{privlib}/Compress +%{privlib}/Compress/Zlib.pm +%{_mandir}/man3/Compress::Zlib* +#IO-Compress-Base +%dir %{privlib}/File +%{privlib}/File/GlobMapper.pm +%dir %{privlib}/IO +%dir %{privlib}/IO/Compress +%{privlib}/IO/Compress/Base +%{privlib}/IO/Compress/Base.pm +%dir %{privlib}/IO/Uncompress +%{privlib}/IO/Uncompress/AnyUncompress.pm +%{privlib}/IO/Uncompress/Base.pm +%{_mandir}/man3/File::GlobMapper.* +%{_mandir}/man3/IO::Compress::Base.* +%{_mandir}/man3/IO::Uncompress::AnyUncompress.* +%{_mandir}/man3/IO::Uncompress::Base.* +# IO-Compress-Zlib +%dir %{privlib}/IO +%dir %{privlib}/IO/Compress +%{privlib}/IO/Compress/Adapter +%{privlib}/IO/Compress/Deflate.pm +%{privlib}/IO/Compress/Bzip2.pm +%{privlib}/IO/Compress/Gzip +%{privlib}/IO/Compress/Gzip.pm +%{privlib}/IO/Compress/RawDeflate.pm +%{privlib}/IO/Compress/Zip +%{privlib}/IO/Compress/Zip.pm +%{privlib}/IO/Compress/Zlib +%dir %{privlib}/IO/Uncompress +%{privlib}/IO/Uncompress/Adapter/ +%{privlib}/IO/Uncompress/AnyInflate.pm +%{privlib}/IO/Uncompress/Bunzip2.pm +%{privlib}/IO/Uncompress/Gunzip.pm +%{privlib}/IO/Uncompress/Inflate.pm +%{privlib}/IO/Uncompress/RawInflate.pm +%{privlib}/IO/Uncompress/Unzip.pm +%{_mandir}/man3/IO::Compress::Deflate* +%{_mandir}/man3/IO::Compress::Gzip* +%{_mandir}/man3/IO::Compress::Bzip2* +%{_mandir}/man3/IO::Compress::RawDeflate* +%{_mandir}/man3/IO::Compress::Zip* +%{_mandir}/man3/IO::Uncompress::AnyInflate* +%{_mandir}/man3/IO::Uncompress::Bunzip2* +%{_mandir}/man3/IO::Uncompress::Gunzip* +%{_mandir}/man3/IO::Uncompress::Inflate* +%{_mandir}/man3/IO::Uncompress::RawInflate* +%{_mandir}/man3/IO::Uncompress::Unzip* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files IO-Socket-IP +%dir %{privlib}/IO +%dir %{privlib}/IO/Socket +%{privlib}/IO/Socket/IP.pm +%{_mandir}/man3/IO::Socket::IP.* +%endif + +%files IO-Zlib +%dir %{privlib}/IO +%{privlib}/IO/Zlib.pm +%{_mandir}/man3/IO::Zlib.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files HTTP-Tiny +%dir %{privlib}/HTTP +%{privlib}/HTTP/Tiny.pm +%{_mandir}/man3/HTTP::Tiny* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files IPC-Cmd +%dir %{privlib}/IPC +%{privlib}/IPC/Cmd.pm +%{_mandir}/man3/IPC::Cmd.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files IPC-SysV +%{archlib}/auto/IPC +%dir %{archlib}/IPC +%{archlib}/IPC/Msg.pm +%{archlib}/IPC/Semaphore.pm +%{archlib}/IPC/SharedMem.pm +%{archlib}/IPC/SysV.pm +%{_mandir}/man3/IPC::Msg.* +%{_mandir}/man3/IPC::Semaphore.* +%{_mandir}/man3/IPC::SharedMem.* +%{_mandir}/man3/IPC::SysV.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files JSON-PP +%{_bindir}/json_pp +%dir %{privlib}/JSON +%{privlib}/JSON/PP +%{privlib}/JSON/PP.pm +%{_mandir}/man1/json_pp.1* +%{_mandir}/man3/JSON::PP.3* +%{_mandir}/man3/JSON::PP::Boolean.3pm* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files libnet +%dir %{privlib}/Net +%{privlib}/Net/Cmd.pm +%{privlib}/Net/Config.pm +%{privlib}/Net/Domain.pm +%{privlib}/Net/FTP +%{privlib}/Net/FTP.pm +%{privlib}/Net/libnetFAQ.pod +%{privlib}/Net/NNTP.pm +%{privlib}/Net/Netrc.pm +%{privlib}/Net/POP3.pm +%{privlib}/Net/SMTP.pm +%{privlib}/Net/Time.pm +%{_mandir}/man3/Net::Cmd.* +%{_mandir}/man3/Net::Config.* +%{_mandir}/man3/Net::Domain.* +%{_mandir}/man3/Net::FTP.* +%{_mandir}/man3/Net::libnetFAQ.* +%{_mandir}/man3/Net::NNTP.* +%{_mandir}/man3/Net::Netrc.* +%{_mandir}/man3/Net::POP3.* +%{_mandir}/man3/Net::SMTP.* +%{_mandir}/man3/Net::Time.* +%endif + +%files libnetcfg +%{_bindir}/libnetcfg +%{_mandir}/man1/libnetcfg* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Locale-Codes +%dir %{privlib}/Locale +%{privlib}/Locale/Codes +%{privlib}/Locale/Codes.* +%{privlib}/Locale/Country.* +%{privlib}/Locale/Currency.* +%{privlib}/Locale/Language.* +%{privlib}/Locale/Script.* +%{_mandir}/man3/Locale::Codes::* +%{_mandir}/man3/Locale::Codes.* +%{_mandir}/man3/Locale::Country.* +%{_mandir}/man3/Locale::Currency.* +%{_mandir}/man3/Locale::Language.* +%{_mandir}/man3/Locale::Script.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Locale-Maketext +%dir %{privlib}/Locale +%dir %{privlib}/Locale/Maketext +%{privlib}/Locale/Maketext.* +%{privlib}/Locale/Maketext/Cookbook.* +%{privlib}/Locale/Maketext/Guts.* +%{privlib}/Locale/Maketext/GutsLoader.* +%{privlib}/Locale/Maketext/TPJ13.* +%{_mandir}/man3/Locale::Maketext.* +%{_mandir}/man3/Locale::Maketext::Cookbook.* +%{_mandir}/man3/Locale::Maketext::Guts.* +%{_mandir}/man3/Locale::Maketext::GutsLoader.* +%{_mandir}/man3/Locale::Maketext::TPJ13.* +%endif + +%files Locale-Maketext-Simple +%dir %{privlib}/Locale +%dir %{privlib}/Locale/Maketext +%{privlib}/Locale/Maketext/Simple.pm +%{_mandir}/man3/Locale::Maketext::Simple.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Math-BigInt +%dir %{privlib}/Math +%{privlib}/Math/BigFloat.pm +%{privlib}/Math/BigInt.pm +%dir %{privlib}/Math/BigInt +%{privlib}/Math/BigInt/Calc.pm +%{privlib}/Math/BigInt/CalcEmu.pm +%{privlib}/Math/BigInt/Lib.pm +%{_mandir}/man3/Math::BigFloat.* +%{_mandir}/man3/Math::BigInt.* +%{_mandir}/man3/Math::BigInt::Calc.* +%{_mandir}/man3/Math::BigInt::CalcEmu.* +%{_mandir}/man3/Math::BigInt::Lib.* + +%files Math-BigInt-FastCalc +%{archlib}/Math +%{archlib}/auto/Math +%{_mandir}/man3/Math::BigInt::FastCalc.* + +%files Math-BigRat +%dir %{privlib}/Math +%{privlib}/Math/BigRat.pm +%{_mandir}/man3/Math::BigRat.* +%endif + +%files Math-Complex +%dir %{privlib}/Math +%{privlib}/Math/Complex.pm +%{privlib}/Math/Trig.pm +%{_mandir}/man3/Math::Complex.* +%{_mandir}/man3/Math::Trig.* + +%files Memoize +%{privlib}/Memoize +%{privlib}/Memoize.pm +%{_mandir}/man3/Memoize::* +%{_mandir}/man3/Memoize.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files MIME-Base64 +%{archlib}/auto/MIME +%{archlib}/MIME +%{_mandir}/man3/MIME::* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Module-CoreList +%dir %{privlib}/Module +%{privlib}/Module/CoreList +%{privlib}/Module/CoreList.pm +%{privlib}/Module/CoreList.pod +%{_mandir}/man3/Module::CoreList* + +%files Module-CoreList-tools +%{_bindir}/corelist +%{_mandir}/man1/corelist* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Module-Load +%dir %{privlib}/Module +%{privlib}/Module/Load.pm +%{_mandir}/man3/Module::Load.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Module-Load-Conditional +%dir %{privlib}/Module +%{privlib}/Module/Load +%{_mandir}/man3/Module::Load::Conditional* +%endif + +%files Module-Loaded +%dir %{privlib}/Module +%{privlib}/Module/Loaded.pm +%{_mandir}/man3/Module::Loaded* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Module-Metadata +%dir %{privlib}/Module +%{privlib}/Module/Metadata.pm +%{_mandir}/man3/Module::Metadata.3pm* +%endif + +%files Net-Ping +%dir %{privlib}/Net +%{privlib}/Net/Ping.pm +%{_mandir}/man3/Net::Ping.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files PathTools +%{archlib}/Cwd.pm +%dir %{archlib}/File +%{archlib}/File/Spec* +%{archlib}/auto/Cwd +%{_mandir}/man3/Cwd* +%{_mandir}/man3/File::Spec* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Params-Check +%{privlib}/Params/ +%{_mandir}/man3/Params::Check* +%endif + +%files open +%{privlib}/open.pm +%{_mandir}/man3/open.3* + +%if %{dual_life} || %{rebuild_from_scratch} +%files parent +%{privlib}/parent.pm +%{_mandir}/man3/parent.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files perlfaq +%{privlib}/perlfaq.pm +%dir %{privlib}/pod +%{privlib}/pod/perlfaq* +%{privlib}/pod/perlglossary.pod +%{_mandir}/man1/perlfaq* +%{_mandir}/man1/perlglossary.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files PerlIO-via-QuotedPrint +%{privlib}/PerlIO +%{_mandir}/man3/PerlIO::via::QuotedPrint.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Perl-OSType +%dir %{privlib}/Perl +%{privlib}/Perl/OSType.pm +%{_mandir}/man3/Perl::OSType.3pm* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Pod-Checker +%{_bindir}/podchecker +%dir %{privlib}/Pod +%{privlib}/Pod/Checker.pm +%{_mandir}/man1/podchecker.* +%{_mandir}/man3/Pod::Checker.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Pod-Escapes +%dir %{privlib}/Pod +%{privlib}/Pod/Escapes.pm +%{_mandir}/man3/Pod::Escapes.* +%endif + +%files Pod-Html +%license Pod-Html-license-clarification +%dir %{privlib}/Pod +%{_bindir}/pod2html +%{privlib}/Pod/Html.pm +%{_mandir}/man1/pod2html.1* +%{_mandir}/man3/Pod::Html.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Pod-Parser +%{_bindir}/podselect +%dir %{privlib}/Pod +%{privlib}/Pod/Find.pm +%{privlib}/Pod/InputObjects.pm +%{privlib}/Pod/ParseUtils.pm +%{privlib}/Pod/Parser.pm +%{privlib}/Pod/PlainText.pm +%{privlib}/Pod/Select.pm +%{_mandir}/man1/podselect.1* +%{_mandir}/man3/Pod::Find.* +%{_mandir}/man3/Pod::InputObjects.* +%{_mandir}/man3/Pod::ParseUtils.* +%{_mandir}/man3/Pod::Parser.* +%{_mandir}/man3/Pod::PlainText.* +%{_mandir}/man3/Pod::Select.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Pod-Perldoc +%{_bindir}/perldoc +%{privlib}/pod/perldoc.pod +%dir %{privlib}/Pod +%{privlib}/Pod/Perldoc +%{privlib}/Pod/Perldoc.pm +%{_mandir}/man1/perldoc.1* +%{_mandir}/man3/Pod::Perldoc* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Pod-Usage +%{_bindir}/pod2usage +%dir %{privlib}/Pod +%{privlib}/Pod/Usage.pm +%{_mandir}/man1/pod2usage.* +%{_mandir}/man3/Pod::Usage.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files podlators +%{_bindir}/pod2man +%{_bindir}/pod2text +%{privlib}/pod/perlpodstyle.pod +%dir %{privlib}/Pod +%{privlib}/Pod/Man.pm +%{privlib}/Pod/ParseLink.pm +%{privlib}/Pod/Text +%{privlib}/Pod/Text.pm +%{_mandir}/man1/pod2man.1* +%{_mandir}/man1/pod2text.1* +%{_mandir}/man1/perlpodstyle.1* +%{_mandir}/man3/Pod::Man* +%{_mandir}/man3/Pod::ParseLink* +%{_mandir}/man3/Pod::Text* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Pod-Simple +%dir %{privlib}/Pod +%{privlib}/Pod/Simple +%{privlib}/Pod/Simple.pm +%{privlib}/Pod/Simple.pod +%{_mandir}/man3/Pod::Simple* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Scalar-List-Utils +%{archlib}/List +%{archlib}/Scalar +%{archlib}/Sub +%{archlib}/auto/List +%{_mandir}/man3/List::Util* +%{_mandir}/man3/Scalar::Util* +%{_mandir}/man3/Sub::Util* +%endif + +%files SelfLoader +%{privlib}/SelfLoader.pm +%{_mandir}/man3/SelfLoader* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Sys-Syslog +%dir %{archlib}/Sys +%{archlib}/Sys/Syslog.pm +%dir %{archlib}/auto/Sys +%{archlib}/auto/Sys/Syslog +%{_mandir}/man3/Sys::Syslog.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Socket +%dir %{archlib}/auto/Socket +%{archlib}/auto/Socket/Socket.* +%{archlib}/Socket.pm +%{_mandir}/man3/Socket.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Storable +%{archlib}/Storable.pm +%{archlib}/auto/Storable +%{_mandir}/man3/Storable.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Term-ANSIColor +%dir %{privlib}/Term +%{privlib}/Term/ANSIColor.pm +%{_mandir}/man3/Term::ANSIColor* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Term-Cap +%dir %{privlib}/Term +%{privlib}/Term/Cap.pm +%{_mandir}/man3/Term::Cap.* +%endif + +%files Test +%{privlib}/Test.pm +%{_mandir}/man3/Test.* + +%if %{dual_life} || %{rebuild_from_scratch} +%files Test-Harness +%{_bindir}/prove +%dir %{privlib}/App +%{privlib}/App/Prove* +%{privlib}/TAP* +%dir %{privlib}/Test +%{privlib}/Test/Harness* +%{_mandir}/man1/prove.1* +%{_mandir}/man3/App::Prove* +%{_mandir}/man3/TAP* +%{_mandir}/man3/Test::Harness* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Test-Simple +%{privlib}/ok* +%dir %{privlib}/Test +%{privlib}/Test/More* +%{privlib}/Test/Builder* +%{privlib}/Test/Tester* +%{privlib}/Test/Simple* +%{privlib}/Test/Tutorial* +%{privlib}/Test/use +%{privlib}/Test2* +%{_mandir}/man3/ok* +%{_mandir}/man3/Test::More* +%{_mandir}/man3/Test::Builder* +%{_mandir}/man3/Test::Tester* +%{_mandir}/man3/Test::Simple* +%{_mandir}/man3/Test::Tutorial* +%{_mandir}/man3/Test::use::* +%{_mandir}/man3/Test2* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Text-Balanced +%dir %{privlib}/Text +%{privlib}/Text/Balanced.pm +%{_mandir}/man3/Text::Balanced.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Text-ParseWords +%dir %{privlib}/Text +%{privlib}/Text/ParseWords.pm +%{_mandir}/man3/Text::ParseWords.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Text-Tabs+Wrap +%dir %{privlib}/Text +%{privlib}/Text/Tabs.pm +%{privlib}/Text/Wrap.pm +%{_mandir}/man3/Text::Tabs.* +%{_mandir}/man3/Text::Wrap.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Thread-Queue +%dir %{privlib}/Thread +%{privlib}/Thread/Queue.pm +%{_mandir}/man3/Thread::Queue.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Time-HiRes +%dir %{archlib}/Time +%{archlib}/Time/HiRes.pm +%dir %{archlib}/auto/Time +%{archlib}/auto/Time/HiRes +%{_mandir}/man3/Time::HiRes.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Time-Local +%dir %{privlib}/Time +%{privlib}/Time/Local.pm +%{_mandir}/man3/Time::Local.* +%endif + +%files Time-Piece +%dir %{archlib}/Time +%{archlib}/Time/Piece.pm +%{archlib}/Time/Seconds.pm +%dir %{archlib}/auto/Time +%{archlib}/auto/Time/Piece +%{_mandir}/man3/Time::Piece.3* +%{_mandir}/man3/Time::Seconds.3* + +%if %{dual_life} || %{rebuild_from_scratch} +%files threads +%dir %{archlib}/auto/threads +%{archlib}/auto/threads/threads* +%{archlib}/threads.pm +%{_mandir}/man3/threads.3* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files threads-shared +%dir %{archlib}/auto/threads +%{archlib}/auto/threads/shared* +%dir %{archlib}/threads +%{archlib}/threads/shared* +%{_mandir}/man3/threads::shared* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Unicode-Collate +%dir %{archlib}/auto/Unicode +%{archlib}/auto/Unicode/Collate +%dir %{archlib}/Unicode +%{archlib}/Unicode/Collate +%{archlib}/Unicode/Collate.pm +%dir %{privlib}/Unicode +%{privlib}/Unicode/Collate +%{_mandir}/man3/Unicode::Collate.* +%{_mandir}/man3/Unicode::Collate::* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files Unicode-Normalize +%dir %{archlib}/auto/Unicode +%{archlib}/auto/Unicode/Normalize +%dir %{archlib}/Unicode +%{archlib}/Unicode/Normalize.pm +%{_mandir}/man3/Unicode::Normalize.* +%endif + +%if %{dual_life} || %{rebuild_from_scratch} +%files version +%{privlib}/version.pm +%{privlib}/version.pod +%{privlib}/version/ +%{_mandir}/man3/version.3* +%{_mandir}/man3/version::Internals.3* +%endif + +# Old changelog entries are preserved in CVS. +%changelog +* Mon Oct 18 2021 Jitka Plesnikova - 4:5.26.3-421 +- Fix a memory leak when compiling a regular expression with a non-word + class (bug #2014981) + +* Thu Jun 17 2021 Jitka Plesnikova - 4:5.26.3-420 +- Fix _resolv return value in Net-Ping (bug #1973030) + +* Wed Jan 06 2021 Jitka Plesnikova - 4:5.26.3-419 +- Fix CVE-2020-10543 (bug #1839273) +- Fix CVE-2020-10878 (bug #1839276) +- Fix a file mode of a perl-example.stp example (bug #1913693) + +* Fri Dec 18 2020 Petr Pisar - 4:5.26.3-418 +- Fix CVE-2020-12723 (bug #1839279) + +* Thu Dec 03 2020 Jitka Plesnikova - 4:5.26.3-417 +- Fix Time-Local tests to pass after year 2019 (bug #1807120) +- Run-require perl(Encode) by perl-libs (bug #1903503) + +* Thu Dec 06 2018 Jitka Plesnikova - 4:5.26.3-416 +- 5.26.3 bump (bug #1655526) +- Fix CVE-2018-18311 (integer overflow leading to buffer overflow) (bug #1654920) +- Fix CVE-2018-18312 (heap buffer overflow in regcomp.c) (bug #1654922) +- Fix CVE-2018-18313 (heap buffer overflow read in regcomp.c) (bug #1654924) +- Fix CVE-2018-18314 (heap based buffer overflow) (bug #1654925) + +* Fri Nov 02 2018 Petr Pisar - 4:5.26.2-415 +- Install Encode developmental files when installing complete Perl + (bug #1645225) + +* Tue Oct 02 2018 Jitka Plesnikova - 4:5.26.2-414 +- Fix annocheck failure by passing CFLAGS to dtrace (bug #1630617) + +* Mon Jul 09 2018 Petr Pisar - 4:5.26.2-413 +- Adjust tests to gdbm-1.15 (RT#133295) +- Fix an integer wrap when allocating memory for an environment variable + (RT#133204) +- Fix printing a warning about a wide character when matching a regular + expression while ISO-8859-1 locale is in effect +- Fix invoking a check for wide characters while ISO-8859-1 locale is in effect + +* Fri May 25 2018 Petr Pisar - 4:5.26.2-412 +- perl-devel requires redhat-rpm-config because of hardened compiler profiles + (bug #1557667) +- Do not clobber file bytes in :encoding layer (RT#132833) +- Fix line numbers in multi-line s/// (RT#131930) +- Fix parsing extended bracketed character classes (RT#132167) +- Fix a possibly unitialized memory read in the Perl parser (RT#133074) +- Fix an infinite loop in the regular expression compiler (RT#133185) + +* Fri May 18 2018 Jitka Plesnikova - 4:5.26.2-411 +- Correct license tags of perl-libs (bug #1579524) + +* Mon Apr 16 2018 Petr Pisar - 4:5.26.2-410 +- 5.26.2 bump +- Fix CVE-2018-6913 (heap buffer overflow in pp_pack.c) (bug #1567776) +- Fix CVE-2018-6798 (heap read overflow in regexec.c) (bug #1567777) +- Fix CVE-2018-6797 (heap write overflow in regcomp.c) (bug #1567778) + +* Thu Mar 1 2018 Florian Weimer - 4:5.26.1-409 +- Rebuild to pick up new build flags from redhat-rpm-config + +* Fri Feb 09 2018 Igor Gnatenko - 4:5.26.1-408 +- Escape macros in %%changelog + +* Tue Feb 06 2018 Petr Pisar - 4:5.26.1-407 +- Fix parsing braced subscript after parentheses (RT#8045) +- Fix a heap use after free when moving a stack (RT#131954) +- Call ldconfig scriptlets using a macro + +* Thu Feb 01 2018 Petr Pisar - 4:5.26.1-406 +- Correct shell bangs in tests + +* Mon Jan 29 2018 Petr Pisar - 4:5.26.1-405 +- Link XS modules to pthread library to fix linking with -z defs + +* Sat Jan 20 2018 Björn Esser - 4:5.26.1-404 +- Add patch to conditionalize a fix for an old and long fixed bug + in libcrypt / glibc (rhbz#1536752) + +* Mon Jan 15 2018 Petr Pisar - 4:5.26.1-403 +- Rebuild against glibc without nsl library + +* Tue Jan 09 2018 Petr Pisar - 4:5.26.1-402 +- Remove invalid macro definitions from macros.perl (bug #1532539) +- Fix an overflow in the lexer when reading a new line (RT#131793) +- Fix Term::ReadLine not to create spurious &STDERR files (RT#132008) +- Fix a crash when a match for inversely repeated group fails (RT#132017) +- Fix an overflow when parsing a character range with no preceding character + (RT#132245) +- Fix walking symbol table for ISA in Carp +- Fix handling file names with null bytes in stat and lstat functions + (RT#131895) +- Fix a crash when untying an object witout a stash +- Fix deparsing of transliterations with unprintable characters (RT#132405) +- Fix error reporting on do() on a directory (RT#125774) +- Fix stack manipulation when a lexical subroutine is defined in a do block in + a member of an iteration list (RT#132442) +- Fix setting $! when statting a closed file handle (RT#108288) +- Fix tainting of s/// with overloaded replacement (RT#115266) +- Expand system() arguments before a fork (RT#121105) +- Avoid undefined behavior when copying memory in Glob and pp_caller (RT#131746) + +* Mon Sep 25 2017 Jitka Plesnikova - 4:5.26.1-401 +- Update perl(:MODULE_COMPAT) + +* Mon Sep 25 2017 Jitka Plesnikova - 4:5.26.1-400 +- 5.26.1 bump (see + for release notes) + +* Tue Aug 22 2017 Petr Pisar - 4:5.26.0-399 +- Fix unreliable Time-HiRes tests (CPAN RT#122819) +- Do not require $Config{libs} providers by perl-devel package (bug #1481324) + +* Tue Aug 08 2017 Petr Pisar - 4:5.26.0-398 +- Fix reporting malformed UTF-8 character (RT#131646) +- Fix File::Glob rt131211.t test random failures +- Fix t/op/hash.t test random failures +- Parse caret variables with subscripts as normal variables inside ${...} + escaping (RT#131664) +- Do not display too many bytes when reporting malformed UTF-8 character +- Fix select called with a repeated magical variable (RT#131645) +- Fix error message for "our sub foo::bar" (RT#131679) +- Fix executing arybase::_tie_it() in Safe compartement (RT#131588) +- Fix handling attribute specification on our variables (RT#131597) +- Fix splitting non-ASCII strings if unicode_strings feature is enabled (RT#130907) +- Fix compiler warnings in code generated by ExtUtils::Constant + (CPAN RT#63832, CPAN RT#101487) +- Fix GCC version detection for -D_FORTIFY_SOURCE override (RT#131809) + +* Sat Jul 29 2017 Igor Gnatenko - 4:5.26.0-397 +- Enable separate debuginfo back + +* Thu Jul 27 2017 Fedora Release Engineering - 4:5.26.0-396 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jun 28 2017 Petr Pisar - 4:5.26.0-395 +- perl package installs all core modules, interpreter moved to + perl-interpreter package, perl-core package is obsolete + + (bug #1464903) + +* Mon Jun 19 2017 Petr Pisar - 4:5.26.0-394 +- Make File::Glob more resistant against degenerative matching (RT#131211) +- Fix a crash when calling a subroutine from a stash (RT#131085) +- Fix an improper cast of a negative integer to an unsigned 8-bit type (RT#131190) +- Fix cloning :via handles on thread creation (RT#131221) +- Fix glob UTF-8 flag on a glob reassignment (RT#131263) +- Fix a buffer overflow in my_atof2() (RT#131526) +- Fix handling backslashes in PATH environment variable when executing + "perl -S" (RT#129183) +- Fix a conditional jump on uninitilized memory in re_intuit_start() (RT#131575) +- Fix spurious "Assuming NOT a POSIX class" warning (RT#131522) +- Provide perl-interpreter RPM dependency symbol + + +* Tue Jun 06 2017 Jitka Plesnikova - 4:5.26.0-393 +- Stop providing old perl(MODULE_COMPAT_5.24.*) + +* Thu Jun 01 2017 Jitka Plesnikova - 4:5.26.0-392 +- 5.26.0 bump (see + for release notes) +- Update sub-packages +- Update or remove patches +- Enable hardening (bug #1238804) +- Use 64 bit ints on 32 bit platforms (bug #1268828) + +* Fri Mar 31 2017 Petr Pisar - 4:5.24.1-391 +- Introduce build-conditions for groff, systemtap, syslog tests, and tcsh + +* Wed Mar 08 2017 Petr Pisar - 4:5.24.1-390 +- Fix a null-pointer dereference on malformed code (RT#130815) +- Fix an use-after-free in substr() that modifies a magic variable (RT#129340) +- Fix a memory leak leak in Perl_reg_named_buff_fetch() (RT#130822) +- Fix an invalid memory read when parsing a loop variable (RT#130814) +- Fix a heap-use-after-free in four-arguments substr call (RT#130624) + +* Fri Feb 17 2017 Petr Pisar - 4:5.24.1-389 +- Adapt Compress::Raw::Zlib to zlib-1.2.11 (bug #1420326) +- Fix a heap buffer overflow when evaluating regexps with embedded code blocks + from more than one source (RT#129881) +- Fix a memory leak in list assignment from or to magic values (RT#130766) + +* Fri Feb 10 2017 Petr Pisar - 4:5.24.1-388 +- Adapt tests to zlib-1.2.11 (bug #1420326) +- Fix a crash when compiling a regexp with impossible quantifiers (RT#130561) +- Fix a buffer overrun with format and "use bytes" (RT#130703) +- Fix a buffer overflow when studying some regexps repeatedly + (RT#129281, RT#129061) + +* Thu Jan 26 2017 Petr Pisar - 4:5.24.1-387 +- Fix UTF-8 string handling in & operator (RT#129287) +- Fix recreation of *:: (RT#129869) +- Fix a memory leak in B::RHE->HASH method (RT#130504) +- Fix parsing goto statements in multicalled subroutine (RT#113938) +- Fix a heap overlow in parsing $# (RT#129274) + +* Fri Jan 20 2017 Petr Pisar - 4:5.24.1-386 +- Fix a buffer overflow in split in scalar context (RT#130262) +- Fix a heap overflow with pack "W" (RT129149) +- Fix a use-after-free when processing scalar variables in forms (RT#129125) +- Fix a heap overflow if invalid octal or hexadecimal number is used in + transliteration expression (RT#129342) +- Fix out-of-bound read in case of unmatched regexp backreference (RT#129377) + +* Mon Jan 16 2017 Jitka Plesnikova - 4:5.24.1-385 +- 5.24.1 bump (see + for release notes) + +* Thu Jan 12 2017 Igor Gnatenko - 4:5.24.0-384 +- Rebuild for readline 7.x + +* Fri Jan 06 2017 Petr Pisar - 4:5.24.0-383 +- Remove bundled Math-BigInt-FastCalc (bug #1408463) +- Remove bundled Math-BigRat (bug #1408467) +- Remove bundled bignum (bug #1409585) + +* Mon Dec 19 2016 Petr Pisar - 4:5.24.0-382 +- Fix a crash in optimized evaluation of "or ((0) x 0))" (RT#130247) +- Fix a memory leak in IO::Poll (RT#129788) +- Fix regular expression matching (RT#130307) + +* Thu Dec 01 2016 Petr Pisar - 4:5.24.0-381 +- Fix crash in Storable when deserializing malformed code reference + (RT#68348, RT#130098) +- Fix crash on explicit return from regular expression substitution (RT#130188) +- Tighten dependencies between architecture specific sub-packages to ISA +- Fix assigning split() return values to an array +- Fix const correctness in hv_func.h (bug #1242980) + +* Wed Nov 09 2016 Petr Pisar - 4:5.24.0-380 +- Tie perl-Errno release to interpreter build because of kernel version check + (bug #1393421) + +* Thu Nov 03 2016 Petr Pisar - 4:5.24.0-379 +- Fix crash in "evalbytes S" (RT#129196) +- Fix crash in splice (RT#129164, RT#129166, RT#129167) +- Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267) +- Fix crash when matching UTF-8 string with non-UTF-8 substrings (RT#129350) +- Fix parsing perl options in shell bang line (RT#129336) +- Fix firstchar bitmap under UTF-8 with prefix optimization (RT#129950) +- Avoid infinite loop in h2xs tool if enum and type have the same name + (RT130001) +- Fix stack handling when calling chdir without an argument (RT#129130) + +* Fri Sep 02 2016 Petr Pisar - 4:5.24.0-378 +- perl-core depends on Parse::CPAN::Meta module instead of package name to allow + upgrading perl-CPAN-Meta to 2.150010 (bug #1370681) + +* Tue Aug 02 2016 Jitka Plesnikova - 4:5.24.0-377 +- Avoid loading of modules from current directory, CVE-2016-1238, (bug #1360425) + +* Thu Jul 28 2016 Petr Pisar - 4:5.24.0-376 +- Fix handling \N{} in tr for characters in range 128--255 (RT#128734) + +* Tue Jul 26 2016 Petr Pisar - 4:5.24.0-375 +- Fix building without perl in the build root +- Own systemtap directories by perl-devel + +* Tue Jul 12 2016 Petr Pisar - 4:5.24.0-374 +- Fix a crash in lexical scope warnings (RT#128597) + +* Fri Jul 08 2016 Petr Pisar - 4:5.24.0-373 +- Fix a crash in "Subroutine redefined" warning (RT#128257) + +* Thu Jul 07 2016 Petr Pisar - 4:5.24.0-372 +- Fix a crash when vivifying a stub in a deleted package (RT#128532) + +* Thu Jul 07 2016 Jitka Plesnikova - 4:5.24.0-371 +- Do not let XSLoader load relative paths (CVE-2016-6185) + +* Mon Jul 04 2016 Petr Pisar - 4:5.24.0-370 +- Fix line numbers with perl -x (RT#128508) + +* Fri Jun 24 2016 Petr Pisar - 4:5.24.0-369 +- Do not crash when inserting a non-stash into a stash (RT#128238) + +* Wed Jun 22 2016 Petr Pisar - 4:5.24.0-368 +- Do not use unitialized memory in $h{\const} warnings (RT#128189) +- Fix precedence in hv_ename_delete (RT#128086) +- Do not treat %%: as a stash (RT#128238) + +* Mon Jun 20 2016 Petr Pisar - 4:5.24.0-367 +- Fix compiling regular expressions like /\X*(?0)/ (RT#128109) + +* Thu Jun 16 2016 Petr Pisar - 4:5.24.0-366 +- Do not mangle errno from failed socket calls (RT#128316) + +* Tue Jun 14 2016 Petr Pisar - 4:5.24.0-365 +- Fix a memory leak when compiling a regular expression with a POSIX class + (RT#128313) + +* Thu May 19 2016 Petr Pisar - 4:5.24.0-364 +- Remove reflexive dependencies +- Use pregenerated dependencies on bootstrapping +- Specify more build-time dependencies + +* Wed May 18 2016 Jitka Plesnikova - 4:5.24.0-363 +- Stop providing old perl(MODULE_COMPAT_5.22.*) +- Update license tags + +* Wed May 11 2016 Jitka Plesnikova - 4:5.24.0-362 +- 5.24.0 bump (see + for release notes) +- Update sub-packages; Update or remove patches + +* Mon May 02 2016 Jitka Plesnikova - 4:5.22.6-361 +- 5.22.2 bump (see + for release notes) + +* Mon Apr 18 2016 Petr Pisar - 4:5.22.1-360 +- Weak perl-Encode-devel dependency on perl-devel to Recommends level + (bug #1129443) +- Remove perl-ExtUtils-ParseXS dependency on perl-devel (bug #1129443) +- Require perl-devel by perl-ExtUtils-MakeMaker +- Provide MM::maybe_command independently (bug #1129443) +- Replace ExtUtils::MakeMaker dependency with ExtUtils::MM::Utils in IPC::Cmd + (bug #1129443) +- Remove perl-ExtUtils-Install dependency on perl-devel (bug #1129443) +- Remove perl-ExtUtils-Manifest dependency on perl-devel (bug #1129443) + +* Tue Mar 15 2016 Petr Pisar - 4:5.22.1-359 +- Do not filter FCGI dependency, CGI is non-core now + +* Fri Mar 04 2016 Petr Pisar - 4:5.22.1-358 +- Remove bundled perl-IPC-SysV (bug #1308527) + +* Wed Mar 02 2016 Petr Pisar - 4:5.22.1-357 +- Fix CVE-2016-2381 (ambiguous environment variables handling) (bug #1313702) + +* Thu Feb 04 2016 Fedora Release Engineering - 4:5.22.1-356 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Dec 15 2015 Petr Pisar - 4:5.22.1-355 +- Remove bundled Math-BigInt (bug #1277203) + +* Mon Dec 14 2015 Jitka Plesnikova - 5.22.1-354 +- 5.22.1 bump (see + for release notes) + +* Tue Oct 20 2015 Petr Pisar - 4:5.22.0-353 +- Rebuild to utilize perl(:VERSION) dependency symbol + +* Tue Oct 13 2015 Petr Pisar - 4:5.22.0-352 +- Do not own IO::Socket::IP manual page by perl-IO + +* Fri Oct 09 2015 Petr Pisar - 4:5.22.0-351 +- Sub-package Attribute-Handlers +- Sub-package Devel-Peek +- Sub-package Devel-SelfStubber +- Sub-package SelfLoader +- Sub-package IO +- Sub-package Errno +- Correct perl-Digest-SHA dependencies +- Correct perl-Pod-Perldoc dependencies +- Move utf8 and dependencies to perl-libs +- Correct perl-devel and perl-CPAN dependencies +- Sub-package IPC-SysV +- Sub-package Test +- Sub-package utilities (splain) into perl-utils +- Provide perl version in perl(:VERSION) dependency symbol + +* Fri Aug 07 2015 Petr Pisar - 4:5.22.0-350 +- Sub-package Memoize +- Sub-package Net-Ping +- Sub-package Pod-Html + +* Thu Jul 16 2015 Petr Pisar - 4:5.22.0-349 +- Disable hardening due to some run-time failures (bug #1238804) + +* Mon Jul 13 2015 Petr Pisar - 4:5.22.0-348 +- Sub-package bignum +- Sub-package Math-BigRat +- Sub-package Math-BigInt-FastCalc +- Sub-package Math-Complex +- Remove bundled perl-Config-Perl-V (bug #1238203) +- Remove bundled perl-MIME-Base64 (bug #1238222) +- Remove bundled perl-PerlIO-via-QuotedPrint (bug #1238229) +- Remove bundled perl-Pod-Escapes (bug #1238237) +- Remove bundled perl-Term-Cap (bug #1238248) +- Remove bundled perl-Text-Balanced (bug #1238269) +- Remove bundled perl-libnet (bug #1238689) +- Remove bundled perl-perlfaq (bug #1238703) +- Remove bundled perl-Unicode-Normalize (bug #1238730) +- Remove bundled perl-Unicode-Collate (bug #1238760) + +* Wed Jul 08 2015 Petr Pisar - 4:5.22.0-347 +- Store distribution's linker and compiler flags to more Config's options + in order to apply them when linking executable programs (bug #1238804) +- Sub-package Config-Perl-V (bug #1238203) +- Sub-package MIME-Base64 (bug #1238222) +- Sub-package PerlIO-via-QuotedPrint (bug #1238229) +- Update Pod-Escapes metadata (bug #1238237) +- Sub-package Term-Cap (bug #1238248) +- Sub-package Text-Balanced (bug #1238269) +- Sub-package libnet (bug #1238689) +- Sub-package perlfaq (bug #1238703) +- Sub-package Unicode-Normalize (bug #1238730) +- Sub-package Unicode-Collate (bug #1238760) +- Sub-package Math-BigInt +- Do not provide Net/libnet.cfg (bug #1238689) +- Revert downstream change in Net::Config default configuration +- Move libnetcfg tool from perl-devel into perl-libnetcfg sub-package + +* Thu Jun 18 2015 Petr Pisar - 4:5.22.0-346 +- Subpackage "open" module in order to keep deprecated "encoding" module + optional (bug #1228378) +- Control building dual-lived sub-packages by perl_bootstrap macro +- Make PadlistNAMES() lvalue again (bug #1231165) +- Make magic vtable writable as a work-around for Coro (bug #1231165) +- Explain file break-down into RPM packages in perl package description + +* Thu Jun 18 2015 Fedora Release Engineering - 4:5.22.0-345 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Jun 10 2015 Jitka Plesnikova - 4:5.22.0-244 +- Stop providing old perl(MODULE_COMPAT_5.20.*) + +* Thu Jun 04 2015 Jitka Plesnikova - 4:5.22.0-243 +- Move ok and Test::Use::ok to perl-Test-Simple + +* Wed Jun 03 2015 Jitka Plesnikova - 4:5.22.0-242 +- Move bin/encguess to perl-Encode + +* Mon Jun 01 2015 Jitka Plesnikova - 4:5.22.0-241 +- 5.22.0 bump (see + for release notes) +- Update sub-packages and erase the removed modules from the core +- Clean patches, not needed with new version +- Update patches to work with new version + +* Wed Apr 15 2015 Jitka Plesnikova - 4:5.20.2-328 +- Sub-package perl-CGI-Fast and perl-Module-Build-Deprecated +- Add missing dual-life modules to perl-core + +* Thu Apr 02 2015 Petr Šabata - 4:5.20.2-327 +- Bump to make koji happy + +* Thu Apr 02 2015 Petr Šabata - 4:5.20.2-326 +- Correct license tags of the main package, CGI, Compress-Raw-Zlib, + Digest-MD5, Test-Simple and Time-Piece +- Package a Pod-Html license clarification email + +* Wed Mar 25 2015 Petr Pisar - 4:5.20.2-325 +- Sub-package Text-Tabs+Wrap (bug #910798) + +* Thu Mar 19 2015 Lubomir Rintel - 4:5.20.2-324 +- Add systemtap probes for new dtrace markers + +* Mon Mar 16 2015 Petr Pisar - 4:5.20.2-323 +- Move perl(:MODULE_COMPAT_*) symbol and include directories to perl-libs + package (bug #1174951) + +* Sat Feb 21 2015 Till Maas - 4:5.20.2-322 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Wed Feb 18 2015 Jitka Plesnikova - 4:5.20.2-321 +- Provide 5.20.2 MODULE_COMPAT +- Clean list of provided files +- Update names of changed patches + +* Tue Feb 17 2015 Jitka Plesnikova - 4:5.20.2-320 +- 5.20.2 bump (see + for release notes) +- Regenerate a2p.c (BZ#1177672) + +* Mon Feb 16 2015 Petr Pisar - 4:5.20.1-319 +- Improve h2ph fix for GCC 5.0 + +* Thu Feb 12 2015 Petr Pisar - 4:5.20.1-318 +- Fix regressions with GCC 5.0 + +* Tue Feb 03 2015 Jitka Plesnikova - 4:5.20.1-317 +- Sub-package inc-latest module + +* Fri Jan 23 2015 Petr Pisar - 4:5.20.1-316 +- Delete dual-living programs clashing on debuginfo files (bug #878863) + +* Mon Dec 01 2014 Petr Pisar - 4:5.20.1-315 +- Report inaccesible file on failed require (bug #1166504) +- Use stronger algorithm needed for FIPS in t/op/taint.t (bug #1128032) + +* Wed Nov 19 2014 Petr Pisar - 4:5.20.1-314 +- Consider Filter::Util::Call dependency as mandatory (bug #1165183) +- Sub-package encoding module +- Own upper directories by each package that installs a file there and + remove empty directories (bug #1165013) + +* Thu Nov 13 2014 Petr Pisar - 4:5.20.1-313 +- Freeze epoch at perl-Pod-Checker and perl-Pod-Usage (bug #1163490) +- Remove bundled perl-ExtUtils-Command (bug #1158536) +- Remove bundled perl-Filter-Simple (bug #1158542) + +* Wed Nov 12 2014 Petr Pisar - 4:5.20.1-312 +- Do not double-own perl-Pod-Usage' and perl-Pod-Checker' files by + perl-Pod-Parser on bootstrap +- Sub-package ExtUtils-Command (bug #1158536) +- Sub-package Filter-Simple (bug #1158542) +- Build-require groff-base instead of big groff + +* Wed Oct 29 2014 Petr Pisar - 4:5.20.1-311 +- Remove bundled perl-Devel-PPPort (bug #1143999) +- Remove bundled perl-B-Debug (bug #1142952) +- Remove bundled perl-ExtUtils-CBuilder (bug #1144033) +- Remove bundled perl-ExtUtils-Install (bug #1144068) + +* Thu Oct 23 2014 Petr Pisar - 4:5.20.1-310 +- Move all Module-CoreList files into perl-Module-CoreList +- Sub-package corelist(1) into perl-Module-CoreList-tools (bug #1142757) +- Remove bundled perl-Module-CoreList, and perl-Module-CoreList-tools + (bug #1142757) +- Sub-package Devel-PPPort (bug #1143999) +- Sub-package B-Debug (bug #1142952) +- Use native version for perl-ExtUtils-CBuilder +- Specify all dependencies for perl-ExtUtils-Install (bug #1144068) +- Require perl-ExtUtils-ParseXS by perl-ExtUtils-MakeMaker because of xsubpp + +* Tue Sep 16 2014 Petr Šabata - 4:5.20.1-309 +- Provide 5.20.0 MODULE_COMPAT + +* Mon Sep 15 2014 Jitka Plesnikova - 4:5.20.1-308 +- 5.20.1 bump (see + for release notes) +- Sub-package perl-ExtUtils-Miniperl (bug #1141222) + +* Wed Sep 10 2014 Petr Pisar - 4:5.20.0-307 +- Specify all dependencies for perl-CPAN (bug #1090112) +- Disable non-core modules at perl-CPAN when bootstrapping +- Remove bundled perl-CPAN (bug #1090112) + +* Sun Sep 07 2014 Jitka Plesnikova - 4:5.20.0-306 +- Stop providing old perl(MODULE_COMPAT_5.18.*) + +* Mon Aug 18 2014 Jitka Plesnikova - 4:5.20.0-305 +- Update to Perl 5.20.0 +- Clean patches, not needed with new version +- Update patches to work with new version +- Update version of sub-packages, remove the deleted sub-packages +- Sub-package perl-IO-Socket-IP, perl-experimental +- Disable BR perl(local::lib) for cpan tool when bootstraping + +* Sun Aug 17 2014 Fedora Release Engineering - 4:5.18.2-304 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Aug 08 2014 Petr Pisar - 4:5.18.2-303 +- Declare dependencies for cpan tool (bug #1122498) +- Use stronger algorithm needed for FIPS in t/op/crypt.t (bug #1128032) +- Make *DBM_File desctructors thread-safe (bug #1107543) + +* Tue Jul 29 2014 Jitka Plesnikova - 4:5.18.2-302 +- Sub-package perl-Term-ANSIColor and remove it (bug #1121924) + +* Fri Jun 27 2014 Petr Pisar - 4:5.18.2-301 +- Remove bundled perl-App-a2p, perl-App-find2perl, perl-App-s2p, and + perl-Package-Constants +- Correct perl-App-s2p license to ((GPL+ or Artistic) and App-s2p) + +* Thu Jun 19 2014 Petr Pisar - 4:5.18.2-300 +- Sub-package perl-App-find2perl (bug #1111196) +- Sub-package perl-App-a2p (bug #1111232) +- Sub-package perl-App-s2p (bug #1111242) + +* Sat Jun 07 2014 Fedora Release Engineering - 4:5.18.2-299 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Apr 10 2014 Petr Pisar - 4:5.18.2-298 +- Pass -fwrapv to stricter GCC 4.9 (bug #1082957) + +* Fri Apr 04 2014 Petr Pisar - 4:5.18.2-297 +- Fix t/comp/parser.t not to load system modules (bug #1084399) + +* Mon Feb 03 2014 Petr Pisar - 4:5.18.2-296 +- Move macro files into %%{_rpmconfigdir}/macros.d + +* Wed Jan 29 2014 Petr Pisar - 4:5.18.2-295 +- Provide perl(CPAN::Meta::Requirements) with six decimal places + +* Tue Jan 21 2014 Petr Pisar - 4:5.18.2-294 +- Drop perl-Test-Simple-tests package is it is not delivered by dual-lived + version +- Hide dual-lived perl-Object-Accessor + +* Tue Jan 14 2014 Petr Pisar - 4:5.18.2-293 +- Use a macro to cover all 64-bit PowerPC architectures (bug #1052709) + +* Tue Jan 14 2014 Petr Pisar - 4:5.18.2-292 +- Use upstream patch to fix a test failure in perl5db.t when TERM=vt100 + +* Tue Dec 10 2013 Jitka Plesnikova - 4:5.18.2-291 +- 5.18.2 bump (see + for release notes) + +* Mon Dec 02 2013 Petr Pisar - 4:5.18.1-290 +- Document Math::BigInt::CalcEmu requires Math::BigInt (bug #959096) + +* Tue Oct 22 2013 Petr Pisar - 4:5.18.1-289 +- perl_default_filter macro does not need to filter private libraries from + provides (bug #1020809) +- perl_default_filter anchors the filter regular expressions +- perl_default_filter appends the filters instead of redefining them + +* Mon Sep 09 2013 Jitka Plesnikova - 4:5.18.1-288 +- Fix rules for parsing numeric escapes in regexes (bug #978233) +- Fix crash with \&$glob_copy (bug #989486) +- Fix coreamp.t's rand test (bug #970567) +- Reap child in case where exception has been thrown (bug #988805) +- Fix using regexes with multiple code blocks (bug #982131) + +* Tue Aug 13 2013 Jitka Plesnikova - 4:5.18.1-287 +- 5.18.1 bump (see + for release notes) +- Disable macro %%{rebuild_from_scratch} +- Fix regex seqfault 5.18 regression (bug #989921) +- Fixed interpolating downgraded variables into upgraded (bug #970913) +- SvTRUE returns correct value (bug #967463) +- Fixed doc command in perl debugger (bug #967461) +- Fixed unaligned access in slab allocator (bug #964950) + +* Sat Aug 03 2013 Fedora Release Engineering - 4:5.18.0-286 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jul 15 2013 Petr Pisar - 4:5.18.0-285 +- Stop providing old perl(MODULE_COMPAT_5.16.*) + +* Fri Jul 12 2013 Petr Pisar - 4:5.18.0-284 +- Perl 5.18 rebuild + +* Tue Jul 09 2013 Petr Pisar - 4:5.18.0-283 +- Define SONAME for libperl.so and move the libary into standard path +- Link XS modules to libperl.so on Linux (bug #960048) + +* Mon Jul 08 2013 Petr Pisar - 4:5.18.0-282 +- Do not load system Term::ReadLine::Gnu while running tests +- Disable ornaments on perl5db AutoTrace tests + +* Thu Jul 04 2013 Jitka Plesnikova - 4:5.18.0-281 +- Update to Perl 5.18.0 +- Clean patches, not needed with new version + +* Wed Jun 26 2013 Petr Pisar - 4:5.16.3-280 +- Edit local patch level before compilation + +* Fri Jun 14 2013 Petr Pisar - 4:5.16.3-279 +- Do not distribute File::Spec::VMS (bug #973713) +- Remove bundled CPANPLUS-Dist-Build (bug #973041) + +* Wed Jun 12 2013 Petr Pisar - 4:5.16.3-278 +- Update SystemTap scripts to recognize new phase__change marker and new probe + arguments (bug #971094) +- Update h2ph(1) documentation (bug #948538) +- Update pod2html(1) documentation (bug #948538) +- Do not double-own archlib directory (bug #894195) + +* Tue Jun 11 2013 Petr Pisar - 4:5.16.3-277 +- Move CPANPLUS-Dist-Build files from perl-CPANPLUS +- Move CPAN-Meta-Requirements files from CPAN-Meta +- Add perl-Scalar-List-Utils to perl-core dependencies + +* Thu Jun 06 2013 Petr Pisar - 4:5.16.3-276 +- Require $Config{libs} providers (bug #905482) + +* Thu May 30 2013 Petr Pisar - 4:5.16.3-275 +- Correct typo in perl-Storable file list (bug #966865) +- Remove bundled Storable (bug #966865) + +* Wed May 29 2013 Petr Pisar - 4:5.16.3-274 +- Sub-package Storable (bug #966865) + +* Mon May 13 2013 Petr Pisar - 4:5.16.3-273 +- Use lib64 directories on aarch64 architecture (bug #961900) + +* Fri May 10 2013 Petr Pisar - 4:5.16.3-272 +- Make regular expression engine safe in a signal handler (bug #849703) +- Remove bundled ExtUtils-ParseXS, and Time-HiRes + +* Fri Apr 26 2013 Petr Pisar - 4:5.16.3-271 +- Sub-package Time-HiRes (bug #957048) +- Remove bundled Getopt-Long, Locale-Maketext, and Sys-Syslog + +* Wed Apr 10 2013 Petr Pisar - 4:5.16.3-270 +- Fix leaking tied hashes (bug #859910) +- Fix dead lock in PerlIO after fork from thread (bug #947444) +- Add proper conflicts to perl-Getopt-Long, perl-Locale-Maketext, and + perl-Sys-Syslog + +* Tue Apr 09 2013 Petr Pisar - 4:5.16.3-269 +- Sub-package Sys-Syslog (bug #950057) + +* Fri Apr 05 2013 Petr Pisar - 4:5.16.3-268 +- Sub-package Getopt-Long (bug #948855) +- Sub-package Locale-Maketext (bug #948974) + +* Fri Apr 05 2013 Petr Pisar - 4:5.16.3-267 +- Remove bundled constant, DB_File, Digest-MD5, Env, Exporter, File-Path, + File-Temp, Module-Load, Log-Message-Simple, Pod-Simple, Test-Harness, + Text-ParseWords + +* Mon Mar 25 2013 Petr Pisar - 4:5.16.3-266 +- Filter provides from *.pl files (bug #924938) + +* Fri Mar 22 2013 Petr Pisar - 4:5.16.3-265 +- Conflict perl-autodie with older perl (bug #911226) +- Sub-package Env (bug #924619) +- Sub-package Exporter (bug #924645) +- Sub-package File-Path (bug #924782) +- Sub-package File-Temp (bug #924822) + +* Thu Mar 21 2013 Petr Pisar - 4:5.16.3-264 +- Sub-package constant (bug #924169) +- Sub-package DB_File (bug #924351) + +* Tue Mar 19 2013 Petr Pisar - 4:5.16.3-263 +- Correct perl-Digest-MD5 dependencies +- Remove bundled Archive-Extract, File-Fetch, HTTP-Tiny, + Module-Load-Conditional, Time-Local + +* Fri Mar 15 2013 Petr Pisar - 4:5.16.3-262 +- Correct dependencies of perl-HTTP-Tiny +- Sub-package Time-Local (bug #922054) + +* Thu Mar 14 2013 Petr Pisar - 4:5.16.3-261 +- 5.16.3 bump (see + for release notes) +- Remove bundled autodie, B-Lint, CPANPLUS, Encode, File-CheckTree, IPC-Cmd, + Params-Check, Text-Soundex, Thread-Queue + +* Tue Mar 05 2013 Petr Pisar - 4:5.16.2-260 +- Fix CVE-2013-1667 (DoS in rehashing code) (bug #918008) + +* Mon Feb 18 2013 Petr Pisar - 4:5.16.2-259 +- Sub-package autodie (bug #911226) +- Add NAME headings to CPAN modules (bug #908113) + +* Thu Feb 14 2013 Petr Pisar - 4:5.16.2-258 +- Fix perl-Encode-devel dependency declaration + +* Thu Feb 14 2013 Petr Pisar - 4:5.16.2-257 +- Sub-package Thread-Queue (bug #911062) + +* Wed Feb 13 2013 Petr Pisar - 4:5.16.2-256 +- Sub-package File-CheckTree (bug #909144) +- Sub-package Text-ParseWords +- Sub-package Encode (bug #859149) + +* Fri Feb 08 2013 Petr Pisar - 4:5.16.2-255 +- Remove bundled Log-Message +- Remove bundled Term-UI + +* Thu Feb 07 2013 Petr Pisar - 4:5.16.2-254 +- Correct perl-podlators dependencies +- Obsolete perl-ExtUtils-Typemaps by perl-ExtUtils-ParseXS (bug #891952) + +* Tue Feb 05 2013 Petr Pisar - 4:5.16.2-253 +- Sub-package Pod-Checker and Pod-Usage (bugs #907546, #907550) + +* Mon Feb 04 2013 Petr Pisar - 4:5.16.2-252 +- Remove bundled PathTools + +* Wed Jan 30 2013 Petr Pisar - 4:5.16.2-251 +- Sub-package B-Lint (bug #906015) + +* Wed Jan 30 2013 Petr Pisar - 4:5.16.2-250 +- Sub-package Text-Soundex (bug #905889) +- Fix conflict declaration at perl-Pod-LaTeX (bug #904085) +- Remove bundled Module-Pluggable (bug #903624) + +* Tue Jan 29 2013 Petr Pisar - 4:5.16.2-249 +- Run-require POD convertors by Module-Build and ExtUtils-MakeMaker to + generate documentation when building other packages + +* Fri Jan 25 2013 Petr Pisar - 4:5.16.2-248 +- Sub-package Pod-LaTeX (bug #904085) + +* Wed Jan 16 2013 Petr Pisar - 4:5.16.2-247 +- Remove bundled Pod-Parser + +* Fri Jan 11 2013 Petr Pisar - 4:5.16.2-246 +- Fix CVE-2012-6329 (misparsing of maketext strings) (bug #884354) + +* Thu Jan 10 2013 Petr Pisar - 4:5.16.2-245 +- Do not package App::Cpan(3pm) to perl-Test-Harness (bug #893768) + +* Tue Dec 18 2012 Petr Pisar - 4:5.16.2-244 +- Remove bundled Archive-Tar +- Remove bundled CPAN-Meta-YAML +- Remove bundled Module-Metadata + +* Tue Dec 18 2012 Petr Pisar - 4:5.16.2-243 +- Remove bundled Filter modules + +* Mon Nov 05 2012 Jitka Plesnikova - 4:5.16.2-242 +- 5.16.2 bump (see + http://search.cpan.org/dist/perl-5.16.1/pod/perldelta.pod for release + notes) + +* Wed Oct 31 2012 Petr Pisar - 4:5.16.1-241 +- Remove bundled podlators (bug #856516) + +* Wed Oct 17 2012 Jitka Plesnikova - 4:5.16.1-240 +- Do not crash when vivifying $| (bug #865296) + +* Mon Sep 24 2012 Petr Pisar - 4:5.16.1-239 +- Conflict perl-podlators with perl before sub-packaging (bug #856516) + +* Fri Sep 21 2012 Petr Pisar - 4:5.16.1-238 +- Do not leak with attribute on my variable (bug #858966) +- Allow operator after numeric keyword argument (bug #859328) +- Extend stack in File::Glob::glob (bug #859332) + +* Thu Sep 20 2012 Petr Pisar - 4:5.16.1-237 +- Put perl-podlators into perl-core list (bug #856516) + +* Tue Sep 18 2012 Petr Pisar - 4:5.16.1-236 +- Remove bundled perl-ExtUtils-Manifest +- perl-PathTools uses Carp + +* Fri Sep 14 2012 Petr Pisar - 4:5.16.1-235 +- Override the Pod::Simple::parse_file to set output to STDOUT by default + (bug #826872) + +* Wed Sep 12 2012 Petr Pisar - 4:5.16.1-234 +- Sub-package perl-podlators (bug #856516) + +* Tue Sep 11 2012 Petr Pisar - 4:5.16.1-233 +- Do not access freed memory when cloning thread (bug #825749) +- Match non-breakable space with /[\h]/ in ASCII mode (bug #844919) +- Clear $@ before `do' I/O error (bug #834226) +- Do not truncate syscall() return value to 32 bits (bug #838551) + +* Wed Sep 05 2012 Petr Pisar - 4:5.16.1-232 +- Move App::Cpan from perl-Test-Harness to perl-CPAN (bug #854577) + +* Fri Aug 24 2012 Petr Pisar - 4:5.16.1-231 +- Remove perl-devel dependency from perl-Test-Harness and perl-Test-Simple + +* Mon Aug 13 2012 Marcela Mašláňová - 4:5.16.0-230 +- define perl_compat by macro for rebuilds +- sub-packages depend on compat rather than on nvr + +* Thu Aug 9 2012 Marcela Mašláňová - 4:5.16.0-229 +- apply conditionals for dual life patches + +* Thu Aug 09 2012 Jitka Plesnikova 4:5.16.1-228 +- 5.16.1 bump (see + http://search.cpan.org/dist/perl-5.16.1/pod/perldelta.pod for release + notes) +- Fixed reopening by scalar handle (bug #834221) +- Fixed tr/// multiple transliteration (bug #831679) +- Fixed heap-overflow in gv_stashpv (bug #826516) + +* Fri Jul 20 2012 Fedora Release Engineering - 4:5.16.0-227 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jul 13 2012 Paul Howarth 4:5.16.0-226 +- Move the rest of ExtUtils-ParseXS into its sub-package, so that the main + perl package doesn't need to pull in perl-devel (bug #839953) + +* Mon Jul 02 2012 Jitka Plesnikova 4:5.16.0-225 +- Fix broken atof (bug #835452) + +* Wed Jun 27 2012 Petr Pisar - 4:5.16.0-224 +- perl-Pod-Perldoc must require groff-base because Pod::Perldoc::ToMan executes + roff + +* Mon Jun 25 2012 Petr Pisar - 4:5.16.0-223 +- Test::Build requires Data::Dumper +- Sub-package perl-Pod-Parser + +* Thu Jun 07 2012 Petr Pisar - 4:5.16.0-222 +- Remove MODULE_COMPAT_5.14.* Provides + +* Wed Jun 06 2012 Petr Pisar - 4:5.16.0-221 +- Perl 5.16 rebuild + +* Wed Jun 06 2012 Petr Pisar - 4:5.16.0-220 +- perl_bootstrap macro is distributed in perl-srpm-macros now + +* Fri Jun 01 2012 Petr Pisar - 4:5.16.0-219 +- Own zipdetails and IO::Compress::FAQ by perl-IO-Compress + +* Fri Jun 1 2012 Jitka Plesnikova - 4:5.16.0-218 +- Fix find2perl to translate ? glob properly (bug #825701) + +* Thu May 31 2012 Petr Pisar - 4:5.16.0-218 +- Shorten perl-Module-Build version to 2 digits to follow upstream + +* Fri May 25 2012 Marcela Mašláňová - 4:5.16.0-217 +- upload the stable 5.16.0 + +* Wed May 16 2012 Marcela Mašláňová - 4:5.16.0-RC2-217 +- clean patches, not needed with new version +- regen by podcheck list of failed pods. cn, jp, ko pods failed. I can't decide + whether it's a real problem or false positives. + +* Mon Apr 30 2012 Petr Pisar - 4:5.14.2-216 +- Enable usesitecustomize + +* Thu Apr 19 2012 Petr Pisar - 4:5.14.2-215 +- Rebuild perl against Berkeley database version 5 (bug #768846) + +* Fri Apr 13 2012 Petr Pisar - 4:5.14.2-214 +- perl-Data-Dumper requires Scalar::Util (bug #811239) + +* Tue Apr 10 2012 Petr Pisar - 4:5.14.2-213 +- Sub-package Data::Dumper (bug #811239) + +* Tue Feb 21 2012 Petr Pisar - 4:5.14.2-212 +- Sub-package Filter (bug #790349) + +* Mon Feb 06 2012 Petr Pisar - 4:5.14.2-211 +- Fix searching for Unicode::Collate::Locale data (bug #756118) +- Run safe signal handlers before returning from sigsuspend() and pause() + (bug #771228) +- Correct perl-Scalar-List-Utils files list +- Stop !$^V from leaking (bug #787613) + +* Tue Jan 10 2012 Paul Howarth - 4:5.14.2-210 +- Rebuild again now that perl dependency generator is fixed (#772632, #772699) + +* Fri Jan 06 2012 Iain Arnell -4:5.14.2-209 +- perl-ExtUtils-MakeMaker sub-package requires ExtUtils::Install + +* Fri Jan 6 2012 Paul Howarth - 4:5.14.2-208 +- Rebuild for gcc 4.7 + +* Tue Dec 20 2011 Petr Pisar - 4:5.14.2-207 +- Fix interrupted reading. Thanks to Šimon Lukašík for reporting this issue + and thanks to Marcela Mašláňová for finding fix. (bug #767931) + +* Wed Dec 14 2011 Petr Pisar - 4:5.14.2-206 +- Fix leak with non-matching named captures (bug #767597) + +* Tue Nov 29 2011 Petr Pisar - 4:5.14.2-205 +- Sub-package ExtUtils::Install +- Sub-package ExtUtils::Manifest +- Do not provide private perl(ExtUtils::MakeMaker::_version) + +* Thu Nov 24 2011 Ville Skyttä - 4:5.14.2-204 +- Add $RPM_LD_FLAGS to lddlflags. + +* Wed Nov 23 2011 Petr Pisar - 4:5.14.2-203 +- Sub-package Socket + +* Mon Nov 21 2011 Petr Pisar - 4:5.14.2-202 +- Sub-package Pod::Perldoc + +* Fri Nov 18 2011 Petr Pisar - 4:5.14.2-201 +- Increase epoch of perl-Module-CoreList to overcome version regression in + upstream (bug #754641) + +* Thu Nov 3 2011 Marcela Mašláňová - 4:5.14.2-200 +- perl(DBIx::Simple) is not needed in spec requirement in CPANPLUS. It's generated + automatically. + +* Wed Nov 02 2011 Petr Pisar - 4:5.14.2-199 +- Provide perl(DB) by perl + +* Mon Oct 24 2011 Petr Pisar - 4:5.14.2-198 +- Do not warn about missing site directories (bug #732799) + +* Thu Oct 20 2011 Marcela Mašláňová - 4:5.14.2-197 +- cleaned spec (thanks to Grigory Batalov) +- Module-Metadata sub-package contained perl_privlib instead of privlib +- %%files parent section was repeated twice + +* Fri Oct 14 2011 Petr Pisar - 4:5.14.2-196 +- Filter false perl(DynaLoader) provide from perl-ExtUtils-MakeMaker + (bug #736714) +- Change Perl_repeatcpy() prototype to allow repeat count above 2^31 + (bug #720610) +- Do not own site directories located in /usr/local (bug #732799) + +* Tue Oct 04 2011 Petr Pisar - 4:5.14.2-195 +- Fix CVE-2011-3597 (code injection in Digest) (bug #743010) +- Sub-package Digest and thus Digest::MD5 module (bug #743247) + +* Tue Oct 04 2011 Iain Arnell 4:5.14.2-194 +- add provide for perl(:MODULE_COMPAT_5.14.2) + +* Mon Oct 03 2011 Petr Pisar - 4:5.14.2-193 +- 5.14.2 bump (see + https://metacpan.org/module/FLORA/perl-5.14.2/pod/perldelta.pod for release + notes). +- Fixes panics when processing regular expression with \b class and /aa + modifier (bug #731062) +- Fixes CVE-2011-2728 (File::Glob bsd_glob() crash with certain glob flags) + (bug #742987) + +* Mon Oct 03 2011 Petr Pisar - 4:5.14.1-192 +- Enable GDBM support again to build against new gdbm 1.9.1 + +* Fri Sep 30 2011 Petr Pisar - 4:5.14.1-191 +- Disable NDBM support temporarily too as it's provided by gdbm package + +* Wed Sep 21 2011 Petr Pisar - 4:5.14.1-190 +- Disable GDBM support temporarily to build new GDBM + +* Thu Sep 15 2011 Petr Pisar - 4:5.14.1-189 +- Correct perl-CGI list of Provides +- Make tests optional +- Correct perl-ExtUtils-ParseXS Provides +- Correct perl-Locale-Codes Provides +- Correct perl-Module-CoreList version +- Automate perl-Test-Simple-tests Requires version + +* Tue Sep 13 2011 Petr Pisar - 4:5.14.1-188 +- Make gdbm support optional to bootstrap with new gdbm +- Split Carp into standalone sub-package to dual-live with newer versions + (bug #736768) + +* Tue Aug 30 2011 Petr Pisar - 4:5.14.1-187 +- Split Locale::Codes into standalone sub-package to dual-live with newer + versions (bug #717863) + +* Sun Aug 14 2011 Iain Arnell 4:5.14.1-186 +- perl needs to own vendorarch/auto directory + +* Fri Aug 05 2011 Petr Sabata - 4:5.14.1-185 +- Move xsubpp to ExtUtils::ParseXS (#728393) + +* Fri Jul 29 2011 Iain Arnell 4:5.14.1-184 +- fix Compress-Raw-Bzip2 pacakging +- ensure that we never bundle bzip2 or zlib + +* Tue Jul 26 2011 Marcela Mašláňová - 4:5.14.1-183 +- remove from provides MODULE_COMPAT 5.12.* + +* Fri Jul 22 2011 Paul Howarth - 4:5.14.1-182 +- Have perl-Module-Build explicitly require perl(CPAN::Meta) >= 2.110420, + needed for creation of MYMETA files by Build.PL; the dual-life version of + the package already has this dependency + +* Tue Jul 19 2011 Petr Sabata - 4:5.14.1-181 +- Temporarily provide 5.12.* MODULE_COMPAT + +* Sat Jul 16 2011 Iain Arnell 4:5.14.1-180 +- fix escaping of the __provides_exclude_from macro + +* Wed Jul 13 2011 Iain Arnell 4:5.14.1-179 +- Parse-CPAN-Meta explicitly requires CPAN::Meta::YAML and JSON::PP +- Exclude CPAN::Meta* from CPAN sub-package +- Don't try to normalize CPAN-Meta, JSON-PP, and Parse-CPAN-Meta versions; + their dual-life packages aren't and have much higher numbers already + +* Mon Jun 27 2011 Marcela Mašláňová - 4:5.14.1-178 +- update macros -> add %%perl_bootstrap 1 and example for readability +- add into Module::Build dependency on perl-devel (contains macros.perl) +- create new sub-package macros, because we need macros in minimal buildroot + +* Thu Jun 23 2011 Marcela Mašláňová - 4:5.14.1-175 +- remove from macros BSD, because there exists BSD::Resources + +* Tue Jun 21 2011 Marcela Mašláňová - 4:5.14.1-174 +- remove old MODULE_COMPATs + +* Mon Jun 20 2011 Iain Arnell 4:5.14.1-173 +- move ptargrep to Archive-Tar sub-package +- fix version numbers in last two changelog entries + +* Mon Jun 20 2011 Paul Howarth - 4:5.14.1-172 +- add provide for perl(:MODULE_COMPAT_5.14.1) + +* Mon Jun 20 2011 Marcela Mašláňová - 4:5.14.1-171 +- update to 5.14.1 - no new modules, just serious bugfixes and doc +- switch off fork test, which is failing only on koji + +* Thu Jun 16 2011 Marcela Mašláňová - 4:5.14.0-170 +- try to update to latest ExtUtils::MakeMaker, no luck -> rebuild with current + version, fix bug RT#67618 in modules + +* Wed Jun 15 2011 Marcela Mašláňová - 4:5.14.0-169 +- filter even Mac:: requires, polish filter again for correct installation +- add sub-package Compress-Raw-Bzip2, solve Bzip2 conflicts after install +- and add IO::Uncompress::Bunzip2 correctly into IO-Compress + +* Mon Jun 13 2011 Marcela Mašláňová - 4:5.14.0-167 +- Perl 5.14 mass rebuild, bump release, remove releases in subpackages + +* Thu Jun 09 2011 Marcela Mašláňová - 4:5.14.0-165 +- Perl 5.14 mass rebuild + +* Thu Jun 09 2011 Marcela Mašláňová - 4:5.14.0-163 +- Perl 5.14 mass rebuild + +* Thu Jun 9 2011 Marcela Mašláňová - 4:5.14.0-162 +- add new sub-packages, remove BR in them + +* Wed Jun 1 2011 Marcela Mašláňová - 4:5.14.0-161 +- arm can't do parallel builds +- add require EE::MM into IPC::Cmd 711486 + +* Mon May 16 2011 Marcela Mašláňová - 4:5.14.0-161 +- test build of released 5.14.0 +- remove Class::ISA from sub-packages +- patches 8+ are part of new release +- remove vendorarch/auto/Compress/Zlib + +* Wed Apr 13 2011 Marcela Mašláňová - 4:5.12.3-160 +- add provides UNIVERSAL and DB back into perl + +* Thu Apr 07 2011 Petr Pisar - 4:5.12.3-159 +- Remove rpath-make patch because we use --enable-new-dtags linker option + +* Fri Apr 1 2011 Marcela Mašláňová - 4:5.12.3-158 +- 692900 - lc launders tainted flag, RT #87336 + +* Fri Apr 1 2011 Robin Lee - 4:5.12.3-157 +- Cwd.so go to the PathTools sub-package + +* Tue Mar 15 2011 Marcela Mašláňová - 4:5.12.3-156 +- sub-package Path-Tools + +* Sat Feb 19 2011 Iain Arnell 4:5.12.3-154 +- sub-package Scalar-List-Utils + +* Tue Feb 08 2011 Fedora Release Engineering - 4:5.12.3-153 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jan 27 2011 Petr Pisar - 4:5.12.3-152 +- Document ExtUtils::ParseXS upgrade in local patch tracking + +* Wed Jan 26 2011 Tom Callaway - 4:5.12.3-151 +- update ExtUtils::ParseXS to 2.2206 (current) to fix Wx build + +* Wed Jan 26 2011 Petr Pisar - 4:5.12.3-150 +- Make %%global perl_default_filter lazy +- Do not hard-code tapsetdir path + +* Tue Jan 25 2011 Lukas Berk - 4:5.12.3-149 +- added systemtap tapset to make use of systemtap-sdt-devel +- added an example systemtap script + +* Mon Jan 24 2011 Marcela Mašláňová - 4:5.12.3-148 +- stable update 5.12.3 +- add COMPAT + +* Thu Dec 9 2010 Marcela Mašláňová - 4:5.12.2-146 +- 463773 revert change. txt files are needed for example by UCD::Unicode, + PDF::API2,... + +* Thu Dec 9 2010 Marcela Mašláňová - 4:5.12.2-145 +- required systemtap-sdt-devel on request in 661553 + +* Mon Nov 29 2010 Marcela Mašláňová - 4:5.12.2-144 +- create sub-package for CGI 3.49 + +* Tue Nov 09 2010 Petr Pisar - 4:5.12.2-143 +- Sub-package perl-Class-ISA (bug #651317) + +* Mon Nov 08 2010 Petr Pisar - 4:5.12.2-142 +- Make perl(ExtUtils::ParseXS) version 4 digits long (bug #650882) + +* Tue Oct 19 2010 Marcela Mašláňová - 4:5.12.2-141 +- 643447 fix redefinition of constant C in h2ph (visible in git send mail, + XML::Twig test suite) +- remove ifdef for s390 + +* Thu Oct 07 2010 Petr Pisar - 4:5.12.2-140 +- Package Test-Simple tests to dual-live with standalone package (bug #640752) + +* Wed Oct 6 2010 Marcela Mašláňová - 4:5.12.2-139 +- remove removal of NDBM + +* Tue Oct 05 2010 Petr Pisar - 4:5.12.2-138 +- Consolidate Requires filtering +- Consolidate libperl.so* Provides + +* Fri Oct 1 2010 Marcela Mašláňová - 4:5.12.2-137 +- filter useless requires, provide libperl.so + +* Fri Oct 01 2010 Petr Pisar - 4:5.12.2-136 +- Reformat perl-threads description +- Fix threads directories ownership + +* Thu Sep 30 2010 Marcela Mašláňová - 4:5.12.2-135 +- sub-package threads + +* Thu Sep 23 2010 Marcela Mašláňová - 4:5.12.2-134 +- add vendor path, clean paths in Configure in spec file +- create sub-package threads-shared + +* Tue Sep 7 2010 Petr Pisar - 4:5.12.2-133 +- Do not leak when destroying thread (RT #77352, RHBZ #630667) + +* Tue Sep 7 2010 Petr Sabata - 5:5.12.2-132 +- Fixing release number for modules + +* Tue Sep 7 2010 Petr Sabata - 4:5.12.2-1 +- Update to 5.12.2 +- Removed one hardcoded occurence of perl version in build process +- Added correct path to dtrace binary +- BuildRequires: systemtap-sdt-devel + +* Tue Sep 7 2010 Marcela Mašláňová - 4:5.12.1-131 +- run Configure with -Dusedtrace for systemtap support + +* Wed Aug 18 2010 Petr Pisar - 4:5.12.1-130 +- Run tests in parallel +- Add "-Wl,--enable-new-dtags" to linker to allow to override perl's rpath by + LD_LIBRARY_PATH used in tests. Otherwise tested perl would link to old + in-system libperl.so. +- Normalize spec file indentation + +* Mon Jul 26 2010 Marcela Mašláňová - 4:5.12.1-129 +- 617956 move perlxs* docs files into perl-devel + +* Thu Jul 15 2010 Marcela Mašláňová - 4:5.12.1-128 +- 614662 wrong perl-suidperl version in obsolete + +* Sun Jul 11 2010 Dan Horák - 4:5.12.1-127 +- add temporary compat provides needed on s390(x) + +* Fri Jul 09 2010 Petr Pisar - 4:5.12.1-126 +- Add Digest::SHA requirement to perl-CPAN and perl-CPANPLUS (bug #612563) + +* Thu Jul 8 2010 Marcela Mašláňová - 4:5.12.1-125 +- 607505 add another dir into Module::Build (thanks to Paul Howarth) + +* Mon Jun 28 2010 Ralf Corsépius - 4:5.12.1-124 +- Address perl-Compress-Raw directory ownership (BZ 607881). + +* Thu Jun 10 2010 Marcela Mašláňová - 4:5.12.1-123 +- remove patch with debugging symbols, which should be now ok without it +- update to 5.12.1 +- MODULE_COMPAT + +* Tue Apr 27 2010 Marcela Mašláňová - 4:5.12.0-122 +- packages in buildroot needs MODULE_COMPAT 5.10.1, add it back for rebuild + +* Sun Apr 25 2010 Marcela Mašláňová - 4:5.12.0-121 +- rebuild with tests in test buildroot + +* Fri Apr 23 2010 Marcela Mašláňová - 4:5.12.0-120-test +- MODULE_COMPAT 5.12.0 +- remove BR man +- clean configure +- fix provides/requires in IO-Compress + +* Wed Apr 14 2010 Marcela Mašláňová - 4:5.12.0-119.1 +- rebuild 5.12.0 without MODULE_COMPAT + +* Wed Apr 14 2010 Marcela Mašláňová - 4:5.12.0-119 +- initial 5.12.0 build + +* Tue Apr 6 2010 Marcela Mašláňová - 4:5.10.1-118 +- 463773 remove useless txt files from installation +- 575842 remove PERL_USE_SAFE_PUTENV, use perl putenv + +* Tue Mar 16 2010 Chris Weyl - 4:5.10.1-117 +- package tests in their own subpackage + +* Mon Mar 15 2010 Marcela Mašláňová - 4:5.10.1-116 +- add noarch into correct sub-packages +- move Provides/Obsoletes into correct modules from main perl + +* Thu Mar 11 2010 Paul Howarth - 4:5.10.1-115 +- restore missing version macros for Compress::Raw::Zlib, IO::Compress::Base + and IO::Compress::Zlib + +* Thu Mar 11 2010 Marcela Mašláňová - 4:5.10.1-114 +- clean spec a little more +- rebuild with new gdbm + +* Fri Mar 5 2010 Marcela Mašláňová - 4:5.10.1-112 +- fix license according to advice from legal +- clean unused patches + +* Wed Feb 24 2010 Chris Weyl - 4:5.10.1-111 +- update subpackage tests macros to handle packages with an epoch properly + +* Fri Feb 05 2010 Chris Weyl - 4:5.10.1-110 +- add initial EXPERIMENTAL tests subpackage rpm macros to macros.perl + +* Tue Dec 22 2009 Marcela Mašláňová - 4:5.10.1-109 +- 547656 CVE-2009-3626 perl: regexp matcher crash on invalid UTF-8 characters +- 549306 version::Internals should be packaged in perl-version subpackage +- Parse-CPAN-Meta updated and separate package is dead + +* Mon Dec 21 2009 Chris Weyl - 4:5.10.1-107 +- subpackage parent and Parse-CPAN-Meta; add them to core's dep list + +* Fri Dec 18 2009 Ralf Corsépius - 4:5.10.1-106 +- exclude "parent". + +* Fri Dec 18 2009 Ralf Corsépius - 4:5.10.1-105 +- exclude Parse-CPAN-Meta. + +* Mon Dec 7 2009 Stepan Kasal - 4:5.10.1-104 +- do not pack Bzip2 manpages either (#544582) + +* Mon Dec 7 2009 Stepan Kasal - 4:5.10.1-103 +- do not pack Bzip2 modules (#544582) +- hack: cheat about Compress::Raw::Zlib version (#544582) + +* Thu Dec 3 2009 Stepan Kasal - 4:5.10.1-102 +- switch off check for ppc64 and s390x +- remove the hack for "make test," it is no longer needed + +* Thu Dec 3 2009 Stepan Kasal - 4:5.10.1-101 +- be more careful with the libperl.so compatibility symlink (#543936) + +* Wed Dec 2 2009 Stepan Kasal - 4:5.10.1-100 +- new upstream version +- release number must be high, because of stale version numbers of some + of the subpackages +- drop upstreamed patches +- update the versions of bundled modules +- shorten the paths in @INC +- build without DEBUGGING +- implement compatibility measures for the above two changes, for a short + transition period +- provide perl(:MODULE_COMPAT_5.10.0), for that transition period only + +* Tue Dec 1 2009 Stepan Kasal - 4:5.10.0-87 +- fix patch-update-Compress-Raw-Zlib.patch (did not patch Zlib.pm) +- update Compress::Raw::Zlib to 2.023 +- update IO::Compress::Base, and IO::Compress::Zlib to 2.015 (#542645) + +* Mon Nov 30 2009 Marcela Mašláňová - 4:5.10.0-86 +- 542645 update IO-Compress-Base + +* Tue Nov 24 2009 Stepan Kasal - 4:5.10.0-85 +- back out perl-5.10.0-spamassassin.patch (#528572) + +* Thu Oct 01 2009 Chris Weyl - 4:5.10.0-84 +- add /perl(UNIVERSAL)/d; /perl(DB)/d to perl_default_filter auto-provides + filtering + +* Thu Oct 1 2009 Stepan Kasal - 4:5.10.0-83 +- update Storable to 2.21 + +* Mon Aug 31 2009 Chris Weyl - 4:5.10.0-82 +- update our Test-Simple update to 0.92 (patch by Iain Arnell), #519417 +- update Module-Pluggable to 3.9 + +* Thu Aug 27 2009 Chris Weyl - 4:5.10.0-81 +- fix macros.perl *sigh* + +* Mon Aug 24 2009 Stepan Kasal - 4:5.10.0-80 +- Remove -DDEBUGGING=-g, we are not ready yet. + +* Fri Aug 21 2009 Chris Weyl - 4:5.10.0-79 +- add helper filtering macros to -devel, for perl-* package invocation + (#502402) + +* Fri Jul 31 2009 Stepan Kasal - 4:5.10.0-78 +- Add configure option -DDEBUGGING=-g (#156113) + +* Tue Jul 28 2009 arcela Mašláňová - 4:5.10.0-77 +- 510127 spam assassin suffer from tainted bug + +* Mon Jul 27 2009 Marcela Mašláňová - 4:5.10.0-76 +- 494773 much better swap logic to support reentrancy and fix assert failure (rt #60508) + +* Sat Jul 25 2009 Fedora Release Engineering - 4:5.10.0-75 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Fri Jul 10 2009 Stepan Kasal - 4:5.10.0-74 +- fix generated .ph files so that they no longer cause warnings (#509676) +- remove PREREQ_FATAL from Makefile.PL's processed by miniperl +- update to latest Scalar-List-Utils (#507378) +- perl-skip-prereq.patch: skip more prereq declarations in Makefile.PL files + +* Tue Jul 7 2009 Stepan Kasal - 4:5.10.0-73 +- re-enable tests + +* Tue Jul 7 2009 Stepan Kasal - 4:5.10.0-72 +- move -DPERL_USE_SAFE_PUTENV to ccflags (#508496) + +* Mon Jun 8 2009 Marcela Mašláňová - 4:5.10.0-71 +- #504386 update of Compress::Raw::Zlib 2.020 + +* Thu Jun 4 2009 Marcela Mašláňová - 4:5.10.0-70 +- update File::Spec (PathTools) to 3.30 + +* Wed Jun 3 2009 Stepan Kasal - 4:5.10.0-69 +- fix #221113, $! wrongly set when EOF is reached + +* Fri Apr 10 2009 Marcela Mašláňová - 4:5.10.0-68 +- do not use quotes in patchlevel.h; it breaks installation from cpan (#495183) + +* Tue Apr 7 2009 Stepan Kasal - 4:5.10.0-67 +- update CGI to 3.43, dropping upstreamed perl-CGI-escape.patch + +* Tue Apr 7 2009 Stepan Kasal - 4:5.10.0-66 +- fix CGI::escape for all strings (#472571) +- perl-CGI-t-util-58.patch: Do not distort lib/CGI/t/util-58.t + http://rt.perl.org/rt3/Ticket/Display.html?id=64502 + +* Fri Mar 27 2009 Stepan Kasal - 4:5.10.0-65 +- Move the gargantuan Changes* collection to -devel (#492605) + +* Tue Mar 24 2009 Stepan Kasal - 4:5.10.0-64 +- update module autodie + +* Mon Mar 23 2009 Stepan Kasal - 4:5.10.0-63 +- update Digest::SHA (fixes 489221) + +* Wed Mar 11 2009 Tom "spot" Callaway - 4:5.10.0-62 +- drop 26_fix_pod2man_upgrade (don't need it) +- fix typo in %%define ExtUtils_CBuilder_version + +* Wed Mar 11 2009 Tom "spot" Callaway - 4:5.10.0-61 +- apply Change 34507: Fix memory leak in single-char character class optimization +- Reorder @INC, based on b9ba2fadb18b54e35e5de54f945111a56cbcb249 +- fix Archive::Extract to fix test failure caused by tar >= 1.21 +- Merge useful Debian patches + +* Tue Mar 10 2009 Stepan Kasal - 4:5.10.0-60 +- remove compatibility obsolete sitelib directories +- use a better BuildRoot +- drop a redundant mkdir in %%install +- call patchlevel.h only once; rm patchlevel.bak +- update modules Sys::Syslog, Module::Load::Conditional, Module::CoreList, + Test::Harness, Test::Simple, CGI.pm (dropping the upstreamed patch), + File::Path (that includes our perl-5.10.0-CVE-2008-2827.patch), + constant, Pod::Simple, Archive::Tar, Archive::Extract, File::Fetch, + File::Temp, IPC::Cmd, Time::HiRes, Module::Build, ExtUtils::CBuilder +- standardize the patches for updating embedded modules +- work around a bug in Module::Build tests bu setting TMPDIR to a directory + inside the source tree + +* Sun Mar 08 2009 Robert Scheck - 4:5.10.0-59 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 16 2009 Tom "spot" Callaway - 4:5.10.0-58 +- add /usr/lib/perl5/site_perl to otherlibs (bz 484053) + +* Mon Feb 16 2009 Dennis Gilmore - 4:5.10.0-57 +- build sparc64 without _smp_mflags + +* Sat Feb 07 2009 Dennis Gilmore - 4:5.10.0-56 +- limit sparc builds to -j12 + +* Tue Feb 3 2009 Marcela Mašláňová - 4:5.10.0-55 +- update IPC::Cmd to v 0.42 + +* Mon Jan 19 2009 Marcela Mašláňová - 4:5.10.0-54 +- 455410 http://rt.perl.org/rt3/Public/Bug/Display.html?id=54934 + Attempt to free unreferenced scalar fiddling with the symbol table + Keep the refcount of the globs generated by PerlIO::via balanced. + +* Mon Dec 22 2008 Marcela Mašláňová - 4:5.10.0-53 +- add missing XHTML.pm into Pod::Simple + +* Fri Dec 12 2008 Marcela Mašláňová - 4:5.10.0-52 +- 295021 CVE-2007-4829 perl-Archive-Tar directory traversal flaws +- add another source for binary files, which test untaring links + +* Fri Nov 28 2008 Tom "spot" Callaway - 4:5.10.0-51 +- to fix Fedora bz 473223, which is really perl bug #54186 (http://rt.perl.org/rt3//Public/Bug/Display.html?id=54186) + we apply Changes 33640, 33881, 33896, 33897 + +* Mon Nov 24 2008 Marcela Mašláňová - 4:5.10.0-50 +- change summary according to RFC fix summary discussion at fedora-devel :) + +* Thu Oct 23 2008 Tom "spot" Callaway - 4:5.10.0-49 +- update File::Temp to 0.20 + +* Sun Oct 12 2008 Lubomir Rintel - 4:5.10.0-48 +- Include fix for rt#52740 to fix a crash when using Devel::Symdump and + Compress::Zlib together + +* Tue Oct 07 2008 Marcela Mašláňová 4:5.10.0-47.fc10 +- rt#33242, rhbz#459918. Segfault after reblessing objects in Storable. +- rhbz#465728 upgrade Simple::Pod to 3.07 + +* Wed Oct 1 2008 Stepan Kasal - 4:5.10.0-46 +- also preserve the timestamp of AUTHORS; move the fix to the recode + function, which is where the stamps go wrong + +* Wed Oct 1 2008 Tom "spot" Callaway 4:5.10.0-45 +- give Changes*.gz the same datetime to avoid multilib conflict + +* Wed Sep 17 2008 Marcela Maslanova 4:5.10.0-44.fc10 +- remove Tar.pm from Archive-Extract +- fix version of Test::Simple in spec +- update Test::Simple +- update Archive::Tar to 1.38 + +* Tue Sep 16 2008 Marcela Maslanova 4:5.10.0-43.fc10 +- 462444 update Test::Simple to 0.80 + +* Thu Aug 14 2008 Stepan Kasal - 4:5.10.0-42.fc10 +- move libnet to the right directory, along Net/Config.pm + +* Wed Aug 13 2008 Stepan Kasal - 4:5.10.0-41.fc10 +- do not create directory .../%%{version}/auto + +* Tue Aug 5 2008 Marcela Maslanova 4:5.10.0-40.fc10 +- 457867 remove required IPC::Run from CPANPLUS - needed only by win32 +- 457771 add path + +* Fri Aug 1 2008 Stepan Kasal 4:5.10.0-39.fc10 +- CGI.pm bug in exists() on tied param hash (#457085) +- move the enc2xs templates (../Encode/*.e2x) to -devel, (#456534) + +* Mon Jul 21 2008 Marcela Maslanova 4:5.10.0-38 +- 455933 update to CGI-3.38 +- fix fuzz problems (patch6) +- 217833 pos() function handle unicode characters correct + +* Thu Jul 10 2008 Tom "spot" Callaway 4:5.10.0-36 +- rebuild for new db4 4.7 + +* Wed Jul 9 2008 Stepan Kasal 4:5.10.0-35 +- remove db4 require, it is handled automatically + +* Thu Jul 3 2008 Stepan Kasal 4:5.10.0-34 +- 453646 use -DPERL_USE_SAFE_PUTENV. Without fail some modules f.e. readline. + +* Tue Jul 1 2008 Marcela Maslanova 4:5.10.0-33 +- 451078 update Test::Harness to 3.12 for more testing. Removed verbose +test, new Test::Harness has possibly verbose output, but updated package +has a lot of features f.e. TAP::Harness. Carefully watched all new bugs +related to tests! + +* Fri Jun 27 2008 Stepan Kasal 4:5.10.0-32 +- bump the release number, so that it is not smaller than in F-9 + +* Tue Jun 24 2008 Marcela Maslanova 4:5.10.0-28 +- CVE-2008-2827 perl: insecure use of chmod in rmtree + +* Wed Jun 11 2008 Marcela Maslanova 4:5.10.0-27 +- 447371 wrong access permission rt49003 + +* Tue Jun 10 2008 Stepan Kasal 4:5.10.0-26 +- make config parameter list consistent for 32bit and 64bit platforms, + add config option -Dinc_version_list=none (#448735) +- use perl_archname consistently +- cleanup of usage of *_lib macros in %%install + +* Fri Jun 6 2008 Marcela Maslanova 4:5.10.0-25 +- 449577 rebuild for FTBFS + +* Mon May 26 2008 Marcela Maslanova 4:5.10.0-24 +- 448392 upstream fix for assertion + +* Thu May 22 2008 Tom "spot" Callaway 4:5.10.0-23 +- sparc64 breaks with the rpath hack patch applied + +* Mon May 19 2008 Marcela Maslanova +- 447142 upgrade CGI to 3.37 (this actually happened in -21 in rawhide.) + +* Sat May 17 2008 Tom "spot" Callaway 4:5.10.0-21 +- sparc64 fails two tests under mysterious circumstances. we need to get the + rest of the tree moving, so we temporarily disable the tests on that arch. + +* Tue Mar 18 2008 Tom "spot" Callaway 4:5.10.0-20 +- create the vendor_perl/%%{perl_version}/%%{perl_archname}/auto directory + in %%{_libdir} so we own it properly + +* Tue Mar 18 2008 Tom "spot" Callaway 4:5.10.0-19 +- fix CPANPLUS-Dist-Build Provides/Obsoletes (bz 437615) +- bump version on Module-CoreList subpackage + +* Tue Mar 18 2008 Tom "spot" Callaway 4:5.10.0-18 +- forgot to create the auto directory for multilib vendor_perl dirs + +* Tue Mar 18 2008 Tom "spot" Callaway 4:5.10.0-17 +- own multilib vendor_perl directories +- mark Module::CoreList patch in patchlevel.h + +* Tue Mar 18 2008 Marcela Maslanova 4:5.10.0-16 +- 437817: RFE: Upgrade Module::CoreList to 2.14 + +* Wed Mar 12 2008 Marcela Maslanova 4:5.10.0-15 +- xsubpp now lives in perl-devel instead of perl. + +* Sat Mar 8 2008 Tom "spot" Callaway 4:5.10.0-14 +- back out Archive::Extract patch, causing odd test failure + +* Sat Mar 8 2008 Tom "spot" Callaway 4:5.10.0-13 +- add missing lzma test file + +* Fri Mar 7 2008 Tom "spot" Callaway 4:5.10.0-12 +- conditionalize multilib patch report in patchlevel.h +- Update Archive::Extract to 0.26 +- Update Module::Load::Conditional to 0.24 + +* Fri Mar 7 2008 Tom "spot" Callaway 4:5.10.0-11 +- only do it once, and do it for all our patches + +* Fri Mar 7 2008 Tom "spot" Callaway 4:5.10.0-10 +- note 32891 in patchlevel.h + +* Fri Mar 7 2008 Tom "spot" Callaway 4:5.10.0-9 +- get rid of bad conflicts on perl-File-Temp + +* Fri Mar 7 2008 Tom "spot" Callaway 4:5.10.0-8 +- use /usr/local for sitelib/sitearch dirs +- patch 32891 for significant performance improvement + +* Fri Feb 22 2008 Stepan Kasal - 4:5.10.0-7 +- Add perl-File-Temp provides/obsoletes/conflicts (#433836), + reported by Bill McGonigle +- escape the macros in Jan 30 entry + +* Tue Feb 19 2008 Fedora Release Engineering - 4:5.10.0-6 +- Autorebuild for GCC 4.3 + +* Wed Jan 30 2008 Tom "spot" Callaway - 4:5.10.0-5 +- disable some futime tests in t/io/fs.t because they started failing on x86_64 + in the Fedora builders, and no one can figure out why. :/ + +* Wed Jan 30 2008 Tom "spot" Callaway - 4:5.10.0-4 +- create %%{_prefix}/lib/perl5/vendor_perl/%%{perl_version}/auto and own it + in base perl (resolves bugzilla 214580) + +* Thu Jan 10 2008 Tom "spot" Callaway - 4:5.10.0-3 +- Update Sys::Syslog to 0.24, to fix test failures + +* Wed Jan 9 2008 Tom "spot" Callaway - 4:5.10.0-2 +- add some BR for tests + +* Tue Jan 8 2008 Tom "spot" Callaway - 4:5.10.0-1 +- 5.10.0 final +- clear out all the unnecessary patches (down to 8 patches!) +- get rid of super perl debugging mode +- add new subpackages + +* Thu Nov 29 2007 Robin Norwood - 4:5.10.0_RC2-0.1 +- first attempt at building 5.10.0 + + diff --git a/perl.stp b/perl.stp new file mode 100644 index 0000000..dbc51a8 --- /dev/null +++ b/perl.stp @@ -0,0 +1,71 @@ +/* + This probe will fire when the perl script enters a subroutine. + */ + +probe perl.sub.call = process("LIBRARY_PATH").mark("sub__entry") +{ + + sub = user_string($arg1) + filename = user_string($arg2) + lineno = $arg3 + package = user_string($arg4) + +} + +/* + This probe will fire when the return from a subroutine has been + hit. + */ + +probe perl.sub.return = process("LIBRARY_PATH").mark("sub__return") +{ + + sub = user_string($arg1) + filename = user_string($arg2) + lineno = $arg3 + package = user_string($arg4) + +} + +/* + This probe will fire when the Perl interperter changes state. + */ + +probe perl.phase.change = process("LIBRARY_PATH").mark("phase__change") +{ + newphase = user_string($arg1) + oldphase = user_string($arg2) + +} + + +/* + Fires when Perl has successfully loaded an individual file. + */ + +probe perl.loaded.file = process("LIBRARY_PATH").mark("loaded__file") +{ + filename = user_string($arg1) + +} + + +/* + Fires when Perl is about to load an individual file. + */ + +probe perl.loading.file = process("LIBRARY_PATH").mark("loading__file") +{ + filename = user_string($arg1) + +} + + +/* + Traces the execution of each opcode in the Perl runloop. + */ + +probe perl.op.entry = process("LIBRARY_PATH").mark("op__entry") +{ + opname = user_string($arg1) +} diff --git a/sources b/sources new file mode 100644 index 0000000..8c23527 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (perl-5.26.3.tar.bz2) = b024556f3a9cd9d55a1b08a52540f8e428f0ea31dcf88df79e3b56724ea880fb07af0a22d22abb40488584b640f66cbdc1d5e13a0226a8dcb628fb1839b1e54e