diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..94751ab --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/perl-5.30.1.tar.xz diff --git a/.perl.metadata b/.perl.metadata new file mode 100644 index 0000000..98f0497 --- /dev/null +++ b/.perl.metadata @@ -0,0 +1 @@ +4bc190b6ac368f573e6a028f91430f831d40d30a SOURCES/perl-5.30.1.tar.xz diff --git a/SOURCES/Pod-Html-license-clarification b/SOURCES/Pod-Html-license-clarification new file mode 100644 index 0000000..bd567f1 --- /dev/null +++ b/SOURCES/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/SOURCES/gendep.macros b/SOURCES/gendep.macros new file mode 100644 index 0000000..fc24c8f --- /dev/null +++ b/SOURCES/gendep.macros @@ -0,0 +1,2076 @@ +%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.32 \ +Provides: perl(Archive::Tar::Constant) = 2.32 \ +Provides: perl(Archive::Tar::File) = 2.32 \ +%{nil} +%global gendep_perl_Attribute_Handlers \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Attribute::Handlers) = 1.01 \ +%{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(Errno) \ +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.672 \ +Provides: perl(CPAN) = 2.22 \ +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.22 \ +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.5011 \ +Provides: perl(CPAN::FTP::netrc) = 1.01 \ +Provides: perl(CPAN::FirstTime) = 5.5311 \ +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.21 \ +Provides: perl(CPAN::Module) = 5.5003 \ +Provides: perl(CPAN::Nox) = 5.5001 \ +Provides: perl(CPAN::Plugin) = 0.97 \ +Provides: perl(CPAN::Plugin::Specfile) = 0.02 \ +Provides: perl(CPAN::Prompt) = 5.5 \ +Provides: perl(CPAN::Queue) = 5.5002 \ +Provides: perl(CPAN::Queue::Item) \ +Provides: perl(CPAN::Shell) = 5.5008 \ +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.50 \ +Provides: perl(Carp::Heavy) = 1.50 \ +Provides: perl(Carp::Heavy) = 1.50 \ +%{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.084 \ +%{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.084 \ +%{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.32 \ +%{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.843 \ +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.174 \ +%{nil} +%global gendep_perl_Data_Dumper_debuginfo \ +%{nil} +%global gendep_perl_Devel_PPPort \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(Devel::PPPort) = 3.52 \ +%{nil} +%global gendep_perl_Devel_Peek \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Provides: perl(Devel::Peek) = 1.28 \ +%{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(Digest::SHA) \ +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) = 6.02 \ +%{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::MIME::Name) \ +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(Storable) \ +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) = 3.01 \ +Provides: perl(Encode::Alias) = 2.24 \ +Provides: perl(Encode::Byte) = 2.4 \ +Provides: perl(Encode::CJKConstants) = 2.2 \ +Provides: perl(Encode::CN) = 2.3 \ +Provides: perl(Encode::CN::HZ) = 2.10 \ +Provides: perl(Encode::Config) = 2.5 \ +Provides: perl(Encode::EBCDIC) = 2.2 \ +Provides: perl(Encode::Encoder) = 2.3 \ +Provides: perl(Encode::Encoding) = 2.8 \ +Provides: perl(Encode::GSM0338) = 2.7 \ +Provides: perl(Encode::Guess) = 2.7 \ +Provides: perl(Encode::Internal) \ +Provides: perl(Encode::JP) = 2.4 \ +Provides: perl(Encode::JP::H2Z) = 2.2 \ +Provides: perl(Encode::JP::JIS7) = 2.8 \ +Provides: perl(Encode::KR) = 2.3 \ +Provides: perl(Encode::KR::2022_KR) = 2.4 \ +Provides: perl(Encode::MIME::Header) = 2.28 \ +Provides: perl(Encode::MIME::Header::ISO_2022_JP) = 1.9 \ +Provides: perl(Encode::MIME::Name) = 1.3 \ +Provides: perl(Encode::Symbol) = 2.2 \ +Provides: perl(Encode::TW) = 2.3 \ +Provides: perl(Encode::UTF_EBCDIC) \ +Provides: perl(Encode::Unicode) = 2.18 \ +Provides: perl(Encode::Unicode::UTF7) = 2.10 \ +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.30 \ +%{nil} +%global gendep_perl_Exporter \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Exporter) \ +Requires: perl(strict) \ +Provides: perl(Exporter) = 5.73 \ +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.280231 \ +Provides: perl(ExtUtils::CBuilder::Base) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::Unix) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::VMS) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows::BCC) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows::GCC) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::Windows::MSVC) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::aix) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::android) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::cygwin) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::darwin) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::dec_osf) = 0.280231 \ +Provides: perl(ExtUtils::CBuilder::Platform::linux) = 0.280206 \ +Provides: perl(ExtUtils::CBuilder::Platform::os2) = 0.280231 \ +%{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.34 \ +%{nil} +%global gendep_perl_ExtUtils_Embed \ +Requires: perl(Config) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(strict) \ +Provides: perl(ExtUtils::Embed) = 1.35 \ +%{nil} +%global gendep_perl_ExtUtils_Install \ +Requires: perl(:VERSION) >= 5.5.30 \ +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::Copy) \ +Requires: perl(File::Find) \ +Requires: perl(File::Path) \ +Requires: perl(File::Spec) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Provides: perl(ExtUtils::Install) = 2.14 \ +Provides: perl(ExtUtils::Install::Warn) \ +Provides: perl(ExtUtils::Installed) = 2.14 \ +Provides: perl(ExtUtils::Packlist) = 2.14 \ +%{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.34 \ +Provides: perl(ExtUtils::Liblist) = 7.34 \ +Provides: perl(ExtUtils::Liblist::Kid) = 7.34 \ +Provides: perl(ExtUtils::MM) = 7.34 \ +Provides: perl(ExtUtils::MM_AIX) = 7.34 \ +Provides: perl(ExtUtils::MM_Any) = 7.34 \ +Provides: perl(ExtUtils::MM_BeOS) = 7.34 \ +Provides: perl(ExtUtils::MM_Cygwin) = 7.34 \ +Provides: perl(ExtUtils::MM_DOS) = 7.34 \ +Provides: perl(ExtUtils::MM_Darwin) = 7.34 \ +Provides: perl(ExtUtils::MM_MacOS) = 7.34 \ +Provides: perl(ExtUtils::MM_NW5) = 7.34 \ +Provides: perl(ExtUtils::MM_OS2) = 7.34 \ +Provides: perl(ExtUtils::MM_QNX) = 7.34 \ +Provides: perl(ExtUtils::MM_UWIN) = 7.34 \ +Provides: perl(ExtUtils::MM_Unix) = 7.34 \ +Provides: perl(ExtUtils::MM_VMS) = 7.34 \ +Provides: perl(ExtUtils::MM_VOS) = 7.34 \ +Provides: perl(ExtUtils::MM_Win32) = 7.34 \ +Provides: perl(ExtUtils::MM_Win95) = 7.34 \ +Provides: perl(ExtUtils::MY) = 7.34 \ +Provides: perl(ExtUtils::MakeMaker) = 7.34 \ +Provides: perl(ExtUtils::MakeMaker::Config) = 7.34 \ +Provides: perl(ExtUtils::MakeMaker::Locale) = 7.34 \ +Provides: perl(ExtUtils::MakeMaker::version) = 7.34 \ +Provides: perl(ExtUtils::Mkbootstrap) = 7.34 \ +Provides: perl(ExtUtils::Mksymlists) = 7.34 \ +Provides: perl(ExtUtils::testlib) = 7.34 \ +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.72 \ +%{nil} +%global gendep_perl_ExtUtils_Miniperl \ +Requires: perl(Exporter) \ +Requires: perl(ExtUtils::Embed) >= 1.31 \ +Requires: perl(strict) \ +Provides: perl(ExtUtils::Miniperl) = 1.09 \ +%{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::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.40 \ +Provides: perl(ExtUtils::ParseXS::Constants) = 3.40 \ +Provides: perl(ExtUtils::ParseXS::CountLines) = 3.40 \ +Provides: perl(ExtUtils::ParseXS::Eval) = 3.40 \ +Provides: perl(ExtUtils::ParseXS::Utilities) = 3.40 \ +Provides: perl(ExtUtils::Typemaps) = 3.38 \ +Provides: perl(ExtUtils::Typemaps::Cmd) = 3.38 \ +Provides: perl(ExtUtils::Typemaps::InputMap) = 3.38 \ +Provides: perl(ExtUtils::Typemaps::OutputMap) = 3.38 \ +Provides: perl(ExtUtils::Typemaps::Type) = 3.38 \ +%{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.56 \ +%{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.16 \ +%{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) \ +Provides: perl(File::Temp) = 0.2309 \ +%{nil} +%global gendep_perl_Filter \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Filter::Util::Call) = 1.59 \ +%{nil} +%global gendep_perl_Filter_Simple \ +Requires: perl(Carp) \ +Requires: perl(Filter::Util::Call) \ +Requires: perl(Text::Balanced) \ +Provides: perl(Filter::Simple) = 0.95 \ +%{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) \ +Requires: perl(warnings) \ +Provides: perl(Getopt::Long) = 2.50 \ +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.076 \ +%{nil} +%global gendep_perl_IO \ +Requires: perl(:VERSION) >= 5.8.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(warnings) \ +Requires: perl(warnings::register) \ +Provides: perl(IO) = 1.40 \ +Provides: perl(IO::Dir) = 1.40 \ +Provides: perl(IO::File) = 1.40 \ +Provides: perl(IO::Handle) = 1.40 \ +Provides: perl(IO::Pipe) = 1.40 \ +Provides: perl(IO::Pipe::End) \ +Provides: perl(IO::Poll) = 1.40 \ +Provides: perl(IO::Seekable) = 1.40 \ +Provides: perl(IO::Select) = 1.40 \ +Provides: perl(IO::Socket) = 1.40 \ +Provides: perl(IO::Socket::INET) = 1.40 \ +Provides: perl(IO::Socket::UNIX) = 1.40 \ +%{nil} +%global gendep_perl_IO_Compress \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Compress::Raw::Bzip2) >= 2.084 \ +Requires: perl(Compress::Raw::Zlib) >= 2.084 \ +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.084 \ +Requires: perl(IO::Compress::Adapter::Deflate) >= 2.084 \ +Requires: perl(IO::Compress::Adapter::Identity) >= 2.084 \ +Requires: perl(IO::Compress::Base) >= 2.084 \ +Requires: perl(IO::Compress::Base::Common) >= 2.084 \ +Requires: perl(IO::Compress::Gzip) >= 2.084 \ +Requires: perl(IO::Compress::Gzip::Constants) >= 2.084 \ +Requires: perl(IO::Compress::RawDeflate) >= 2.084 \ +Requires: perl(IO::Compress::Zip::Constants) >= 2.084 \ +Requires: perl(IO::Compress::Zlib::Constants) >= 2.084 \ +Requires: perl(IO::Compress::Zlib::Extra) >= 2.084 \ +Requires: perl(IO::File) \ +Requires: perl(IO::Handle) \ +Requires: perl(IO::Uncompress::Adapter::Bunzip2) >= 2.084 \ +Requires: perl(IO::Uncompress::Adapter::Identity) >= 2.084 \ +Requires: perl(IO::Uncompress::Adapter::Inflate) >= 2.084 \ +Requires: perl(IO::Uncompress::Base) >= 2.084 \ +Requires: perl(IO::Uncompress::Gunzip) >= 2.084 \ +Requires: perl(IO::Uncompress::Inflate) >= 2.084 \ +Requires: perl(IO::Uncompress::RawInflate) >= 2.084 \ +Requires: perl(IO::Uncompress::Unzip) >= 2.084 \ +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.084 \ +Provides: perl(File::GlobMapper) = 1.001 \ +Provides: perl(IO::Compress::Adapter::Bzip2) = 2.084 \ +Provides: perl(IO::Compress::Adapter::Deflate) = 2.084 \ +Provides: perl(IO::Compress::Adapter::Identity) = 2.084 \ +Provides: perl(IO::Compress::Base) = 2.084 \ +Provides: perl(IO::Compress::Base::Common) = 2.084 \ +Provides: perl(IO::Compress::Bzip2) = 2.084 \ +Provides: perl(IO::Compress::Deflate) = 2.084 \ +Provides: perl(IO::Compress::Gzip) = 2.084 \ +Provides: perl(IO::Compress::Gzip::Constants) = 2.084 \ +Provides: perl(IO::Compress::RawDeflate) = 2.084 \ +Provides: perl(IO::Compress::Zip) = 2.084 \ +Provides: perl(IO::Compress::Zip::Constants) = 2.084 \ +Provides: perl(IO::Compress::Zlib::Constants) = 2.084 \ +Provides: perl(IO::Compress::Zlib::Extra) = 2.084 \ +Provides: perl(IO::Uncompress::Adapter::Bunzip2) = 2.084 \ +Provides: perl(IO::Uncompress::Adapter::Identity) = 2.084 \ +Provides: perl(IO::Uncompress::Adapter::Inflate) = 2.084 \ +Provides: perl(IO::Uncompress::AnyInflate) = 2.084 \ +Provides: perl(IO::Uncompress::AnyUncompress) = 2.084 \ +Provides: perl(IO::Uncompress::Base) = 2.084 \ +Provides: perl(IO::Uncompress::Bunzip2) \ +Provides: perl(IO::Uncompress::Bunzip2) = 2.084 \ +Provides: perl(IO::Uncompress::Gunzip) = 2.084 \ +Provides: perl(IO::Uncompress::Inflate) = 2.084 \ +Provides: perl(IO::Uncompress::RawInflate) = 2.084 \ +Provides: perl(IO::Uncompress::Unzip) = 2.084 \ +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.39 \ +%{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) = 1.02 \ +%{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(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(Getopt::Long) \ +Requires: perl(JSON::PP) \ +Requires: perl(JSON::PP::Boolean) \ +Requires: perl(bytes) \ +Requires: perl(constant) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Provides: perl(JSON::PP) = 4.02 \ +Provides: perl(JSON::PP::Boolean) = 4.02 \ +Provides: perl(JSON::PP::IncrParser) = 1.01 \ +%{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) \ +Provides: perl(Locale::Maketext) = 1.29 \ +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.999816 \ +Provides: perl(Math::BigInt) = 1.999816 \ +Provides: perl(Math::BigInt::Calc) = 1.999816 \ +Provides: perl(Math::BigInt::Lib) = 1.999816 \ +%{nil} +%global gendep_perl_Math_BigInt_FastCalc \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Math::BigInt::Calc) >= 1.999801 \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Math::BigInt::FastCalc) = 0.5008 \ +%{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) >= 1.999718 \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Math::BigRat) = 0.2614 \ +%{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(version) \ +Requires: perl(warnings) \ +Provides: perl(Module::CoreList) = 5.20190522 \ +Provides: perl(Module::CoreList::Utils) = 5.20190522 \ +%{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.34 \ +%{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.000036 \ +%{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) \ +Provides: perl(Net::Ping) = 2.71 \ +%{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(Cwd) \ +Requires: perl(Exporter) \ +Requires: perl(File::Spec) \ +Requires: perl(File::Spec::Unix) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Provides: perl(Cwd) = 3.78 \ +Provides: perl(File::Spec) = 3.78 \ +Provides: perl(File::Spec::AmigaOS) = 3.78 \ +Provides: perl(File::Spec::Cygwin) = 3.78 \ +Provides: perl(File::Spec::Epoc) = 3.78 \ +Provides: perl(File::Spec::Functions) = 3.78 \ +Provides: perl(File::Spec::Mac) = 3.78 \ +Provides: perl(File::Spec::OS2) = 3.78 \ +Provides: perl(File::Spec::Unix) = 3.78 \ +Provides: perl(File::Spec::Win32) = 3.78 \ +%{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::SimpleTree) \ +Requires: perl(Pod::Simple::XHTML) \ +Requires: perl(locale) \ +Requires: perl(parent) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Pod::Html) = 1.24 \ +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.2801 \ +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.50 \ +Provides: perl(List::Util::XS) = 1.50 \ +Provides: perl(Scalar::Util) = 1.50 \ +Provides: perl(Sub::Util) = 1.50 \ +%{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) \ +Provides: perl(SelfLoader) = 1.25 \ +%{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.027 \ +%{nil} +%global gendep_perl_Socket_debuginfo \ +%{nil} +%global gendep_perl_Storable \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Provides: perl(Storable) = 3.15 \ +%{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) \ +Provides: perl(Test) = 1.31 \ +%{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.42 \ +Provides: perl(App::Prove::State) = 3.42 \ +Provides: perl(App::Prove::State::Result) = 3.42 \ +Provides: perl(App::Prove::State::Result::Test) = 3.42 \ +Provides: perl(TAP::Base) = 3.42 \ +Provides: perl(TAP::Formatter::Base) = 3.42 \ +Provides: perl(TAP::Formatter::Color) = 3.42 \ +Provides: perl(TAP::Formatter::Console) = 3.42 \ +Provides: perl(TAP::Formatter::Console::ParallelSession) = 3.42 \ +Provides: perl(TAP::Formatter::Console::Session) = 3.42 \ +Provides: perl(TAP::Formatter::File) = 3.42 \ +Provides: perl(TAP::Formatter::File::Session) = 3.42 \ +Provides: perl(TAP::Formatter::Session) = 3.42 \ +Provides: perl(TAP::Harness) = 3.42 \ +Provides: perl(TAP::Harness::Env) = 3.42 \ +Provides: perl(TAP::Object) = 3.42 \ +Provides: perl(TAP::Parser) = 3.42 \ +Provides: perl(TAP::Parser::Aggregator) = 3.42 \ +Provides: perl(TAP::Parser::Grammar) = 3.42 \ +Provides: perl(TAP::Parser::Iterator) = 3.42 \ +Provides: perl(TAP::Parser::Iterator::Array) = 3.42 \ +Provides: perl(TAP::Parser::Iterator::Process) = 3.42 \ +Provides: perl(TAP::Parser::Iterator::Stream) = 3.42 \ +Provides: perl(TAP::Parser::IteratorFactory) = 3.42 \ +Provides: perl(TAP::Parser::Multiplexer) = 3.42 \ +Provides: perl(TAP::Parser::Result) = 3.42 \ +Provides: perl(TAP::Parser::Result::Bailout) = 3.42 \ +Provides: perl(TAP::Parser::Result::Comment) = 3.42 \ +Provides: perl(TAP::Parser::Result::Plan) = 3.42 \ +Provides: perl(TAP::Parser::Result::Pragma) = 3.42 \ +Provides: perl(TAP::Parser::Result::Test) = 3.42 \ +Provides: perl(TAP::Parser::Result::Unknown) = 3.42 \ +Provides: perl(TAP::Parser::Result::Version) = 3.42 \ +Provides: perl(TAP::Parser::Result::YAML) = 3.42 \ +Provides: perl(TAP::Parser::ResultFactory) = 3.42 \ +Provides: perl(TAP::Parser::Scheduler) = 3.42 \ +Provides: perl(TAP::Parser::Scheduler::Job) = 3.42 \ +Provides: perl(TAP::Parser::Scheduler::Spinner) = 3.42 \ +Provides: perl(TAP::Parser::Source) = 3.42 \ +Provides: perl(TAP::Parser::SourceHandler) = 3.42 \ +Provides: perl(TAP::Parser::SourceHandler::Executable) = 3.42 \ +Provides: perl(TAP::Parser::SourceHandler::File) = 3.42 \ +Provides: perl(TAP::Parser::SourceHandler::Handle) = 3.42 \ +Provides: perl(TAP::Parser::SourceHandler::Perl) = 3.42 \ +Provides: perl(TAP::Parser::SourceHandler::RawTAP) = 3.42 \ +Provides: perl(TAP::Parser::YAMLish::Reader) = 3.42 \ +Provides: perl(TAP::Parser::YAMLish::Writer) = 3.42 \ +Provides: perl(Test::Harness) = 3.42 \ +%{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(List::Util) \ +Requires: perl(POSIX) \ +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::EventFacet::About) \ +Requires: perl(Test2::EventFacet::Amnesty) \ +Requires: perl(Test2::EventFacet::Assert) \ +Requires: perl(Test2::EventFacet::Control) \ +Requires: perl(Test2::EventFacet::Error) \ +Requires: perl(Test2::EventFacet::Hub) \ +Requires: perl(Test2::EventFacet::Info) \ +Requires: perl(Test2::EventFacet::Meta) \ +Requires: perl(Test2::EventFacet::Parent) \ +Requires: perl(Test2::EventFacet::Plan) \ +Requires: perl(Test2::EventFacet::Trace) \ +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::Facets2Legacy) \ +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(base) \ +Requires: perl(strict) \ +Requires: perl(vars) \ +Requires: perl(warnings) \ +Provides: perl(Test2) = 1.302162 \ +Provides: perl(Test2::API) = 1.302162 \ +Provides: perl(Test2::API::Breakage) = 1.302162 \ +Provides: perl(Test2::API::Context) = 1.302162 \ +Provides: perl(Test2::API::Instance) = 1.302162 \ +Provides: perl(Test2::API::Stack) = 1.302162 \ +Provides: perl(Test2::Event) = 1.302162 \ +Provides: perl(Test2::Event::Bail) = 1.302162 \ +Provides: perl(Test2::Event::Diag) = 1.302162 \ +Provides: perl(Test2::Event::Encoding) = 1.302162 \ +Provides: perl(Test2::Event::Exception) = 1.302162 \ +Provides: perl(Test2::Event::Fail) = 1.302162 \ +Provides: perl(Test2::Event::Generic) = 1.302162 \ +Provides: perl(Test2::Event::Note) = 1.302162 \ +Provides: perl(Test2::Event::Ok) = 1.302162 \ +Provides: perl(Test2::Event::Pass) = 1.302162 \ +Provides: perl(Test2::Event::Plan) = 1.302162 \ +Provides: perl(Test2::Event::Skip) = 1.302162 \ +Provides: perl(Test2::Event::Subtest) = 1.302162 \ +Provides: perl(Test2::Event::TAP::Version) = 1.302162 \ +Provides: perl(Test2::Event::V2) = 1.302162 \ +Provides: perl(Test2::Event::Waiting) = 1.302162 \ +Provides: perl(Test2::EventFacet) = 1.302162 \ +Provides: perl(Test2::EventFacet::About) = 1.302162 \ +Provides: perl(Test2::EventFacet::Amnesty) = 1.302162 \ +Provides: perl(Test2::EventFacet::Assert) = 1.302162 \ +Provides: perl(Test2::EventFacet::Control) = 1.302162 \ +Provides: perl(Test2::EventFacet::Error) = 1.302162 \ +Provides: perl(Test2::EventFacet::Hub) = 1.302162 \ +Provides: perl(Test2::EventFacet::Info) = 1.302162 \ +Provides: perl(Test2::EventFacet::Info::Table) \ +Provides: perl(Test2::EventFacet::Meta) = 1.302162 \ +Provides: perl(Test2::EventFacet::Parent) = 1.302162 \ +Provides: perl(Test2::EventFacet::Plan) = 1.302162 \ +Provides: perl(Test2::EventFacet::Render) = 1.302162 \ +Provides: perl(Test2::EventFacet::Trace) = 1.302162 \ +Provides: perl(Test2::Formatter) = 1.302162 \ +Provides: perl(Test2::Formatter::TAP) = 1.302162 \ +Provides: perl(Test2::Hub) = 1.302162 \ +Provides: perl(Test2::Hub::Interceptor) = 1.302162 \ +Provides: perl(Test2::Hub::Interceptor::Terminator) = 1.302162 \ +Provides: perl(Test2::Hub::Subtest) = 1.302162 \ +Provides: perl(Test2::IPC) = 1.302162 \ +Provides: perl(Test2::IPC::Driver) = 1.302162 \ +Provides: perl(Test2::IPC::Driver::Files) = 1.302162 \ +Provides: perl(Test2::Tools::Tiny) = 1.302162 \ +Provides: perl(Test2::Util) = 1.302162 \ +Provides: perl(Test2::Util::ExternalMeta) = 1.302162 \ +Provides: perl(Test2::Util::Facets2Legacy) = 1.302162 \ +Provides: perl(Test2::Util::HashBase) = 1.302162 \ +Provides: perl(Test2::Util::Trace) = 1.302162 \ +Provides: perl(Test::Builder) = 1.302162 \ +Provides: perl(Test::Builder::Formatter) = 1.302162 \ +Provides: perl(Test::Builder::IO::Scalar) = 2.114 \ +Provides: perl(Test::Builder::Module) = 1.302162 \ +Provides: perl(Test::Builder::Tester) = 1.302162 \ +Provides: perl(Test::Builder::Tester::Color) = 1.302162 \ +Provides: perl(Test::Builder::Tester::Tie) \ +Provides: perl(Test::Builder::TodoDiag) = 1.302162 \ +Provides: perl(Test::More) = 1.302162 \ +Provides: perl(Test::Simple) = 1.302162 \ +Provides: perl(Test::Tester) = 1.302162 \ +Provides: perl(Test::Tester::Capture) = 1.302162 \ +Provides: perl(Test::Tester::CaptureRunner) = 1.302162 \ +Provides: perl(Test::Tester::Delegate) = 1.302162 \ +Provides: perl(Test::use::ok) = 1.302162 \ +Provides: perl(ok) = 1.302162 \ +%{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.13 \ +%{nil} +%global gendep_perl_Time_HiRes \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Provides: perl(Time::HiRes) = 1.9760 \ +%{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.28 \ +%{nil} +%global gendep_perl_Time_Piece \ +Requires: perl(Carp) \ +Requires: perl(Exporter) >= 5.57 \ +Requires: perl(Scalar::Util) \ +Requires: perl(Time::Local) \ +Requires: perl(Time::Seconds) \ +Requires: perl(XSLoader) \ +Requires: perl(constant) \ +Requires: perl(integer) \ +Requires: perl(overload) \ +Requires: perl(strict) \ +Provides: perl(Time::Piece) = 1.33 \ +Provides: perl(Time::Seconds) = 1.33 \ +%{nil} +%global gendep_perl_Time_Piece_debuginfo \ +%{nil} +%global gendep_perl_Unicode_Collate \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(File::Spec) \ +Requires: perl(Unicode::Collate) \ +Requires: perl(XSLoader) \ +Requires: perl(base) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Unicode::Collate) = 1.27 \ +Provides: perl(Unicode::Collate::CJK::Big5) = 1.27 \ +Provides: perl(Unicode::Collate::CJK::GB2312) = 1.27 \ +Provides: perl(Unicode::Collate::CJK::JISX0208) = 1.27 \ +Provides: perl(Unicode::Collate::CJK::Korean) = 1.27 \ +Provides: perl(Unicode::Collate::CJK::Pinyin) = 1.27 \ +Provides: perl(Unicode::Collate::CJK::Stroke) = 1.27 \ +Provides: perl(Unicode::Collate::CJK::Zhuyin) = 1.27 \ +Provides: perl(Unicode::Collate::Locale) = 1.27 \ +%{nil} +%global gendep_perl_Unicode_Collate_debuginfo \ +%{nil} +%global gendep_perl_Unicode_Normalize \ +Requires: perl(:VERSION) >= 5.6.0 \ +Requires: perl(Carp) \ +Requires: perl(Exporter) \ +Requires: perl(XSLoader) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(Unicode::Normalize) = 1.26 \ +%{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.29002 \ +Provides: perl(autodie::exception::system) = 2.29 \ +Provides: perl(autodie::hints) = 2.29001 \ +Provides: perl(autodie::skip) = 2.29 \ +%{nil} +%global gendep_perl_bignum \ +Requires: perl(:VERSION) >= 5.10.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.51 \ +Provides: perl(Math::BigInt::Trace) = 0.51 \ +Provides: perl(bigint) = 0.51 \ +Provides: perl(bignum) = 0.51 \ +Provides: perl(bigrat) = 0.51 \ +%{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(Config) \ +Requires: perl(Encode) \ +Requires: perl(constant) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(encoding) = 2.22 \ +%{nil} +%global gendep_perl_experimental \ +Requires: perl(Carp) \ +Requires: perl(strict) \ +Requires: perl(version) \ +Requires: perl(warnings) \ +Provides: perl(experimental) = 0.020 \ +%{nil} +%global gendep_perl_interpreter \ +Requires: perl(:VERSION) >= 5.0.0 \ +Requires: perl(:VERSION) >= 5.10.1 \ +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.76 \ +Provides: perl(B::Concise) = 1.004 \ +Provides: perl(B::Deparse) = 1.49 \ +Provides: perl(B::OBJECT) \ +Provides: perl(B::Op_private) = 5.030000 \ +Provides: perl(B::Showlex) = 1.05 \ +Provides: perl(B::Terse) = 1.09 \ +Provides: perl(B::Xref) = 1.07 \ +Provides: perl(Benchmark) = 1.22 \ +Provides: perl(Class::Struct) = 0.65 \ +Provides: perl(Class::Struct::Tie_ISA) \ +Provides: perl(Config) = 5.030000 \ +Provides: perl(Config::Extensions) = 0.03 \ +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.05 \ +Provides: perl(Dumpvalue) = 1.19 \ +Provides: perl(DynaLoader) = 1.45 \ +Provides: perl(EVERY::LAST) \ +Provides: perl(English) = 1.10 \ +Provides: perl(ExtUtils::Constant) = 0.25 \ +Provides: perl(ExtUtils::Constant::Base) = 0.06 \ +Provides: perl(ExtUtils::Constant::ProxySubs) = 0.09 \ +Provides: perl(ExtUtils::Constant::Utils) = 0.04 \ +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.34 \ +Provides: perl(File::DosGlob) = 1.12 \ +Provides: perl(File::Find) = 1.36 \ +Provides: perl(File::Glob) = 1.32 \ +Provides: perl(File::stat) = 1.08 \ +Provides: perl(FileCache) = 1.10 \ +Provides: perl(FileHandle) = 2.03 \ +Provides: perl(FindBin) = 1.51 \ +Provides: perl(GDBM_File) = 1.18 \ +Provides: perl(Getopt::Std) = 1.12 \ +Provides: perl(Hash::Util) = 0.22 \ +Provides: perl(Hash::Util::FieldHash) = 1.20 \ +Provides: perl(I18N::Collate) = 1.02 \ +Provides: perl(I18N::LangTags) = 0.43 \ +Provides: perl(I18N::LangTags::Detect) = 1.07 \ +Provides: perl(I18N::LangTags::List) = 0.40 \ +Provides: perl(I18N::Langinfo) = 0.18 \ +Provides: perl(IPC::Open2) = 1.04 \ +Provides: perl(IPC::Open3) = 1.20 \ +Provides: perl(NDBM_File) = 1.15 \ +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.02 \ +Provides: perl(Net::netent) = 1.01 \ +Provides: perl(Net::protoent) = 1.01 \ +Provides: perl(Net::servent) = 1.02 \ +Provides: perl(O) = 1.03 \ +Provides: perl(ODBM_File) = 1.16 \ +Provides: perl(Opcode) = 1.43 \ +Provides: perl(POSIX) = 1.88 \ +Provides: perl(POSIX::SigAction) \ +Provides: perl(POSIX::SigRt) \ +Provides: perl(POSIX::SigSet) \ +Provides: perl(PerlIO) = 1.10 \ +Provides: perl(PerlIO::encoding) = 0.27 \ +Provides: perl(PerlIO::mmap) = 0.016 \ +Provides: perl(PerlIO::scalar) = 0.30 \ +Provides: perl(PerlIO::via) = 0.17 \ +Provides: perl(Pod::Functions) = 1.13 \ +Provides: perl(SDBM_File) = 1.15 \ +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.22 \ +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.07 \ +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.6 \ +Provides: perl(Tie::StdHash) \ +Provides: perl(Tie::StdScalar) \ +Provides: perl(Tie::SubstrHash) = 1.00 \ +Provides: perl(Time::gmtime) = 1.04 \ +Provides: perl(Time::localtime) = 1.03 \ +Provides: perl(Time::tm) = 1.00 \ +Provides: perl(UNIVERSAL) = 1.13 \ +Provides: perl(Unicode::UCD) = 0.72 \ +Provides: perl(User::grent) = 1.03 \ +Provides: perl(User::pwent) = 1.01 \ +Provides: perl(_charnames) = 1.45 \ +Provides: perl(attributes) = 0.33 \ +Provides: perl(autouse) = 1.11 \ +Provides: perl(base) = 2.27 \ +Provides: perl(blib) = 1.07 \ +Provides: perl(bytes) = 1.07 \ +Provides: perl(bytes_heavy.pl) \ +Provides: perl(charnames) = 1.45 \ +Provides: perl(deprecate) = 0.04 \ +Provides: perl(diagnostics) = 1.36 \ +Provides: perl(dumpvar.pl) \ +Provides: perl(encoding::warnings) = 0.13 \ +Provides: perl(feature) = 1.54 \ +Provides: perl(fields) = 2.24 \ +Provides: perl(filetest) = 1.03 \ +Provides: perl(if) = 0.0608 \ +Provides: perl(less) = 0.03 \ +Provides: perl(lib) = 0.65 \ +Provides: perl(locale) = 1.09 \ +Provides: perl(mro) = 1.22 \ +Provides: perl(ops) = 1.02 \ +Provides: perl(overload) = 1.30 \ +Provides: perl(overload::numbers) \ +Provides: perl(overloading) = 0.02 \ +Provides: perl(perl5db.pl) \ +Provides: perl(sigtrap) = 1.09 \ +Provides: perl(sort) = 2.04 \ +Provides: perl(subs) = 1.03 \ +Provides: perl(vars) = 1.05 \ +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.11 \ +Provides: perl(Net::Config) = 3.11 \ +Provides: perl(Net::Domain) = 3.11 \ +Provides: perl(Net::FTP) = 3.11 \ +Provides: perl(Net::FTP::A) = 3.11 \ +Provides: perl(Net::FTP::E) = 3.11 \ +Provides: perl(Net::FTP::I) = 3.11 \ +Provides: perl(Net::FTP::L) = 3.11 \ +Provides: perl(Net::FTP::_SSL_SingleSessionCache) \ +Provides: perl(Net::FTP::dataconn) = 3.11 \ +Provides: perl(Net::NNTP) = 3.11 \ +Provides: perl(Net::NNTP::_SSL) \ +Provides: perl(Net::Netrc) = 3.11 \ +Provides: perl(Net::POP3) = 3.11 \ +Provides: perl(Net::POP3::_SSL) \ +Provides: perl(Net::SMTP) = 3.11 \ +Provides: perl(Net::SMTP::_SSL) \ +Provides: perl(Net::Time) = 3.11 \ +%{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.30.0) \ +Provides: perl(:VERSION) = 5.30.0 \ +Provides: perl(:WITH_64BIT) \ +Provides: perl(:WITH_ITHREADS) \ +Provides: perl(:WITH_LARGEFILES) \ +Provides: perl(:WITH_PERLIO) \ +Provides: perl(:WITH_THREADS) \ +Provides: perl(XSLoader) = 0.30 \ +Provides: perl(integer) = 1.01 \ +Provides: perl(re) = 0.37 \ +Provides: perl(strict) = 1.11 \ +Provides: perl(unicore::Name) \ +Provides: perl(utf8) = 1.22 \ +Provides: perl(utf8_heavy.pl) \ +Provides: perl(warnings) = 1.44 \ +%{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) \ +Provides: perl(parent) = 0.237 \ +%{nil} +%global gendep_perl_perlfaq \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(perlfaq) = 5.20190126 \ +%{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.11 \ +Provides: perl(Pod::ParseLink) = 4.11 \ +Provides: perl(Pod::Text) = 4.11 \ +Provides: perl(Pod::Text::Color) = 4.11 \ +Provides: perl(Pod::Text::Overstrike) = 4.11 \ +Provides: perl(Pod::Text::Termcap) = 4.11 \ +%{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.22 \ +%{nil} +%global gendep_perl_threads_debuginfo \ +%{nil} +%global gendep_perl_threads_shared \ +Requires: perl(:VERSION) >= 5.8.0 \ +Requires: perl(Config) \ +Requires: perl(Scalar::Util) \ +Requires: perl(strict) \ +Requires: perl(warnings) \ +Provides: perl(threads::shared) = 1.60 \ +%{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(version::regex) \ +Requires: perl(warnings::register) \ +Provides: perl(version) = 0.9924 \ +Provides: perl(version::regex) = 0.9924 \ +%{nil} diff --git a/SOURCES/macros.perl b/SOURCES/macros.perl new file mode 100644 index 0000000..9de4eff --- /dev/null +++ b/SOURCES/macros.perl @@ -0,0 +1,158 @@ +# 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 +} + +############################################################################# +# Perl specific macros, no longer part of rpm >= 4.15 +%perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch) +%perl_vendorlib %(eval "`%{__perl} -V:installvendorlib`"; echo $installvendorlib) +%perl_archlib %(eval "`%{__perl} -V:installarchlib`"; echo $installarchlib) +%perl_privlib %(eval "`%{__perl} -V:installprivlib`"; echo $installprivlib) + +############################################################################# +# 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/SOURCES/perl-5.10.0-libresolv.patch b/SOURCES/perl-5.10.0-libresolv.patch new file mode 100644 index 0000000..d6ff1c7 --- /dev/null +++ b/SOURCES/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 +@@ -1483,7 +1483,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/SOURCES/perl-5.10.0-x86_64-io-test-failure.patch b/SOURCES/perl-5.10.0-x86_64-io-test-failure.patch new file mode 100644 index 0000000..6ffc84b --- /dev/null +++ b/SOURCES/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 +@@ -257,7 +257,7 @@ isnt($atime, 500000000, 'atime'); + isnt($mtime, $ut + $delta, 'mtime: utime called with two undefs'); + + SKIP: { +- skip "no futimes", 6 unless ($Config{d_futimes} || "") eq "define"; ++ skip "no futimes", 6; + note("check futimes"); + open(my $fh, "<", 'b'); + $foo = (utime $ut,$ut + $delta, $fh); diff --git a/SOURCES/perl-5.14.1-offtest.patch b/SOURCES/perl-5.14.1-offtest.patch new file mode 100644 index 0000000..45294c8 --- /dev/null +++ b/SOURCES/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/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch b/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch new file mode 100644 index 0000000..7887867 --- /dev/null +++ b/SOURCES/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 +@@ -3424,6 +3424,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/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch b/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch new file mode 100644 index 0000000..f1f76ac --- /dev/null +++ b/SOURCES/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 +@@ -30,6 +30,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}; +@@ -1028,7 +1029,7 @@ sub xs_make_dynamic_lib { + 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 +@@ -1041,6 +1042,11 @@ sub xs_make_dynamic_lib { + # 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/SOURCES/perl-5.16.3-create_libperl_soname.patch b/SOURCES/perl-5.16.3-create_libperl_soname.patch new file mode 100644 index 0000000..0cfd59d --- /dev/null +++ b/SOURCES/perl-5.16.3-create_libperl_soname.patch @@ -0,0 +1,57 @@ +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 +@@ -70,11 +70,11 @@ true) + ${revision}.${patchlevel}.${subversion}" + case "$osvers" in + 1[5-9]*|[2-9]*) +- shrpldflags="$shrpldflags -install_name `pwd`/\$@ -Xlinker -headerpad_max_install_names" ++ shrpldflags="$shrpldflags -install_name `pwd`/libperl.${revision}.${patchlevel}.dylib -Xlinker -headerpad_max_install_names" + exeldflags="-Xlinker -headerpad_max_install_names" + ;; + *) +- shrpldflags="$shrpldflags -install_name \$(shrpdir)/\$@" ++ shrpldflags="$shrpldflags -install_name \$(shrpdir)/libperl.${revision}.${patchlevel}.dylib" + ;; + esac + ;; +@@ -76,13 +76,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 +@@ -120,6 +122,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/SOURCES/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch b/SOURCES/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch new file mode 100644 index 0000000..04b333f --- /dev/null +++ b/SOURCES/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 ; +@@ -98,6 +99,7 @@ gdbm_TIEHASH(dbtype, name, read_write, m + } + if (dbp) { + RETVAL = (GDBM_File)safecalloc(1, sizeof(GDBM_File_type)); ++ RETVAL->owner = aTHX; + RETVAL->dbp = dbp; + } else { + RETVAL = NULL; +@@ -118,12 +120,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 +@@ -49,6 +49,7 @@ datum nextkey(datum key); + #define store_value 3 + + typedef struct { ++ tTHX owner; + void * dbp ; + SV * filter[4]; + int filtering ; +@@ -137,6 +138,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: +@@ -149,13 +151,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 ; +@@ -51,6 +52,7 @@ sdbm_TIEHASH(dbtype, filename, flags, mode) + } + if (dbp) { + RETVAL = (SDBM_File)safecalloc(1, sizeof(SDBM_File_type)); ++ RETVAL->owner = aTHX; + RETVAL->dbp = dbp ; + } + +@@ -62,7 +64,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 +@@ -510,5 +510,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/SOURCES/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch b/SOURCES/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch new file mode 100644 index 0000000..49de388 --- /dev/null +++ b/SOURCES/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 +@@ -8762,7 +8762,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 +@@ -784,6 +784,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/SOURCES/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch b/SOURCES/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch new file mode 100644 index 0000000..b702e85 --- /dev/null +++ b/SOURCES/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 +@@ -232,7 +232,7 @@ sub can_run { + } + + require File::Spec; +- require ExtUtils::MakeMaker; ++ require ExtUtils::MM::Utils; + + my @possibles; + +-- +2.5.5 + diff --git a/SOURCES/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch b/SOURCES/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch new file mode 100644 index 0000000..f68569f --- /dev/null +++ b/SOURCES/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/SOURCES/perl-5.28.0-Pass-CFLAGS-to-dtrace.patch b/SOURCES/perl-5.28.0-Pass-CFLAGS-to-dtrace.patch new file mode 100644 index 0000000..2e9a36d --- /dev/null +++ b/SOURCES/perl-5.28.0-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 +@@ -462,6 +462,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 + +@@ -895,19 +897,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 +@@ -519,7 +519,10 @@ for file do + toke) optimize=-O0 ;; + esac + +- 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/SOURCES/perl-5.30.0-PATCH-perl-134329-Use-after-free-in-regcomp.c.patch b/SOURCES/perl-5.30.0-PATCH-perl-134329-Use-after-free-in-regcomp.c.patch new file mode 100644 index 0000000..240a9bb --- /dev/null +++ b/SOURCES/perl-5.30.0-PATCH-perl-134329-Use-after-free-in-regcomp.c.patch @@ -0,0 +1,389 @@ +From fd30a7c49a661aecfb361045646da264cdadea8f Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Fri, 23 Aug 2019 12:40:24 -0600 +Subject: [PATCH] PATCH: [perl #134329] Use after free in regcomp.c +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A compiled regex is composed of nodes, forming a linked list, with +normally a maximum of 16 bits used to specify the offset of the next +link. For patterns that require more space than this, the nodes that +jump around are replaced with ones that have wider offsets. Most nodes +are unaffected, as they just contain the offset of the next node, and +that number is always small. The jump nodes are the ones affected. + +When compiling a pattern, the 16 bit mechanism is used, until it +overflows, at which point the pattern is recompiled with the long jumps +instead. + +When I rewrote the compiler last year to make it generally one pass, I +noticed a lot of the cases where a node was added didn't check if the +result overflowed (the function that does this returns FALSE in that +case). I presumed the prior authors knew better, and did not change +things, except to put in a bogus value in the link (offset) field that +should cause a crash if it were used. That's what's happening in this +ticket. + +But seeing this example, it's clear that the return value should be +checked every time, because you can reach the limit at any time. This +commit changes to do that, and to require the function's return value to +not be ignored, to guard against future changes. + +My guess is that the reason it generally worked when there were multiple +passes is that the first pass didn't do anything except count space, and +that at some point before the end of the pass the return value did get +checked, so by the time the nodes were allocated for real, it knew +enough to use the long jumps. + +Petr Písař: Ported to 5.30.0 from +3b2e5620ed4a6b341f97ffd1d4b6466cc2c4bc5b. + +Signed-off-by: Petr Písař +--- + MANIFEST | 1 + + embed.fnc | 4 +- + proto.h | 8 ++- + regcomp.c | 109 ++++++++++++++++++++++++++++----------- + t/re/bigfuzzy_not_utf8.t | Bin 0 -> 36399 bytes + 5 files changed, 88 insertions(+), 34 deletions(-) + create mode 100644 t/re/bigfuzzy_not_utf8.t + +diff --git a/MANIFEST b/MANIFEST +index 10e2cc0..cc24cd7 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -5839,6 +5839,7 @@ t/porting/test_bootstrap.t Test that the instructions for test bootstrapping are + t/porting/utils.t Check that utility scripts still compile + t/re/alpha_assertions.t See if things like '(*postive_lookahed:...) work properly + t/re/anyof.t See if bracketed char classes [...] compile properly ++t/re/bigfuzzy_not_utf8.t Big and ugly tests not storable as UTF-8 + t/re/charset.t See if regex modifiers like /d, /u work properly + t/re/fold_grind.pl Core file to see if regex case folding works properly + t/re/fold_grind_8.t Wrapper for fold_grind.pl for /l testing with a UTF-8 locale +diff --git a/embed.fnc b/embed.fnc +index c977d39..c2c5f16 100644 +--- a/embed.fnc ++++ b/embed.fnc +@@ -2427,7 +2427,7 @@ Es |void |reginsert |NN RExC_state_t *pRExC_state \ + |const U8 op \ + |const regnode_offset operand \ + |const U32 depth +-Es |bool |regtail |NN RExC_state_t * pRExC_state \ ++EsR |bool |regtail |NN RExC_state_t * pRExC_state \ + |NN const regnode_offset p \ + |NN const regnode_offset val \ + |const U32 depth +@@ -2561,7 +2561,7 @@ Es |void |dump_trie_interim_list|NN const struct _reg_trie_data *trie\ + Es |void |dump_trie_interim_table|NN const struct _reg_trie_data *trie\ + |NULLOK HV* widecharmap|NN AV *revcharmap\ + |U32 next_alloc|U32 depth +-Es |bool |regtail_study |NN RExC_state_t *pRExC_state \ ++EsR |bool |regtail_study |NN RExC_state_t *pRExC_state \ + |NN regnode_offset p|NN const regnode_offset val|U32 depth + # endif + #endif +diff --git a/proto.h b/proto.h +index e0ea55b..2ef7ce2 100644 +--- a/proto.h ++++ b/proto.h +@@ -4457,9 +4457,11 @@ PERL_CALLCONV int Perl_re_indentf(pTHX_ const char *fmt, U32 depth, ...); + assert(fmt) + STATIC void S_regdump_extflags(pTHX_ const char *lead, const U32 flags); + STATIC void S_regdump_intflags(pTHX_ const char *lead, const U32 flags); +-STATIC bool S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode_offset p, const regnode_offset val, U32 depth); ++STATIC bool S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode_offset p, const regnode_offset val, U32 depth) ++ __attribute__warn_unused_result__; + #define PERL_ARGS_ASSERT_REGTAIL_STUDY \ + assert(pRExC_state); assert(p); assert(val) ++ + # endif + # if defined(PERL_IN_REGEXEC_C) + STATIC void S_debug_start_match(pTHX_ const REGEXP *prog, const bool do_utf8, const char *start, const char *end, const char *blurb); +@@ -5599,9 +5601,11 @@ STATIC regnode_offset S_regnode_guts(pTHX_ RExC_state_t *pRExC_state, const U8 o + STATIC regnode_offset S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth); + #define PERL_ARGS_ASSERT_REGPIECE \ + assert(pRExC_state); assert(flagp) +-STATIC bool S_regtail(pTHX_ RExC_state_t * pRExC_state, const regnode_offset p, const regnode_offset val, const U32 depth); ++STATIC bool S_regtail(pTHX_ RExC_state_t * pRExC_state, const regnode_offset p, const regnode_offset val, const U32 depth) ++ __attribute__warn_unused_result__; + #define PERL_ARGS_ASSERT_REGTAIL \ + assert(pRExC_state); assert(p); assert(val) ++ + STATIC void S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, struct scan_data_t *data, SSize_t *minlenp, int is_inf); + #define PERL_ARGS_ASSERT_SCAN_COMMIT \ + assert(pRExC_state); assert(data); assert(minlenp) +diff --git a/regcomp.c b/regcomp.c +index dfc22bc..b93fbe7 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -11307,10 +11307,15 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + return 0; + } + +- REGTAIL(pRExC_state, ret, atomic); ++ if (! REGTAIL(pRExC_state, ret, atomic)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + +- REGTAIL(pRExC_state, atomic, +- reg_node(pRExC_state, SRCLOSE)); ++ if (! REGTAIL(pRExC_state, atomic, reg_node(pRExC_state, ++ SRCLOSE))) ++ { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + + RExC_in_script_run = 0; + return ret; +@@ -11769,7 +11774,9 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + RExC_flags & RXf_PMf_COMPILETIME + ); + FLAGS(REGNODE_p(ret)) = 2; +- REGTAIL(pRExC_state, ret, eval); ++ if (! REGTAIL(pRExC_state, ret, eval)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + /* deal with the length of this later - MJD */ + return ret; + } +@@ -11822,7 +11829,9 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + + tail = reg(pRExC_state, 1, &flag, depth+1); + RETURN_FAIL_ON_RESTART(flag, flagp); +- REGTAIL(pRExC_state, ret, tail); ++ if (! REGTAIL(pRExC_state, ret, tail)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + goto insert_if; + } + else if ( RExC_parse[0] == '<' /* (?()...) */ +@@ -11914,15 +11923,22 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + } + nextchar(pRExC_state); + insert_if: +- REGTAIL(pRExC_state, ret, reganode(pRExC_state, IFTHEN, 0)); ++ if (! REGTAIL(pRExC_state, ret, reganode(pRExC_state, ++ IFTHEN, 0))) ++ { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + br = regbranch(pRExC_state, &flags, 1, depth+1); + if (br == 0) { + RETURN_FAIL_ON_RESTART(flags,flagp); + FAIL2("panic: regbranch returned failure, flags=%#" UVxf, + (UV) flags); + } else +- REGTAIL(pRExC_state, br, reganode(pRExC_state, +- LONGJMP, 0)); ++ if (! REGTAIL(pRExC_state, br, reganode(pRExC_state, ++ LONGJMP, 0))) ++ { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + c = UCHARAT(RExC_parse); + nextchar(pRExC_state); + if (flags&HASWIDTH) +@@ -11939,7 +11955,9 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + FAIL2("panic: regbranch returned failure, flags=%#" UVxf, + (UV) flags); + } +- REGTAIL(pRExC_state, ret, lastbr); ++ if (! REGTAIL(pRExC_state, ret, lastbr)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + if (flags&HASWIDTH) + *flagp |= HASWIDTH; + c = UCHARAT(RExC_parse); +@@ -11954,16 +11972,26 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + vFAIL("Switch (?(condition)... contains too many branches"); + } + ender = reg_node(pRExC_state, TAIL); +- REGTAIL(pRExC_state, br, ender); ++ if (! REGTAIL(pRExC_state, br, ender)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + if (lastbr) { +- REGTAIL(pRExC_state, lastbr, ender); +- REGTAIL(pRExC_state, REGNODE_OFFSET( +- NEXTOPER( +- NEXTOPER(REGNODE_p(lastbr)))), +- ender); ++ if (! REGTAIL(pRExC_state, lastbr, ender)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } ++ if (! REGTAIL(pRExC_state, ++ REGNODE_OFFSET( ++ NEXTOPER( ++ NEXTOPER(REGNODE_p(lastbr)))), ++ ender)) ++ { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + } + else +- REGTAIL(pRExC_state, ret, ender); ++ if (! REGTAIL(pRExC_state, ret, ender)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + #if 0 /* Removing this doesn't cause failures in the test suite -- khw */ + RExC_size++; /* XXX WHY do we need this?!! + For large programs it seems to be required +@@ -12113,7 +12141,9 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + *flagp |= flags&SIMPLE; + } + if (is_open) { /* Starts with OPEN. */ +- REGTAIL(pRExC_state, ret, br); /* OPEN -> first. */ ++ if (! REGTAIL(pRExC_state, ret, br)) { /* OPEN -> first. */ ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + } + else if (paren != '?') /* Not Conditional */ + ret = br; +@@ -12121,12 +12151,15 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + lastbr = br; + while (*RExC_parse == '|') { + if (RExC_use_BRANCHJ) { ++ bool shut_gcc_up; ++ + ender = reganode(pRExC_state, LONGJMP, 0); + + /* Append to the previous. */ +- REGTAIL(pRExC_state, +- REGNODE_OFFSET(NEXTOPER(NEXTOPER(REGNODE_p(lastbr)))), +- ender); ++ shut_gcc_up = REGTAIL(pRExC_state, ++ REGNODE_OFFSET(NEXTOPER(NEXTOPER(REGNODE_p(lastbr)))), ++ ender); ++ PERL_UNUSED_VAR(shut_gcc_up); + } + nextchar(pRExC_state); + if (freeze_paren) { +@@ -12237,9 +12270,10 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth) + is_nothing= 0; + } + else if (op == BRANCHJ) { +- REGTAIL_STUDY(pRExC_state, +- REGNODE_OFFSET(NEXTOPER(NEXTOPER(br))), +- ender); ++ bool shut_gcc_up = REGTAIL_STUDY(pRExC_state, ++ REGNODE_OFFSET(NEXTOPER(NEXTOPER(br))), ++ ender); ++ PERL_UNUSED_VAR(shut_gcc_up); + /* for now we always disable this optimisation * / + if ( OP(NEXTOPER(NEXTOPER(br))) != NOTHING + || regnext(NEXTOPER(NEXTOPER(br))) != REGNODE_p(ender)) +@@ -12551,7 +12585,9 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth) + const regnode_offset w = reg_node(pRExC_state, WHILEM); + + FLAGS(REGNODE_p(w)) = 0; +- REGTAIL(pRExC_state, ret, w); ++ if (! REGTAIL(pRExC_state, ret, w)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + if (RExC_use_BRANCHJ) { + reginsert(pRExC_state, LONGJMP, ret, depth+1); + reginsert(pRExC_state, NOTHING, ret, depth+1); +@@ -12566,7 +12602,11 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth) + if (RExC_use_BRANCHJ) + NEXT_OFF(REGNODE_p(ret)) = 3; /* Go over NOTHING to + LONGJMP. */ +- REGTAIL(pRExC_state, ret, reg_node(pRExC_state, NOTHING)); ++ if (! REGTAIL(pRExC_state, ret, reg_node(pRExC_state, ++ NOTHING))) ++ { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + RExC_whilem_seen++; + MARK_NAUGHTY_EXP(1, 4); /* compound interest */ + } +@@ -12638,16 +12678,22 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth) + if (*RExC_parse == '?') { + nextchar(pRExC_state); + reginsert(pRExC_state, MINMOD, ret, depth+1); +- REGTAIL(pRExC_state, ret, ret + NODE_STEP_REGNODE); ++ if (! REGTAIL(pRExC_state, ret, ret + NODE_STEP_REGNODE)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + } + else if (*RExC_parse == '+') { + regnode_offset ender; + nextchar(pRExC_state); + ender = reg_node(pRExC_state, SUCCEED); +- REGTAIL(pRExC_state, ret, ender); ++ if (! REGTAIL(pRExC_state, ret, ender)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + reginsert(pRExC_state, SUSPEND, ret, depth+1); + ender = reg_node(pRExC_state, TAIL); +- REGTAIL(pRExC_state, ret, ender); ++ if (! REGTAIL(pRExC_state, ret, ender)) { ++ REQUIRE_BRANCHJ(flagp, 0); ++ } + } + + if (ISMULT2(RExC_parse)) { +@@ -19815,8 +19861,8 @@ S_regtail(pTHX_ RExC_state_t * pRExC_state, + } + else { + if (val - scan > U16_MAX) { +- /* Since not all callers check the return value, populate this with +- * something that won't loop and will likely lead to a crash if ++ /* Populate this with something that won't loop and will likely ++ * lead to a crash if the caller ignores the failure return, and + * execution continues */ + NEXT_OFF(REGNODE_p(scan)) = U16_MAX; + return FALSE; +@@ -19927,6 +19973,9 @@ S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode_offset p, + } + else { + if (val - scan > U16_MAX) { ++ /* Populate this with something that won't loop and will likely ++ * lead to a crash if the caller ignores the failure return, and ++ * execution continues */ + NEXT_OFF(REGNODE_p(scan)) = U16_MAX; + return FALSE; + } +diff --git a/t/re/bigfuzzy_not_utf8.t b/t/re/bigfuzzy_not_utf8.t +new file mode 100644 +index 0000000000000000000000000000000000000000..b4dfd150a9297172af5d8e7811357fd68931f8d7 +GIT binary patch +literal 36399 +zcmeI5y>Ht_6u>V)vj`|)bnw`ot)P-@MMCTpNTQ@6nzlsHpvaKGfa6%8#FNC9CKZxu +z;)Jf$YRJ%zoeHDqo_|0?hWr89EXQ;I1&?0XN7}J$MN%l4pVm7V_T9aA@8fqzil1_F +zE|;$}O->{eN&28B=@fnhT2nU|t*9E+ShXPw8fDMw8q;-2Rj9#qL#IYfFlbp&QU)zC +zsvD}tL@Ma?;e+olU(13qL4mf$Xi2KlMpfR-(n>>?sal~`K`RMWM$0up6UqkD^enA1 +zg=vB;ZywbQuvXdxGnK~k=b({GBpSNyN0Z7%!KptLG(}RXdLfa}8zrhWl%f+Fv@eZ)eEZ=O;~ +zoje1d1%IQ=tmzSkdDoay2=T|Pz +zo*8+Kr80%Y79{wyR4)RabV^adFWpeZh73a5P-K`EDzb{C0J1N?-Bg5osvt7$#*LDy +z8pU1*;Hb;O`}w=|H2|VCNgvil!C)|-F!4`oOre4(0@l39WM)9+aK3^6G2ryE+cJd2 +zG%)O}9%o(Xh5+npOk+9dJvA{f4-SNl&MqX!&&dnrWK5-2KkXUdJ@kJhZYzBs1%)nFU8yw#)YRc86bC;+Jl5 +zgy&7Z`^Fw(?OiZUet&)S)$APMGYhtb_713ZrNwu<++Ih39!HYq+wJzw?PH0VT{$4+ +zz%lmLw7_MJYpy#@2q4sQ7fUP%j9esxG8j3)cOk6*w(m~R0TQqY5H30#e)2t(Pe1U0 +zo7x9RuwyuZKZc9WF8Sr`COoz9_eZT+t&ggp!nq?r$P9^7Qf{`Z-{X`J#)<@xfTsj3 +zt7*Z}u%|ZB*f}Q9ILEnRY6A%n(u&6pLLV6Zhn*Je^046bHe3TpU@8gBV?hE)AbtcU +z+*`#j(Lf`1Pqq2ly)J6Thrs2aLgj*Tgns-Zu;!m>A1&i8UmxMd)HGfL@L=Np^}xmu +z6KnnbWTw9d+eiQj_)Fjmf6b$HBoG*ZvmFNFos+;OYFZqXdWnYd{P*jg`)Jij({(%| +z`6Q@2v~b4IiYzkMz+$L)vsWgF{`mxB#u(y$sg7Y3RpU)yZB+QhQ9`d|Ekc6YFM1X7 +zv7KL!Yu;A|z5IoJ9um0Yp{;0|@_teFTYTByaiWdaEl+G^1Vp#S{&b=E +zj|&}JWy0IK6Ap73lq)qnz?y5#A&T&w#6r1;mt7IkMW2eFfxdF(5w^x}jvkffEfIvgHNTjXV5+K%<*L3ET_R +z+c|c&wLM;PQ@lgr#v_H=NB{{Sfw2f&z<1F4c?Err>gK7){ur^11cD`i`-xzApY~Qf +z-Soco%zKmLS;Xfudc5$tj2??=s^NXSD9!fSp38_*Cb5m>t!bHAQk&zN(xREQTJ4>c +zC4OI8w7BN_>Y=zWZjEyWg?) +z-~n%be|`1U>>S}U3wvP0@z9kP-|cdH9RYeANt%btP&>Dm_#=s#T{$4+fFnF_9>oX| +zooo&c`N+|sIY^}|4akg;3*^W-WYBK!OJAAU-%N9Mt_49ZzRWCquG}WPRkz@uPUllu +jIzOMKFSg+CqdL=Mn!K`nb$RLfL7{9Vwi5pX0LDXb + +literal 0 +HcmV?d00001 + +-- +2.21.0 + diff --git a/SOURCES/perl-5.30.0-Remove-undefined-behavior-from-IV-shifting.patch b/SOURCES/perl-5.30.0-Remove-undefined-behavior-from-IV-shifting.patch new file mode 100644 index 0000000..31ad4cf --- /dev/null +++ b/SOURCES/perl-5.30.0-Remove-undefined-behavior-from-IV-shifting.patch @@ -0,0 +1,75 @@ +From 7e5b390a008ccad094a39c350f385d58e8a5102a Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Fri, 3 May 2019 13:57:47 -0600 +Subject: [PATCH] Remove undefined behavior from IV shifting +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It is undefined behavior to shift a negative integer to the left. This +commit avoids that by treating the value as unsigned, then casting back +to integer for return. + +Petr Písař: Ported to 5.30.0 from +814735a391b874af8f00eaf89469e5ec7f38cd4aa. + +Signed-off-by: Petr Písař +--- + asan_ignore | 5 ----- + pp.c | 21 ++++++++++++++++++++- + 2 files changed, 20 insertions(+), 6 deletions(-) + +diff --git a/asan_ignore b/asan_ignore +index e0f5685..f520546 100644 +--- a/asan_ignore ++++ b/asan_ignore +@@ -18,11 +18,6 @@ + + fun:Perl_pp_i_* + +-# Perl's << is defined as using the underlying C's << operator, with the +-# same undefined behaviour for shifts greater than the word size. +-# (UVs normally, IVs with 'use integer') +- +-fun:Perl_pp_left_shift + + # this function numifies the field width in eg printf "%10f". + # It has its own overflow detection, so don't warn about it +diff --git a/pp.c b/pp.c +index 7afb090..3ca04e1 100644 +--- a/pp.c ++++ b/pp.c +@@ -1991,10 +1991,29 @@ static IV S_iv_shift(IV iv, int shift, bool left) + shift = -shift; + left = !left; + } ++ + if (UNLIKELY(shift >= IV_BITS)) { + return iv < 0 && !left ? -1 : 0; + } +- return left ? iv << shift : iv >> shift; ++ /* For left shifts, perl 5 has chosen to treat the value as unsigned for ++ * the * purposes of shifting, then cast back to signed. This is very ++ * different from perl 6: ++ * ++ * $ perl6 -e 'say -2 +< 5' ++ * -64 ++ * ++ * $ ./perl -le 'print -2 << 5' ++ * 18446744073709551552 ++ * */ ++ if (left) { ++ if (iv == IV_MIN) { /* Casting this to a UV is undefined behavior */ ++ return 0; ++ } ++ return (IV) (((UV) iv) << shift); ++ } ++ ++ /* Here is right shift */ ++ return iv >> shift; + } + + #define UV_LEFT_SHIFT(uv, shift) S_uv_shift(uv, shift, TRUE) +-- +2.20.1 + diff --git a/SOURCES/perl-5.30.0-perl-134221-support-append-mode-for-open-.-undef.patch b/SOURCES/perl-5.30.0-perl-134221-support-append-mode-for-open-.-undef.patch new file mode 100644 index 0000000..e954285 --- /dev/null +++ b/SOURCES/perl-5.30.0-perl-134221-support-append-mode-for-open-.-undef.patch @@ -0,0 +1,191 @@ +From 8e9cf86aa69cb79c91edf5ff0586f87bfe4c91bd Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Tue, 2 Jul 2019 14:16:35 +1000 +Subject: [PATCH] (perl #134221) support append mode for open .. undef +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Petr Písař: Ported to 5.30.0 from +45b29440d38be155c5177c8d6f9a5d4e7c2c098c. + +Signed-off-by: Petr Písař +--- + doio.c | 15 +++++++++++++++ + embed.fnc | 1 + + perlio.c | 26 +++++++++++++++++++++----- + perlio.h | 3 +++ + proto.h | 5 +++++ + t/io/perlio_open.t | 14 ++++++++++++-- + 6 files changed, 57 insertions(+), 7 deletions(-) + +diff --git a/doio.c b/doio.c +index 05a0696..424e0e3 100644 +--- a/doio.c ++++ b/doio.c +@@ -265,6 +265,21 @@ Perl_my_mkstemp_cloexec(char *templte) + #endif + } + ++int ++Perl_my_mkostemp_cloexec(char *templte, int flags) ++{ ++ dVAR; ++ PERL_ARGS_ASSERT_MY_MKOSTEMP_CLOEXEC; ++#if defined(O_CLOEXEC) ++ DO_ONEOPEN_EXPERIMENTING_CLOEXEC( ++ PL_strategy_mkstemp, ++ Perl_my_mkostemp(templte, flags | O_CLOEXEC), ++ Perl_my_mkostemp(templte, flags)); ++#else ++ DO_ONEOPEN_THEN_CLOEXEC(Perl_my_mkostemp(templte, flags)); ++#endif ++} ++ + #ifdef HAS_PIPE + int + Perl_PerlProc_pipe_cloexec(pTHX_ int *pipefd) +diff --git a/embed.fnc b/embed.fnc +index 259affd..c977d39 100644 +--- a/embed.fnc ++++ b/embed.fnc +@@ -476,6 +476,7 @@ p |int |PerlLIO_dup2_cloexec|int oldfd|int newfd + pR |int |PerlLIO_open_cloexec|NN const char *file|int flag + pR |int |PerlLIO_open3_cloexec|NN const char *file|int flag|int perm + pnoR |int |my_mkstemp_cloexec|NN char *templte ++pnoR |int |my_mkostemp_cloexec|NN char *templte|int flags + #ifdef HAS_PIPE + pR |int |PerlProc_pipe_cloexec|NN int *pipefd + #endif +diff --git a/perlio.c b/perlio.c +index 904d47a..5a0cd36 100644 +--- a/perlio.c ++++ b/perlio.c +@@ -1490,7 +1490,9 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd, + int imode, int perm, PerlIO *f, int narg, SV **args) + { + if (!f && narg == 1 && *args == &PL_sv_undef) { +- if ((f = PerlIO_tmpfile())) { ++ int imode = PerlIOUnix_oflags(mode); ++ ++ if (imode != -1 && (f = PerlIO_tmpfile_flags(imode))) { + if (!layers || !*layers) + layers = Perl_PerlIO_context_layers(aTHX_ mode); + if (layers && *layers) +@@ -5048,6 +5050,15 @@ PerlIO_stdoutf(const char *fmt, ...) + #undef PerlIO_tmpfile + PerlIO * + PerlIO_tmpfile(void) ++{ ++ return PerlIO_tmpfile_flags(0); ++} ++ ++#define MKOSTEMP_MODES ( O_RDWR | O_CREAT | O_EXCL ) ++#define MKOSTEMP_MODE_MASK ( O_ACCMODE | O_CREAT | O_EXCL | O_TRUNC ) ++ ++PerlIO * ++PerlIO_tmpfile_flags(int imode) + { + #ifndef WIN32 + dTHX; +@@ -5063,27 +5074,32 @@ PerlIO_tmpfile(void) + const char * const tmpdir = TAINTING_get ? NULL : PerlEnv_getenv("TMPDIR"); + SV * sv = NULL; + int old_umask = umask(0177); ++ imode &= ~MKOSTEMP_MODE_MASK; + if (tmpdir && *tmpdir) { + /* if TMPDIR is set and not empty, we try that first */ + sv = newSVpv(tmpdir, 0); + sv_catpv(sv, tempname + 4); +- fd = Perl_my_mkstemp_cloexec(SvPVX(sv)); ++ fd = Perl_my_mkostemp_cloexec(SvPVX(sv), imode); + } + if (fd < 0) { + SvREFCNT_dec(sv); + sv = NULL; + /* else we try /tmp */ +- fd = Perl_my_mkstemp_cloexec(tempname); ++ fd = Perl_my_mkostemp_cloexec(tempname, imode); + } + if (fd < 0) { + /* Try cwd */ + sv = newSVpvs("."); + sv_catpv(sv, tempname + 4); +- fd = Perl_my_mkstemp_cloexec(SvPVX(sv)); ++ fd = Perl_my_mkostemp_cloexec(SvPVX(sv), imode); + } + umask(old_umask); + if (fd >= 0) { +- f = PerlIO_fdopen(fd, "w+"); ++ /* fdopen() with a numeric mode */ ++ char mode[8]; ++ int writing = 1; ++ (void)PerlIO_intmode2str(imode | MKOSTEMP_MODES, mode, &writing); ++ f = PerlIO_fdopen(fd, mode); + if (f) + PerlIOBase(f)->flags |= PERLIO_F_TEMP; + PerlLIO_unlink(sv ? SvPVX_const(sv) : tempname); +diff --git a/perlio.h b/perlio.h +index d515020..ee16ab8 100644 +--- a/perlio.h ++++ b/perlio.h +@@ -286,6 +286,9 @@ PERL_CALLCONV SSize_t PerlIO_get_bufsiz(PerlIO *); + #ifndef PerlIO_tmpfile + PERL_CALLCONV PerlIO *PerlIO_tmpfile(void); + #endif ++#ifndef PerlIO_tmpfile_flags ++PERL_CALLCONV PerlIO *PerlIO_tmpfile_flags(int flags); ++#endif + #ifndef PerlIO_stdin + PERL_CALLCONV PerlIO *PerlIO_stdin(void); + #endif +diff --git a/proto.h b/proto.h +index 74a8e46..e0ea55b 100644 +--- a/proto.h ++++ b/proto.h +@@ -2270,6 +2270,11 @@ PERL_CALLCONV Pid_t Perl_my_fork(void); + PERL_CALLCONV I32 Perl_my_lstat(pTHX); + #endif + PERL_CALLCONV I32 Perl_my_lstat_flags(pTHX_ const U32 flags); ++PERL_CALLCONV int Perl_my_mkostemp_cloexec(char *templte, int flags) ++ __attribute__warn_unused_result__; ++#define PERL_ARGS_ASSERT_MY_MKOSTEMP_CLOEXEC \ ++ assert(templte) ++ + PERL_CALLCONV int Perl_my_mkstemp_cloexec(char *templte) + __attribute__warn_unused_result__; + #define PERL_ARGS_ASSERT_MY_MKSTEMP_CLOEXEC \ +diff --git a/t/io/perlio_open.t b/t/io/perlio_open.t +index 99d7e51..56c354b 100644 +--- a/t/io/perlio_open.t ++++ b/t/io/perlio_open.t +@@ -11,7 +11,7 @@ BEGIN { + use strict; + use warnings; + +-plan tests => 6; ++plan tests => 10; + + use Fcntl qw(:seek); + +@@ -31,6 +31,16 @@ use Fcntl qw(:seek); + is($data, "the right read stuff", "found the right stuff"); + } + +- ++SKIP: ++{ ++ ok((open my $fh, "+>>", undef), "open my \$fh, '+>>', undef") ++ or skip "can't open temp for append: $!", 3; ++ print $fh "abc"; ++ ok(seek($fh, 0, SEEK_SET), "seek to zero"); ++ print $fh "xyz"; ++ ok(seek($fh, 0, SEEK_SET), "seek to zero again"); ++ my $data = <$fh>; ++ is($data, "abcxyz", "check the second write appended"); ++} + + +-- +2.20.1 + diff --git a/SOURCES/perl-5.30.0-perl-134266-make-sure-is-writable-when-we-write-to-i.patch b/SOURCES/perl-5.30.0-perl-134266-make-sure-is-writable-when-we-write-to-i.patch new file mode 100644 index 0000000..e3c9218 --- /dev/null +++ b/SOURCES/perl-5.30.0-perl-134266-make-sure-is-writable-when-we-write-to-i.patch @@ -0,0 +1,102 @@ +From 3f8dbf40138bd2bcb569b23c88888a41ede9c355 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 5 Aug 2019 15:23:45 +1000 +Subject: [PATCH] (perl #134266) make sure $@ is writable when we write to it +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +when unwinding. + +Since except_sv might be ERRSV we try to preserve it's value, +if not the actual SV (which we have an extra refcount on if it is +except_sv). + +Petr Písař: Ported to 5.30.0 from +933e3e630076d4fdbe32a101eeb5f12e37ec4ac2. + +Signed-off-by: Petr Písař +--- + perl.h | 17 +++++++++++++++++ + pp_ctl.c | 10 ++++++++-- + t/lib/croak/pp_ctl | 8 ++++++++ + 3 files changed, 33 insertions(+), 2 deletions(-) + +diff --git a/perl.h b/perl.h +index e5a5585..383487c 100644 +--- a/perl.h ++++ b/perl.h +@@ -1357,6 +1357,23 @@ EXTERN_C char *crypt(const char *, const char *); + } \ + } STMT_END + ++/* contains inlined gv_add_by_type */ ++#define SANE_ERRSV() STMT_START { \ ++ SV ** const svp = &GvSV(PL_errgv); \ ++ if (!*svp) { \ ++ *svp = newSVpvs(""); \ ++ } else if (SvREADONLY(*svp)) { \ ++ SV *dupsv = newSVsv(*svp); \ ++ SvREFCNT_dec_NN(*svp); \ ++ *svp = dupsv; \ ++ } else { \ ++ SV *const errsv = *svp; \ ++ if (SvMAGICAL(errsv)) { \ ++ mg_free(errsv); \ ++ } \ ++ } \ ++ } STMT_END ++ + + #ifdef PERL_CORE + # define DEFSV (0 + GvSVn(PL_defgv)) +diff --git a/pp_ctl.c b/pp_ctl.c +index a38b9c1..1f2d812 100644 +--- a/pp_ctl.c ++++ b/pp_ctl.c +@@ -1720,9 +1720,13 @@ Perl_die_unwind(pTHX_ SV *msv) + * perls 5.13.{1..7} which had late setting of $@ without this + * early-setting hack. + */ +- if (!(in_eval & EVAL_KEEPERR)) ++ if (!(in_eval & EVAL_KEEPERR)) { ++ /* remove any read-only/magic from the SV, so we don't ++ get infinite recursion when setting ERRSV */ ++ SANE_ERRSV(); + sv_setsv_flags(ERRSV, exceptsv, + (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL)); ++ } + + if (in_eval & EVAL_KEEPERR) { + Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf, +@@ -1784,8 +1788,10 @@ Perl_die_unwind(pTHX_ SV *msv) + */ + S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2); + +- if (!(in_eval & EVAL_KEEPERR)) ++ if (!(in_eval & EVAL_KEEPERR)) { ++ SANE_ERRSV(); + sv_setsv(ERRSV, exceptsv); ++ } + PL_restartjmpenv = restartjmpenv; + PL_restartop = restartop; + JMPENV_JUMP(3); +diff --git a/t/lib/croak/pp_ctl b/t/lib/croak/pp_ctl +index b1e754c..de0221b 100644 +--- a/t/lib/croak/pp_ctl ++++ b/t/lib/croak/pp_ctl +@@ -51,3 +51,11 @@ use 5.01; + default{} + EXPECT + Can't "default" outside a topicalizer at - line 2. ++######## ++# NAME croak with read only $@ ++eval '"a" =~ /${*@=\_})/'; ++die; ++# this would previously recurse infinitely in the eval ++EXPECT ++Unmatched ) in regex; marked by <-- HERE in m/_) <-- HERE / at (eval 1) line 1. ++ ...propagated at - line 2. +-- +2.21.0 + diff --git a/SOURCES/perl-5.30.0-pp.c-Add-two-UNLIKELY-s.patch b/SOURCES/perl-5.30.0-pp.c-Add-two-UNLIKELY-s.patch new file mode 100644 index 0000000..4565e07 --- /dev/null +++ b/SOURCES/perl-5.30.0-pp.c-Add-two-UNLIKELY-s.patch @@ -0,0 +1,42 @@ +From 4f0ded009bf6de2da6a2a2022bec03576dcb80ca Mon Sep 17 00:00:00 2001 +From: Karl Williamson +Date: Wed, 1 May 2019 10:41:38 -0600 +Subject: [PATCH] pp.c: Add two UNLIKELY()s +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It should be uncommon to shift beyond a full word + +Signed-off-by: Ported to 5.30.0 from +bae047b68c92622bb4bb04499e36cdaa48138909. +Signed-off-by: Petr Písař +--- + pp.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/pp.c b/pp.c +index 90db3a0..7afb090 100644 +--- a/pp.c ++++ b/pp.c +@@ -1979,7 +1979,7 @@ static UV S_uv_shift(UV uv, int shift, bool left) + shift = -shift; + left = !left; + } +- if (shift >= IV_BITS) { ++ if (UNLIKELY(shift >= IV_BITS)) { + return 0; + } + return left ? uv << shift : uv >> shift; +@@ -1991,7 +1991,7 @@ static IV S_iv_shift(IV iv, int shift, bool left) + shift = -shift; + left = !left; + } +- if (shift >= IV_BITS) { ++ if (UNLIKELY(shift >= IV_BITS)) { + return iv < 0 && !left ? -1 : 0; + } + return left ? iv << shift : iv >> shift; +-- +2.20.1 + diff --git a/SOURCES/perl-5.30.1-handle-s-being-updated-without-len-being-updated.patch b/SOURCES/perl-5.30.1-handle-s-being-updated-without-len-being-updated.patch new file mode 100644 index 0000000..9f3e11d --- /dev/null +++ b/SOURCES/perl-5.30.1-handle-s-being-updated-without-len-being-updated.patch @@ -0,0 +1,47 @@ +From a0148bb8496444302b087bc0ffcf8dad42f8e475 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 11 Nov 2019 14:43:42 +1100 +Subject: [PATCH] handle s being updated without len being updated +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +fix #17279 + +Petr Písař: Ported to 5.30.1 from +e56dfd967ce460481a9922d14e931b438548093d. + +Signed-off-by: Petr Písař +--- + numeric.c | 2 +- + t/lib/croak/regcomp | 4 ++++ + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/numeric.c b/numeric.c +index d6ce53e..35adebe 100644 +--- a/numeric.c ++++ b/numeric.c +@@ -1552,7 +1552,7 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) + /* strtold() accepts 0x-prefixed hex and in POSIX implementations, + 0b-prefixed binary numbers, which is backward incompatible + */ +- if ((len == 0 || len >= 2) && *s == '0' && ++ if ((len == 0 || len - (s-orig) >= 2) && *s == '0' && + (isALPHA_FOLD_EQ(s[1], 'x') || isALPHA_FOLD_EQ(s[1], 'b'))) { + *value = 0; + return (char *)s+1; +diff --git a/t/lib/croak/regcomp b/t/lib/croak/regcomp +index 0ba705e..c0c2710 100644 +--- a/t/lib/croak/regcomp ++++ b/t/lib/croak/regcomp +@@ -70,3 +70,7 @@ qr/((a))/; + EXPECT + Too many nested open parens in regex; marked by <-- HERE in m/(( <-- HERE a))/ at - line 3. + ######## ++# NAME numeric parsing buffer overflow in numeric.c ++0=~/\p{nV:-0}/ ++EXPECT ++Can't find Unicode property definition "nV:-0" in regex; marked by <-- HERE in m/\p{nV:-0} <-- HERE / at - line 1. +-- +2.21.0 + diff --git a/SOURCES/perl-5.30.1-perl-125557-correctly-handle-overload-for-bin-oct-fl.patch b/SOURCES/perl-5.30.1-perl-125557-correctly-handle-overload-for-bin-oct-fl.patch new file mode 100644 index 0000000..6a91281 --- /dev/null +++ b/SOURCES/perl-5.30.1-perl-125557-correctly-handle-overload-for-bin-oct-fl.patch @@ -0,0 +1,116 @@ +From b061e315b4eac4d82edb3ca14581805417a68936 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Wed, 11 Sep 2019 11:50:23 +1000 +Subject: [PATCH] (perl #125557) correctly handle overload for bin/oct floats +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The hexfp code doesn't check that the shift is 4, and so also +accepts binary and octal fp numbers. + +Unfortunately the call to S_new_constant() always passed a prefix +of 0x, so overloading would be trying to parse the wrong number. + +Another option is to simply allow only hex floats, though some work +was done in 131894 to improve oct/bin float support. + +Petr Písař: Ported to 5.30.1 from +2cb5a7e8af11acb0eca22421ec5a4df7ef18e2a9. + +Signed-off-by: Petr Písař +--- + t/op/hexfp.t | 16 +++++++++++++++- + toke.c | 21 ++++++++++++++++----- + 2 files changed, 31 insertions(+), 6 deletions(-) + +diff --git a/t/op/hexfp.t b/t/op/hexfp.t +index 64f8136..0f239d4 100644 +--- a/t/op/hexfp.t ++++ b/t/op/hexfp.t +@@ -10,7 +10,7 @@ use strict; + + use Config; + +-plan(tests => 123); ++plan(tests => 125); + + # Test hexfloat literals. + +@@ -277,6 +277,20 @@ is(0b1p0, 1); + is(0b10p0, 2); + is(0b1.1p0, 1.5); + ++# previously these would pass "0x..." to the overload instead of the appropriate ++# "0b" or "0" prefix. ++fresh_perl_is(<<'CODE', "1", {}, "overload binary fp"); ++use overload; ++BEGIN { overload::constant float => sub { return eval $_[0]; }; } ++print 0b0.1p1; ++CODE ++ ++fresh_perl_is(<<'CODE', "1", {}, "overload octal fp"); ++use overload; ++BEGIN { overload::constant float => sub { return eval $_[0]; }; } ++print 00.1p3; ++CODE ++ + # sprintf %a/%A testing is done in sprintf2.t, + # trickier than necessary because of long doubles, + # and because looseness of the spec. +diff --git a/toke.c b/toke.c +index 03c4f2b..3fa20dc 100644 +--- a/toke.c ++++ b/toke.c +@@ -10966,6 +10966,7 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp) + const char *lastub = NULL; /* position of last underbar */ + static const char* const number_too_long = "Number too long"; + bool warned_about_underscore = 0; ++ I32 shift; /* shift per digit for hex/oct/bin, hoisted here for fp */ + #define WARN_ABOUT_UNDERSCORE() \ + do { \ + if (!warned_about_underscore) { \ +@@ -11012,8 +11013,6 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp) + { + /* variables: + u holds the "number so far" +- shift the power of 2 of the base +- (hex == 4, octal == 3, binary == 1) + overflowed was the number more than we can hold? + + Shift is used when we add a digit. It also serves as an "are +@@ -11022,7 +11021,6 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp) + */ + NV n = 0.0; + UV u = 0; +- I32 shift; + bool overflowed = FALSE; + bool just_zero = TRUE; /* just plain 0 or binary number? */ + static const NV nvshift[5] = { 1.0, 2.0, 4.0, 8.0, 16.0 }; +@@ -11369,8 +11367,21 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp) + if (hexfp) { + floatit = TRUE; + *d++ = '0'; +- *d++ = 'x'; +- s = start + 2; ++ switch (shift) { ++ case 4: ++ *d++ = 'x'; ++ s = start + 2; ++ break; ++ case 3: ++ s = start + 1; ++ break; ++ case 1: ++ *d++ = 'b'; ++ s = start + 2; ++ break; ++ default: ++ NOT_REACHED; /* NOTREACHED */ ++ } + } + + /* read next group of digits and _ and copy into d */ +-- +2.21.0 + diff --git a/SOURCES/perl-5.30.1-study_chunk-avoid-mutating-regexp-program-within-GOS.patch b/SOURCES/perl-5.30.1-study_chunk-avoid-mutating-regexp-program-within-GOS.patch new file mode 100644 index 0000000..70e5ed0 --- /dev/null +++ b/SOURCES/perl-5.30.1-study_chunk-avoid-mutating-regexp-program-within-GOS.patch @@ -0,0 +1,306 @@ +From 783ddef8fc74b00cde72898c2c3228853dc82d91 Mon Sep 17 00:00:00 2001 +From: Hugo van der Sanden +Date: Sat, 11 Apr 2020 14:10:24 +0100 +Subject: [PATCH] study_chunk: avoid mutating regexp program within GOSUB +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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) + +(cherry picked from commit c4033e740bd18d9fbe3456a9db2ec2053cdc5271) +Petr Písař: Ported to 5.30.1 from +66bbb51b93253a3f87d11c2695cfb7bdb782184a. +Signed-off-by: Petr Písař +--- + embed.fnc | 2 +- + embed.h | 2 +- + proto.h | 2 +- + regcomp.c | 54 +++++++++++++++++++++++++++++++++++------------------- + t/re/pat.t | 26 +++++++++++++++++++++++++- + 5 files changed, 63 insertions(+), 23 deletions(-) + +diff --git a/embed.fnc b/embed.fnc +index 1b9cf54..d0463e4 100644 +--- a/embed.fnc ++++ b/embed.fnc +@@ -2482,7 +2482,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 + Es |void |rck_elide_nothing|NN regnode *node + EsR |SV * |get_ANYOFM_contents|NN const regnode * n + EsRn |U32 |add_data |NN RExC_state_t* const pRExC_state \ +diff --git a/embed.h b/embed.h +index cf44011..72c2a8e 100644 +--- a/embed.h ++++ b/embed.h +@@ -1239,7 +1239,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 ee74153..9a3ce27 100644 +--- a/proto.h ++++ b/proto.h +@@ -5671,7 +5671,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 b101752..b9ea2a0 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -106,6 +106,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 */ + + struct scan_frame *this_prev_frame; /* this previous frame */ + struct scan_frame *prev_frame; /* previous frame */ +@@ -4475,7 +4476,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. */ +@@ -4554,6 +4555,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, is_inf); + DEBUG_PEEP("Peep", scan, depth, flags); +@@ -4564,7 +4569,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. +@@ -4596,7 +4602,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + /* DEFINEP study_chunk() recursion */ + (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 +@@ -4664,7 +4670,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + /* recurse study_chunk() for each BRANCH in an alternation */ + 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; +@@ -4731,9 +4738,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' +@@ -5188,6 +5196,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, is_inf); + DEBUG_PEEP("fnew", scan, depth, flags); +@@ -5345,7 +5356,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + + /* This temporary node can now be turned into EXACTFU, and + * must, as regexec.c doesn't handle it */ +- if (OP(next) == EXACTFU_S_EDGE) { ++ if (OP(next) == EXACTFU_S_EDGE && mutate_ok) { + OP(next) = EXACTFU; + } + +@@ -5353,8 +5364,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + && isALPHA_A(* STRING(next)) + && ( OP(next) == EXACTFAA + || ( OP(next) == EXACTFU +- && ! HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(* STRING(next))))) +- { ++ && ! HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(* STRING(next)))) ++ && mutate_ok ++ ) { + /* These differ in just one bit */ + U8 mask = ~ ('A' ^ 'a'); + +@@ -5441,7 +5453,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; +@@ -5507,7 +5519,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; +@@ -5557,10 +5571,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. */ +@@ -5613,7 +5627,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + /* recurse study_chunk() on optimised CURLYX => CURLYM */ + study_chunk(pRExC_state, &nxt1, minlenp, &deltanext, nxt, + NULL, stopparen, recursed_depth, NULL, 0, +- depth+1); ++ depth+1, mutate_ok); + } + else + oscan->flags = 0; +@@ -6018,7 +6032,8 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n", + /* recurse study_chunk() for lookahead body */ + 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 < 0 + || deltanext > (I32) U8_MAX +@@ -6123,7 +6138,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) { + assert(0); /* This code has never been tested since this + is normally not compiled */ +@@ -6291,7 +6306,8 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n", + /* optimise study_chunk() for TRIE */ + 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); +@@ -8084,7 +8100,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")); +@@ -8213,7 +8229,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 6a868f4..ba89a58 100644 +--- a/t/re/pat.t ++++ b/t/re/pat.t +@@ -25,7 +25,7 @@ BEGIN { + skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader; + skip_all_without_unicode_tables(); + +-plan tests => 864; # Update this when adding/deleting tests. ++plan tests => 868; # Update this when adding/deleting tests. + + run_tests() unless caller; + +@@ -2115,6 +2115,30 @@ x{0c!}\;\;îçÿ