1#!perl
2# A simple listing of core files that have specific maintainers,
3# or at least someone that can be called an "interested party".
4# Also, a "module" does not necessarily mean a CPAN module, it
5# might mean a file or files or a subdirectory.
6# Most (but not all) of the modules have dual lives in the core
7# and in CPAN.
8
9package Maintainers;
10
11use strict;
12use warnings;
13use utf8;
14use File::Glob qw(:case);
15
16# IGNORABLE: files which, if they appear in the root of a CPAN
17# distribution, need not appear in core (i.e. core-cpan-diff won't
18# complain if it can't find them)
19
20our @IGNORABLE = qw(
21    .cvsignore .dualLivedDiffConfig .gitignore .github .perlcriticrc .perltidyrc
22    .travis.yml ANNOUNCE Announce Artistic AUTHORS BENCHMARK BUGS Build.PL
23    CHANGELOG ChangeLog Changelog CHANGES Changes CONTRIBUTING CONTRIBUTING.md
24    CONTRIBUTING.mkdn COPYING Copying cpanfile CREDITS dist.ini GOALS HISTORY
25    INSTALL INSTALL.SKIP LICENCE LICENSE Makefile.PL MANIFEST MANIFEST.SKIP
26    META.json META.yml MYMETA.json MYMETA.yml NEW NEWS NOTES perlcritic.rc
27    ppport.h README README.md README.pod README.PATCHING SIGNATURE THANKS TODO
28    Todo VERSION WHATSNEW
29);
30
31# Each entry in the  %Modules hash roughly represents a distribution,
32# except when DISTRIBUTION is set, where it *exactly* represents a single
33# CPAN distribution.
34
35# The keys of %Modules are human descriptions of the distributions, and
36# may not exactly match a module or distribution name. Distributions
37# which have an obvious top-level module associated with them will usually
38# have a key named for that module, e.g. 'Archive::Extract' for
39# Archive-Extract-N.NN.tar.gz; the remaining keys are likely to be based
40# on the name of the distribution, e.g. 'Locale-Codes' for
41# Locale-Codes-N.NN.tar.gz'.
42
43# UPSTREAM indicates where patches should go.  This is generally now
44# inferred from the FILES: modules with files in dist/, ext/ and lib/
45# are understood to have UPSTREAM 'blead', meaning that the copy of the
46# module in the blead sources is to be considered canonical, while
47# modules with files in cpan/ are understood to have UPSTREAM 'cpan',
48# meaning that the module on CPAN is to be patched first.
49
50# MAINTAINER has previously been used to indicate who the current maintainer
51# of the module is, but this is no longer stated explicitly. It is now
52# understood to be either the Perl 5 Porters if UPSTREAM is 'blead', or else
53# the CPAN author whose PAUSE user ID forms the first part of the DISTRIBUTION
54# value, e.g. 'BINGOS' in the case of 'BINGOS/Archive-Tar-2.00.tar.gz'.
55# (PAUSE's View Permissions page may be consulted to find other authors who
56# have owner or co-maint permissions for the module in question.)
57
58# FILES is a list of filenames, glob patterns, and directory
59# names to be recursed down, which collectively generate a complete list
60# of the files associated with the distribution.
61
62# BUGS is an email or url to post bug reports.  For modules with
63# UPSTREAM => 'blead', use perl5-porters@perl.org.  rt.cpan.org
64# appears to automatically provide a URL for CPAN modules; any value
65# given here overrides the default:
66# http://rt.cpan.org/Public/Dist/Display.html?Name=$ModuleName
67
68# DISTRIBUTION names the tarball on CPAN which (allegedly) the files
69# included in core are derived from. Note that the file's version may not
70# necessarily match the newest version on CPAN.  (For dist/ distributions,
71# which are blead-first, a request should be placed with the releaser(s) to
72# upload the corresponding cpan release, and the entry in this file should
73# only be updated when that release has been done.)
74
75# MAIN_MODULE names the top-level module by which the tarball is indexed on
76# CPAN in cases where this differs from the distribution's key in %Modules.
77# (If it is equal then MAIN_MODULE is optional and should be omitted.)
78
79# EXCLUDED is a list of files to be excluded from a CPAN tarball before
80# comparing the remaining contents with core. Each item can either be a
81# full pathname (eg 't/foo.t') or a pattern (e.g. qr{^t/}).
82# It defaults to the empty list.
83
84# CUSTOMIZED is a list of files that have been customized within the
85# Perl core.  Use this whenever patching a cpan upstream distribution
86# or whenever we expect to have a file that differs from the tarball.
87# If the file in blead matches the file in the tarball from CPAN,
88# Porting/core-cpan-diff will warn about it, as it indicates an expected
89# customization might have been lost when updating from upstream.  The
90# path should be relative to the distribution directory.  If the upstream
91# distribution should be modified to incorporate the change then be sure
92# to raise a ticket for it on rt.cpan.org and add a comment alongside the
93# list of CUSTOMIZED files noting the ticket number.
94
95# DEPRECATED contains the *first* version of Perl in which the module
96# was considered deprecated.  It should only be present if the module is
97# actually deprecated.  Such modules should use deprecate.pm to
98# issue a warning if used.  E.g.:
99#
100#     use if $] >= 5.011, 'deprecate';
101#
102
103# MAP is a hash that maps CPAN paths to their core equivalents.
104# Each key represents a string prefix, with longest prefixes checked
105# first. The first match causes that prefix to be replaced with the
106# corresponding key. For example, with the following MAP:
107#   {
108#     'lib/'     => 'lib/',
109#     ''     => 'lib/Foo/',
110#   },
111#
112# these files are mapped as shown:
113#
114#    README     becomes lib/Foo/README
115#    lib/Foo.pm becomes lib/Foo.pm
116#
117# The default is dependent on the type of module.
118# For distributions which appear to be stored under ext/, it defaults to:
119#
120#   { '' => 'ext/Foo-Bar/' }
121#
122# otherwise, it's
123#
124#   {
125#     'lib/'     => 'lib/',
126#     ''     => 'lib/Foo/Bar/',
127#   }
128
129our %Modules = (
130
131    'Archive::Tar' => {
132        'DISTRIBUTION' => 'BINGOS/Archive-Tar-3.02_001.tar.gz',
133        'SYNCINFO'     => 'jkeenan on Tue Dec  5 07:32:24 2023',
134        'FILES'        => q[cpan/Archive-Tar],
135        'BUGS'         => 'bug-archive-tar@rt.cpan.org',
136        'EXCLUDED'     => [
137            qw(t/07_ptardiff.t),
138            qr{t/src/(long|short)/foo.txz},
139            qw(t/90_symlink.t),
140        ],
141    },
142
143    'Attribute::Handlers' => {
144        'DISTRIBUTION' => 'RJBS/Attribute-Handlers-0.99.tar.gz',
145        'FILES'        => q[dist/Attribute-Handlers],
146    },
147
148    'autodie' => {
149        'DISTRIBUTION' => 'TODDR/autodie-2.37.tar.gz',
150        'SYNCINFO'     => 'jkeenan on Sat Dec 30 15:24:00 2023',
151        'FILES'        => q[cpan/autodie],
152        'EXCLUDED'     => [
153            qr{benchmarks},
154            qr{README\.md},
155            qr{^xt/},
156            # All these tests depend upon external
157            # modules that don't exist when we're
158            # building the core.  Hence, they can
159            # never run, and should not be merged.
160            qw( t/author-critic.t
161                t/critic.t
162                t/fork.t
163                t/kwalitee.t
164                t/lex58.t
165                t/pod-coverage.t
166                t/pod.t
167                t/release-pod-coverage.t
168                t/release-pod-syntax.t
169                t/socket.t
170                t/system.t
171                t/no-all.t
172                )
173        ],
174    },
175
176    'AutoLoader' => {
177        'DISTRIBUTION' => 'SMUELLER/AutoLoader-5.74.tar.gz',
178        'FILES'        => q[cpan/AutoLoader],
179        'EXCLUDED'     => ['t/00pod.t'],
180        'CUSTOMIZED'   => ['t/02AutoSplit.t'],
181    },
182
183    'autouse' => {
184        'DISTRIBUTION' => 'RJBS/autouse-1.11.tar.gz',
185        'FILES'        => q[dist/autouse],
186        'EXCLUDED'     => [qr{^t/release-.*\.t}],
187    },
188
189    'base' => {
190        'DISTRIBUTION' => 'RJBS/base-2.23.tar.gz',
191        'FILES'        => q[dist/base],
192    },
193
194    'bignum' => {
195        'DISTRIBUTION' => 'PJACKLAM/bignum-0.67.tar.gz',
196        'SYNCINFO'     => 'jkeenan on Sat Dec 30 15:32:11 2023',
197        'FILES'        => q[cpan/bignum],
198        'EXCLUDED'     => [
199            qr{^xt/},
200            qr{^t/author-},
201            qr{^t/release-},
202            qw( t/00sig.t
203                t/01load.t
204                ),
205        ],
206    },
207
208    'Carp' => {
209        'DISTRIBUTION' => 'XSAWYERX/Carp-1.50.tar.gz',
210        'FILES'        => q[dist/Carp],
211    },
212
213    'Compress::Raw::Bzip2' => {
214        'DISTRIBUTION' => 'PMQS/Compress-Raw-Bzip2-2.212.tar.gz',
215        'SYNCINFO'     => 'LeoNerd on Sat Apr 27 14:06:26 2024',
216        'FILES'        => q[cpan/Compress-Raw-Bzip2],
217        'EXCLUDED'     => [
218            qr{^t/Test/},
219            qr{^t/meta},
220            'bzip2-src/bzip2-const.patch',
221            'bzip2-src/bzip2-cpp.patch',
222            'bzip2-src/bzip2-unsigned.patch',
223        ],
224    },
225
226    'Compress::Raw::Zlib' => {
227        'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.212.tar.gz',
228        'SYNCINFO'     => 'LeoNerd on Sat Apr 27 14:15:07 2024',
229        'FILES'    => q[cpan/Compress-Raw-Zlib],
230        'EXCLUDED' => [
231            qr{^examples/},
232            qr{^t/Test/},
233            qr{^t/meta},
234            qw( t/000prereq.t
235                t/99pod.t
236                ),
237        ],
238    },
239
240    'Config::Perl::V' => {
241        'DISTRIBUTION' => 'HMBRAND/Config-Perl-V-0.36.tgz',
242        'SYNCINFO'     => 'yorton on Sat Mar  4 10:43:06 2023',
243        'FILES'        => q[cpan/Config-Perl-V],
244        'EXCLUDED'     => [qw(
245		examples/show-v.pl
246		)],
247    },
248
249    'constant' => {
250        'DISTRIBUTION' => 'RJBS/constant-1.33.tar.gz',
251        'FILES'        => q[dist/constant],
252        'EXCLUDED'     => [
253            qw( t/00-load.t
254                t/more-tests.t
255                t/pod-coverage.t
256                t/pod.t
257                eg/synopsis.pl
258                ),
259        ],
260    },
261
262    'CPAN' => {
263        'DISTRIBUTION' => 'ANDK/CPAN-2.36.tar.gz',
264        'FILES'        => q[cpan/CPAN],
265        'EXCLUDED'     => [
266            qr{^distroprefs/},
267            qr{^inc/Test/},
268            qr{^t/CPAN/},
269            qr{^t/data/},
270            qr{^t/97-},
271            qw( lib/CPAN/Admin.pm
272                scripts/cpan-mirrors
273                PAUSE2015.pub
274                PAUSE2019.pub
275                PAUSE2021.pub
276                SlayMakefile
277                t/00signature.t
278                t/04clean_load.t
279                t/12cpan.t
280                t/13tarzip.t
281                t/14forkbomb.t
282                t/30shell.coverage
283                t/30shell.t
284                t/31sessions.t
285                t/41distribution.t
286                t/42distroprefs.t
287                t/43distroprefspref.t
288                t/44cpanmeta.t
289                t/50pod.t
290                t/51pod.t
291                t/52podcover.t
292                t/60credentials.t
293                t/70_critic.t
294                t/71_minimumversion.t
295                t/local_utils.pm
296                t/perlcriticrc
297                t/yaml_code.yml
298                ),
299        ],
300    },
301
302    # Note: When updating CPAN-Meta the META.* files will need to be regenerated
303    # perl -Icpan/CPAN-Meta/lib Porting/makemeta
304    'CPAN::Meta' => {
305        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.150010.tar.gz',
306        'FILES'        => q[cpan/CPAN-Meta],
307        'EXCLUDED'     => [
308            qw[t/00-report-prereqs.t
309               t/00-report-prereqs.dd
310              ],
311            qr{^xt},
312            qr{^history},
313        ],
314    },
315
316    'CPAN::Meta::Requirements' => {
317        'DISTRIBUTION' => 'RJBS/CPAN-Meta-Requirements-2.143.tar.gz',
318        'FILES'        => q[cpan/CPAN-Meta-Requirements],
319        'EXCLUDED'     => [
320            qw(t/00-report-prereqs.t),
321            qw(t/00-report-prereqs.dd),
322            qw(t/version-cleanup.t),
323            qr{^xt},
324        ],
325    },
326
327    'CPAN::Meta::YAML' => {
328        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-YAML-0.018.tar.gz',
329        'FILES'        => q[cpan/CPAN-Meta-YAML],
330        'EXCLUDED'     => [
331            't/00-report-prereqs.t',
332            't/00-report-prereqs.dd',
333            qr{^xt},
334        ],
335    },
336
337    'Data::Dumper' => {
338        'DISTRIBUTION' => 'NWCLARK/Data-Dumper-2.183.tar.gz',
339        'FILES'        => q[dist/Data-Dumper],
340    },
341
342    'DB_File' => {
343        'DISTRIBUTION' => 'PMQS/DB_File-1.859.tar.gz',
344        'SYNCINFO'     => 'jkeenan on Tue Sep  5 20:46:44 2023',
345        'FILES'        => q[cpan/DB_File],
346        'EXCLUDED'     => [
347            qr{^patches/},
348            qr{^t/meta},
349            qw( t/pod.t
350                t/000prereq.t
351                fallback.h
352                fallback.xs
353                ),
354        ],
355    },
356
357    'Devel::PPPort' => {
358        'DISTRIBUTION' => 'ATOOMIC/Devel-PPPort-3.68.tar.gz',
359        'FILES'        => q[dist/Devel-PPPort],
360        'EXCLUDED'     => [
361            'PPPort.pm',    # we use PPPort_pm.PL instead
362        ],
363    },
364
365    'Devel::SelfStubber' => {
366        'DISTRIBUTION' => 'FLORA/Devel-SelfStubber-1.05.tar.gz',
367        'FILES'        => q[dist/Devel-SelfStubber],
368        'EXCLUDED'     => [qr{^t/release-.*\.t}],
369    },
370
371    'Digest' => {
372        'DISTRIBUTION' => 'TODDR/Digest-1.20.tar.gz',
373        'FILES'        => q[cpan/Digest],
374        'EXCLUDED'     => ['digest-bench'],
375    },
376
377    'Digest::MD5' => {
378        'DISTRIBUTION' => 'TODDR/Digest-MD5-2.59.tar.gz',
379        'SYNCINFO'     => 'root on Sat Dec 30 21:42:47 2023',
380        'FILES'        => q[cpan/Digest-MD5],
381        'EXCLUDED'     => [ 'rfc1321.txt', 'bin/md5sum.pl' ],
382    },
383
384    'Digest::SHA' => {
385        'DISTRIBUTION' => 'MSHELOR/Digest-SHA-6.04.tar.gz',
386        'FILES'        => q[cpan/Digest-SHA],
387        'EXCLUDED'     => [
388            qw( t/pod.t
389                t/podcover.t
390                examples/dups
391                ),
392        ],
393    },
394
395    'Dumpvalue' => {
396        'DISTRIBUTION' => 'FLORA/Dumpvalue-1.17.tar.gz',
397        'FILES'        => q[dist/Dumpvalue],
398        'EXCLUDED'     => [qr{^t/release-.*\.t}],
399    },
400
401    'Encode' => {
402        'DISTRIBUTION' => 'DANKOGAI/Encode-3.21.tar.gz',
403        'SYNCINFO'     => 'jkeenan on Sun Feb 25 19:56:46 2024',
404        'SYNCINFO'     => 'jkeenan on Fri Nov 10 15:12:07 2023',
405        'FILES'        => q[cpan/Encode],
406        'EXCLUDED'     => [
407            qw( t/whatwg-aliases.json
408                t/whatwg-aliases.t
409                ),
410        ],
411    },
412
413    'encoding::warnings' => {
414        'DISTRIBUTION' => 'AUDREYT/encoding-warnings-0.11.tar.gz',
415        'FILES'        => q[dist/encoding-warnings],
416        'EXCLUDED'     => [
417            qr{^inc/Module/},
418            qw(t/0-signature.t),
419        ],
420    },
421
422    'Env' => {
423        'DISTRIBUTION' => 'FLORA/Env-1.04.tar.gz',
424        'FILES'        => q[dist/Env],
425        'EXCLUDED'     => [qr{^t/release-.*\.t}],
426    },
427
428    'experimental' => {
429        'DISTRIBUTION' => 'LEONT/experimental-0.032.tar.gz',
430        'SYNCINFO'     => 'LeoNerd on Sat Apr 27 09:43:20 2024',
431        'FILES'        => q[cpan/experimental],
432        'EXCLUDED'     => [qr{^xt/}],
433    },
434
435    'Exporter' => {
436        'DISTRIBUTION' => 'TODDR/Exporter-5.78.tar.gz',
437        'FILES'        => q[dist/Exporter],
438        'EXCLUDED' => [
439            qw( t/pod.t
440                t/use.t
441                ),
442        ],
443    },
444
445    'ExtUtils::CBuilder' => {
446        'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280236.tar.gz',
447        'FILES'        => q[dist/ExtUtils-CBuilder],
448        'EXCLUDED'     => [
449            qw(README.mkdn),
450            qr{^xt},
451        ],
452    },
453
454    'ExtUtils::Constant' => {
455
456        'DISTRIBUTION' => 'NWCLARK/ExtUtils-Constant-0.25.tar.gz',
457        'FILES'    => q[cpan/ExtUtils-Constant],
458        'CUSTOMIZED' => [
459             # https://rt.cpan.org/Ticket/Display.html?id=142181
460            'lib/ExtUtils/Constant/Base.pm',
461
462            # https://rt.cpan.org/Public/Bug/Display.html?id=132995
463            # https://rt.cpan.org/Ticket/Display.html?id=142183
464            't/Constant.t',
465        ],
466        'EXCLUDED' => [
467            qw( lib/ExtUtils/Constant/Aaargh56Hash.pm
468                examples/perl_keyword.pl
469                examples/perl_regcomp_posix_keyword.pl
470                ),
471        ],
472    },
473
474    'ExtUtils::Install' => {
475        'DISTRIBUTION' => 'BINGOS/ExtUtils-Install-2.22.tar.gz',
476        'FILES'        => q[cpan/ExtUtils-Install],
477        'EXCLUDED'     => [
478            qw( t/lib/Test/Builder.pm
479                t/lib/Test/Builder/Module.pm
480                t/lib/Test/More.pm
481                t/lib/Test/Simple.pm
482                t/pod-coverage.t
483                t/pod.t
484                ),
485        ],
486    },
487
488    'ExtUtils::MakeMaker' => {
489        'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.70.tar.gz',
490        'SYNCINFO'     => 'yorton on Sun Mar 26 16:20:23 2023',
491        'FILES'        => q[cpan/ExtUtils-MakeMaker],
492        'EXCLUDED'     => [
493            qr{^t/lib/Test/},
494            qr{^(bundled|my)/},
495            qr{^t/Liblist_Kid.t},
496            qr{^t/liblist/},
497            qr{^\.perlcriticrc},
498            'PATCHING',
499            'README.packaging',
500            'lib/ExtUtils/MakeMaker/version/vpp.pm',
501        ],
502    },
503
504    'ExtUtils::PL2Bat' => {
505        'DISTRIBUTION' => 'LEONT/ExtUtils-PL2Bat-0.005.tar.gz',
506        'FILES'        => q[cpan/ExtUtils-PL2Bat],
507        'EXCLUDED'     => [
508            't/00-compile.t',
509            'script/pl2bat.pl'
510        ],
511    },
512
513    'ExtUtils::Manifest' => {
514        'DISTRIBUTION' => 'ETHER/ExtUtils-Manifest-1.75.tar.gz',
515        'FILES'        => q[cpan/ExtUtils-Manifest],
516        'EXCLUDED'     => [
517            qr(^t/00-report-prereqs),
518            qr(^xt/)
519        ],
520    },
521
522    'ExtUtils::ParseXS' => {
523        'DISTRIBUTION' => 'LEONT/ExtUtils-ParseXS-3.51.tar.gz',
524        'FILES'        => q[dist/ExtUtils-ParseXS],
525    },
526
527    'File::Fetch' => {
528        'DISTRIBUTION' => 'BINGOS/File-Fetch-1.04.tar.gz',
529        'FILES'        => q[cpan/File-Fetch],
530    },
531
532    'File::Path' => {
533        'DISTRIBUTION' => 'JKEENAN/File-Path-2.18.tar.gz',
534        'FILES'        => q[cpan/File-Path],
535        'EXCLUDED'     => [
536            qw(t/Path-Class.t),
537            qr{^xt/},
538        ],
539    },
540
541    'File::Temp' => {
542        'DISTRIBUTION' => 'ETHER/File-Temp-0.2311.tar.gz',
543        'FILES'        => q[cpan/File-Temp],
544        'EXCLUDED'     => [
545            qw( README.mkdn
546                misc/benchmark.pl
547                misc/results.txt
548                ),
549            qr[^t/00-report-prereqs],
550            qr{^xt},
551        ],
552    },
553
554    'Filter::Simple' => {
555        'DISTRIBUTION' => 'SMUELLER/Filter-Simple-0.94.tar.gz',
556        'FILES'        => q[dist/Filter-Simple],
557        'EXCLUDED'     => [
558            qr{^demo/}
559        ],
560    },
561
562    'Filter::Util::Call' => {
563        'DISTRIBUTION' => 'RURBAN/Filter-1.64.tar.gz',
564        'FILES'        => q[cpan/Filter-Util-Call
565                 pod/perlfilter.pod
566                ],
567        'EXCLUDED' => [
568            qr{^decrypt/},
569            qr{^examples/},
570            qr{^Exec/},
571            qr{^lib/Filter/},
572            qr{^tee/},
573            qw( .appveyor.yml
574                .cirrus.yml
575                .github/workflows/testsuite.yml
576                .whitesource
577                Call/Makefile.PL
578                Call/ppport.h
579                Call/typemap
580                mytest
581                t/cpp.t
582                t/decrypt.t
583                t/exec.t
584                t/m4.t
585                t/order.t
586                t/sh.t
587                t/tee.t
588                t/z_kwalitee.t
589                t/z_manifest.t
590                t/z_meta.t
591                t/z_perl_minimum_version.t
592                t/z_pod-coverage.t
593                t/z_pod.t
594                ),
595        ],
596        'MAP' => {
597            'Call/'            => 'cpan/Filter-Util-Call/',
598            't/filter-util.pl' => 'cpan/Filter-Util-Call/filter-util.pl',
599            'perlfilter.pod'   => 'pod/perlfilter.pod',
600            ''                 => 'cpan/Filter-Util-Call/',
601        },
602        'CUSTOMIZED'   => [
603            qw(pod/perlfilter.pod)
604        ],
605    },
606
607    'FindBin' => {
608        'DISTRIBUTION' => 'TODDR/FindBin-1.54.tar.gz',
609        'FILES'        => q[dist/FindBin],
610    },
611
612    'Getopt::Long' => {
613        'DISTRIBUTION' => 'JV/Getopt-Long-2.57.tar.gz',
614        'SYNCINFO'     => 'jkeenan on Sat Nov 11 13:09:21 2023',
615        'FILES'        => q[cpan/Getopt-Long],
616        'EXCLUDED'     => [
617            qr{^examples/},
618            qw( lib/newgetopt.pl
619                t/gol-compat.t
620                ),
621        ],
622    },
623
624    'HTTP::Tiny' => {
625        'DISTRIBUTION' => 'DAGOLDEN/HTTP-Tiny-0.088.tar.gz',
626        'SYNCINFO'     => 'jkeenan on Sat Aug 12 14:49:17 2023',
627        'FILES'        => q[cpan/HTTP-Tiny],
628        'EXCLUDED'     => [
629            'corpus/snake-oil.crt', # only used by 210_live_ssl.t
630            't/00-report-prereqs.t',
631            't/00-report-prereqs.dd',
632            't/200_live.t',
633            't/200_live_local_ip.t',
634            't/210_live_ssl.t',
635            qr/^eg/,
636            qr/^xt/
637        ],
638    },
639
640    'I18N::Collate' => {
641        'DISTRIBUTION' => 'FLORA/I18N-Collate-1.02.tar.gz',
642        'FILES'        => q[dist/I18N-Collate],
643        'EXCLUDED'     => [qr{^t/release-.*\.t}],
644    },
645
646    'I18N::LangTags' => {
647        'FILES'        => q[dist/I18N-LangTags],
648    },
649
650    'if' => {
651        'DISTRIBUTION' => 'XSAWYERX/if-0.0608.tar.gz',
652        'FILES'        => q[dist/if],
653    },
654
655    'IO' => {
656        'DISTRIBUTION' => 'TODDR/IO-1.55.tar.gz',
657        'FILES'        => q[dist/IO],
658        'EXCLUDED'     => ['t/test.pl'],
659    },
660
661    'IO-Compress' => {
662        'DISTRIBUTION' => 'PMQS/IO-Compress-2.212.tar.gz',
663        'SYNCINFO'     => 'LeoNerd on Sat Apr 27 14:31:39 2024',
664        'MAIN_MODULE'  => 'IO::Compress::Base',
665        'FILES'        => q[cpan/IO-Compress],
666        'EXCLUDED'     => [
667            qr{^examples/},
668            qr{^t/Test/},
669            qr{^t/999meta-},
670            't/000prereq.t',
671            't/010examples-bzip2.t',
672            't/010examples-zlib.t',
673            't/cz-05examples.t',
674        ],
675    },
676
677    'IO::Socket::IP' => {
678        'DISTRIBUTION' => 'PEVANS/IO-Socket-IP-0.42.tar.gz',
679        'SYNCINFO'     => 'jkeenan on Wed Aug 16 21:34:20 2023',
680        'FILES'        => q[cpan/IO-Socket-IP],
681        'EXCLUDED'     => [
682            qr{^examples/},
683        ],
684    },
685
686    'IO::Zlib' => {
687        'DISTRIBUTION' => 'TOMHUGHES/IO-Zlib-1.15.tar.gz',
688        'SYNCINFO'     => 'jkeenan on Mon Mar  4 19:30:34 2024',
689        'FILES'        => q[cpan/IO-Zlib],
690    },
691
692    'IPC::Cmd' => {
693        'DISTRIBUTION' => 'BINGOS/IPC-Cmd-1.04.tar.gz',
694        'FILES'        => q[cpan/IPC-Cmd],
695    },
696
697    'IPC::SysV' => {
698        'DISTRIBUTION' => 'MHX/IPC-SysV-2.09.tar.gz',
699        'FILES'        => q[cpan/IPC-SysV],
700        'EXCLUDED'     => [
701            qw( const-c.inc
702                const-xs.inc
703                ),
704        ],
705    },
706
707    'JSON::PP' => {
708        'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.16.tar.gz',
709        'FILES'        => q[cpan/JSON-PP],
710    },
711
712    'lib' => {
713        'DISTRIBUTION' => 'SMUELLER/lib-0.63.tar.gz',
714        'FILES'        => q[dist/lib],
715        'EXCLUDED'     => [
716            qw( forPAUSE/lib.pm
717                t/00pod.t
718                ),
719        ],
720    },
721
722    'libnet' => {
723        'DISTRIBUTION' => 'SHAY/libnet-3.15.tar.gz',
724        'SYNCINFO'     => 'yorton on Mon Mar 20 20:48:38 2023',
725        'MAIN_MODULE'  => 'Net::Cmd',
726        'FILES'        => q[cpan/libnet],
727        'EXCLUDED'     => [
728            qw( Configure
729                t/changes.t
730                t/critic.t
731                t/pod.t
732                t/pod_coverage.t
733                ),
734            qr(^demos/),
735            qr(^t/external/),
736        ],
737    },
738
739    'Locale::Maketext' => {
740        'DISTRIBUTION' => 'TODDR/Locale-Maketext-1.33.tar.gz',
741        'FILES'        => q[dist/Locale-Maketext],
742        'EXCLUDED'     => [
743            qw(
744                perlcriticrc
745                t/00_load.t
746                t/pod.t
747                ),
748        ],
749    },
750
751    'Locale::Maketext::Simple' => {
752        'DISTRIBUTION' => 'JESSE/Locale-Maketext-Simple-0.21.tar.gz',
753        'FILES'        => q[cpan/Locale-Maketext-Simple],
754        'CUSTOMIZED'   => [
755            # CVE-2016-1238
756            qw( lib/Locale/Maketext/Simple.pm )
757        ],
758    },
759
760    'Math::BigInt' => {
761        'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-2.003002.tar.gz',
762        'SYNCINFO'     => 'corion on Thu Jan 11 20:23:12 2024',
763        'SYNCINFO'     => 'book on Tue Dec 26 22:44:58 2023',
764        'FILES'        => q[cpan/Math-BigInt],
765        'EXCLUDED'     => [
766            qr{^xt/},
767            qr{^examples/},
768            qw( t/00sig.t
769                t/01load.t
770                ),
771        ],
772    },
773
774    'Math::BigInt::FastCalc' => {
775        'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-FastCalc-0.5018.tar.gz',
776        'SYNCINFO'     => 'corion on Thu Jan 11 20:24:21 2024',
777        'SYNCINFO'     => 'jkeenan on Sat Dec 30 14:31:28 2023',
778        'SYNCINFO'     => 'jkeenan on Sun Sep 24 08:29:56 2023',
779        'FILES'        => q[cpan/Math-BigInt-FastCalc],
780        'EXCLUDED'     => [
781            qr{^inc/},
782            qr{^xt/},
783            qr{^t/Math/BigInt/Lib/TestUtil.pm},
784            qw( t/00sig.t
785                t/01load.t
786                ),
787
788            # instead we use the versions of these test
789            # files that come with Math::BigInt:
790            qw( t/bigfltpm.inc
791                t/bigfltpm.t
792                t/bigintpm.inc
793                t/bigintpm.t
794                t/mbimbf.inc
795                t/mbimbf.t
796                ),
797        ],
798    },
799
800    'Math::Complex' => {
801        'DISTRIBUTION' => 'ZEFRAM/Math-Complex-1.59.tar.gz',
802        'FILES'        => q[dist/Math-Complex],
803        'EXCLUDED'     => [
804            qw( t/pod.t
805                t/pod-coverage.t
806                ),
807        ],
808    },
809
810    'Memoize' => {
811        'DISTRIBUTION' => 'ARISTOTLE/Memoize-1.16.tar.gz',
812        'FILES'        => q[cpan/Memoize],
813        'EXCLUDED'     => [ qr{^inc/} ],
814    },
815
816    'MIME::Base64' => {
817        'DISTRIBUTION' => 'CAPOEIRAB/MIME-Base64-3.16.tar.gz',
818        'FILES'        => q[cpan/MIME-Base64],
819        'EXCLUDED'     => [ qr{^xt/}, 'benchmark', 'benchmark-qp', qr{^t/00-report-prereqs} ],
820        'CUSTOMIZED'   => [
821            # https://github.com/Dual-Life/mime-base64/pull/17
822            'Base64.xs',
823            'lib/MIME/Base64.pm',
824
825            'lib/MIME/QuotedPrint.pm'
826        ],
827    },
828
829    'Module::CoreList' => {
830        'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20240420.tar.gz',
831        'FILES'        => q[dist/Module-CoreList],
832    },
833
834    'Module::Load' => {
835        'DISTRIBUTION' => 'BINGOS/Module-Load-0.36.tar.gz',
836        'FILES'        => q[cpan/Module-Load],
837    },
838
839    'Module::Load::Conditional' => {
840        'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.74.tar.gz',
841        'FILES'        => q[cpan/Module-Load-Conditional],
842    },
843
844    'Module::Loaded' => {
845        'DISTRIBUTION' => 'BINGOS/Module-Loaded-0.08.tar.gz',
846        'FILES'        => q[cpan/Module-Loaded],
847    },
848
849    'Module::Metadata' => {
850        'DISTRIBUTION' => 'ETHER/Module-Metadata-1.000038.tar.gz',
851        'FILES'        => q[cpan/Module-Metadata],
852        'EXCLUDED'     => [
853            qw(t/00-report-prereqs.t),
854            qw(t/00-report-prereqs.dd),
855            qr{weaver.ini},
856            qr{^xt},
857        ],
858    },
859
860    'Net::Ping' => {
861        'DISTRIBUTION' => 'RURBAN/Net-Ping-2.75.tar.gz',
862        'FILES'        => q[dist/Net-Ping],
863        'EXCLUDED'     => [
864            qr{^\.[awc]},
865            qw(README.md.PL),
866            qw(t/020_external.t),
867            qw(t/600_pod.t),
868            qw(t/601_pod-coverage.t),
869            qw(t/602_kwalitee.t),
870            qw(t/603_meta.t),
871            qw(t/604_manifest.t),
872            qw(t/appveyor-test.bat),
873
874        ],
875    },
876
877    'NEXT' => {
878        'DISTRIBUTION' => 'NEILB/NEXT-0.69.tar.gz',
879        'FILES'        => q[cpan/NEXT],
880        'EXCLUDED'     => [qr{^demo/}],
881    },
882
883    'Params::Check' => {
884        'DISTRIBUTION' => 'BINGOS/Params-Check-0.38.tar.gz',
885        'FILES'        => q[cpan/Params-Check],
886    },
887
888    'parent' => {
889        'DISTRIBUTION' => 'CORION/parent-0.241.tar.gz',
890        'FILES'        => q[cpan/parent],
891        'EXCLUDED'     => [
892            qr{^xt}
893        ],
894    },
895
896    'PathTools' => {
897        'DISTRIBUTION' => 'XSAWYERX/PathTools-3.75.tar.gz',
898        'MAIN_MODULE'  => 'File::Spec',
899        'FILES'        => q[dist/PathTools],
900        'EXCLUDED'     => [
901            qr{^t/lib/Test/},
902            qw( t/rel2abs_vs_symlink.t),
903        ],
904    },
905
906    'Perl::OSType' => {
907        'DISTRIBUTION' => 'DAGOLDEN/Perl-OSType-1.010.tar.gz',
908        'FILES'        => q[cpan/Perl-OSType],
909        'EXCLUDED'     => [qw(tidyall.ini), qr/^xt/, qr{^t/00-}],
910    },
911
912    'perlfaq' => {
913        'DISTRIBUTION' => 'ETHER/perlfaq-5.20240218.tar.gz',
914        'FILES'        => q[cpan/perlfaq],
915        'EXCLUDED'     => [ qr/^inc/, qr/^xt/, qr{^t/00-} ],
916    },
917
918    'PerlIO::via::QuotedPrint' => {
919        'DISTRIBUTION' => 'SHAY/PerlIO-via-QuotedPrint-0.10.tar.gz',
920        'FILES'        => q[cpan/PerlIO-via-QuotedPrint],
921    },
922
923    'Pod::Checker' => {
924        'DISTRIBUTION' => 'MAREKR/Pod-Checker-1.77.tar.gz',
925        'SYNCINFO'     => 'jkeenan on Mon Feb  5 16:37:53 2024',
926        'SYNCINFO'     => 'corion on Tue Jan  9 20:34:18 2024',
927        'FILES'        => q[cpan/Pod-Checker],
928    },
929
930    'Pod::Escapes' => {
931        'DISTRIBUTION' => 'NEILB/Pod-Escapes-1.07.tar.gz',
932        'FILES'        => q[cpan/Pod-Escapes],
933    },
934
935    'Pod::Perldoc' => {
936        'DISTRIBUTION' => 'MALLEN/Pod-Perldoc-3.28.tar.gz',
937        'FILES'        => q[cpan/Pod-Perldoc],
938
939        # Note that we use the CPAN-provided Makefile.PL, since it
940        # contains special handling of the installation of perldoc.pod
941
942        'EXCLUDED' => [
943            # In blead, the perldoc executable is generated by perldoc.PL
944            # instead
945            # XXX We can and should fix this, but clean up the DRY-failure in
946            # utils first
947            'perldoc',
948
949            # files only used for manual testing
950            qr[^corpus/],
951
952            # https://rt.cpan.org/Ticket/Display.html?id=116827
953            't/02_module_pod_output.t'
954        ],
955
956        'CUSTOMIZED'   => [
957	    # [rt.cpan.org #88204], [rt.cpan.org #120229]
958	    'lib/Pod/Perldoc.pm',
959	],
960    },
961
962    'Pod::Simple' => {
963        'DISTRIBUTION' => 'KHW/Pod-Simple-3.45.tar.gz',
964        'SYNCINFO'     => 'jkeenan on Wed Aug  2 19:32:39 2023',
965        'FILES'        => q[cpan/Pod-Simple],
966        'EXCLUDED' => [
967            qw{.ChangeLog.swp},
968            qr{^\.github/}
969	],
970    },
971
972    'Pod::Usage' => {
973        'DISTRIBUTION' => 'MAREKR/Pod-Usage-2.03.tar.gz',
974        'FILES'        => q[cpan/Pod-Usage],
975        'EXCLUDED' => [
976            qr{^t/00-},
977            qr{^xt/}
978	],
979    },
980
981    'podlators' => {
982        'DISTRIBUTION' => 'RRA/podlators-5.01.tar.gz',
983        'MAIN_MODULE'  => 'Pod::Man',
984        'FILES'        => q[cpan/podlators pod/perlpodstyle.pod],
985        'EXCLUDED'     => [
986            qr{^\.github/dependabot\.yml},
987            qr{^\.github/workflows/build\.yaml},
988        ],
989        'CUSTOMIZED'   => [
990            # https://github.com/rra/podlators/pull/28
991            'lib/Pod/Man.pm',
992            'lib/Pod/ParseLink.pm',
993            'lib/Pod/Text.pm',
994            'lib/Pod/Text/Color.pm',
995            'lib/Pod/Text/Overstrike.pm',
996            'lib/Pod/Text/Termcap.pm'
997        ],
998        'MAP' => {
999            ''                 => 'cpan/podlators/',
1000            # this file lives outside the cpan/ directory
1001            'pod/perlpodstyle.pod' => 'pod/perlpodstyle.pod',
1002        },
1003    },
1004
1005    'Safe' => {
1006        'DISTRIBUTION' => 'RGARCIA/Safe-2.35.tar.gz',
1007        'FILES'        => q[dist/Safe],
1008    },
1009
1010    'Scalar::Util' => {
1011        'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.63.tar.gz',
1012        'FILES'        => q[cpan/Scalar-List-Utils],
1013        'CUSTOMIZED'   => [
1014            # https://github.com/Dual-Life/Scalar-List-Utils/pull/130
1015            't/uniqnum.t'
1016         ],
1017    },
1018
1019    'Search::Dict' => {
1020        'DISTRIBUTION' => 'DAGOLDEN/Search-Dict-1.07.tar.gz',
1021        'FILES'        => q[dist/Search-Dict],
1022    },
1023
1024    'SelfLoader' => {
1025        'DISTRIBUTION' => 'SMUELLER/SelfLoader-1.24.tar.gz',
1026        'FILES'        => q[dist/SelfLoader],
1027        'EXCLUDED'     => ['t/00pod.t'],
1028    },
1029
1030    'Socket' => {
1031        'DISTRIBUTION' => 'PEVANS/Socket-2.038.tar.gz',
1032        'SYNCINFO'     => 'LeoNerd on Sat Apr 27 09:57:02 2024',
1033        'FILES'        => q[cpan/Socket],
1034        'EXCLUDED'     => ['.editorconfig'],
1035    },
1036
1037    'Storable' => {
1038        'DISTRIBUTION' => 'NWCLARK/Storable-3.25.tar.gz',
1039        'FILES'        => q[dist/Storable],
1040        'EXCLUDED'     => [
1041            qr{^t/compat/},
1042        ],
1043    },
1044
1045    'Sys::Syslog' => {
1046        'DISTRIBUTION' => 'SAPER/Sys-Syslog-0.36.tar.gz',
1047        'FILES'        => q[cpan/Sys-Syslog],
1048        'EXCLUDED'     => [
1049            qr{^eg/},
1050            qw( README.win32
1051                t/data-validation.t
1052                t/distchk.t
1053                t/pod.t
1054                t/podcover.t
1055                t/podspell.t
1056                t/portfs.t
1057                win32/PerlLog.RES
1058                ),
1059        ],
1060    },
1061
1062    'Term::ANSIColor' => {
1063        'DISTRIBUTION' => 'RRA/Term-ANSIColor-5.01.tar.gz',
1064        'FILES'        => q[cpan/Term-ANSIColor],
1065        'EXCLUDED'     => [
1066            qr{^docs/},
1067            qr{^examples/},
1068            qr{^t/data/},
1069            qr{^t/docs/},
1070            qr{^t/style/},
1071            qw( t/module/aliases-env.t ),
1072        ],
1073    },
1074
1075    'Term::Cap' => {
1076        'DISTRIBUTION' => 'JSTOWE/Term-Cap-1.18.tar.gz',
1077        'FILES'        => q[cpan/Term-Cap],
1078    },
1079
1080    'Term::Complete' => {
1081        'DISTRIBUTION' => 'FLORA/Term-Complete-1.402.tar.gz',
1082        'FILES'        => q[dist/Term-Complete],
1083        'EXCLUDED'     => [qr{^t/release-.*\.t}],
1084    },
1085
1086    'Term::ReadLine' => {
1087        'DISTRIBUTION' => 'FLORA/Term-ReadLine-1.14.tar.gz',
1088        'FILES'        => q[dist/Term-ReadLine],
1089        'EXCLUDED'     => [qr{^t/release-.*\.t}],
1090    },
1091
1092    'Term::Table' => {
1093        'DISTRIBUTION' => 'EXODIST/Term-Table-0.018.tar.gz',
1094        'SYNCINFO'     => 'jkeenan on Wed Nov  1 19:16:24 2023',
1095        'FILES'        => q[cpan/Term-Table],
1096        'EXCLUDED'     => [
1097            qw( appveyor.yml ),
1098        ],
1099    },
1100
1101    'Test' => {
1102        'DISTRIBUTION' => 'JESSE/Test-1.26.tar.gz',
1103        'FILES'        => q[dist/Test],
1104    },
1105
1106    'Test::Harness' => {
1107        'DISTRIBUTION' => 'LEONT/Test-Harness-3.48.tar.gz',
1108        'SYNCINFO'     => 'gknop on Sat Oct 21 15:01:02 2023',
1109        'FILES'        => q[cpan/Test-Harness],
1110        'EXCLUDED'     => [
1111            qr{^examples/},
1112            qr{^xt/},
1113            qw( Changes-2.64
1114                MANIFEST.CUMMULATIVE
1115                HACKING.pod
1116                perlcriticrc
1117                t/000-load.t
1118                t/lib/if.pm
1119                ),
1120        ],
1121    },
1122
1123    'Test::Simple' => {
1124        'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302199.tar.gz',
1125        'SYNCINFO'     => 'LeoNerd on Sat Apr 27 10:20:58 2024',
1126        'SYNCINFO'     => 'jkeenan on Fri Dec  1 07:01:54 2023',
1127        'FILES'        => q[cpan/Test-Simple],
1128        'EXCLUDED'     => [
1129            qr{^examples/},
1130            qr{^xt/},
1131            qw( appveyor.yml
1132                t/00compile.t
1133                t/00-report.t
1134                t/zzz-check-breaks.t
1135                ),
1136        ],
1137    },
1138
1139    'Test2::Suite' => {
1140        'DISTRIBUTION' => 'EXODIST/Test2-Suite-0.000162.tar.gz',
1141        'SYNCINFO'     => 'LeoNerd on Sat Apr 27 10:12:36 2024',
1142        'SYNCINFO'     => 'jkeenan on Wed Nov  1 20:18:33 2023',
1143        'FILES'        => q[cpan/Test2-Suite],
1144        'EXCLUDED'     => [
1145            qw( appveyor.yml
1146                perltidyrc
1147                t/00-report.t ),
1148
1149            # https://github.com/Test-More/Test2-Suite/issues/208
1150            't/acceptance/Workflow-Acceptance.t',
1151        ],
1152    },
1153
1154    'Text::Abbrev' => {
1155        'DISTRIBUTION' => 'FLORA/Text-Abbrev-1.02.tar.gz',
1156        'FILES'        => q[dist/Text-Abbrev],
1157        'EXCLUDED'     => [qr{^t/release-.*\.t}],
1158    },
1159
1160    'Text::Balanced' => {
1161        'DISTRIBUTION' => 'SHAY/Text-Balanced-2.06.tar.gz',
1162        'FILES'        => q[cpan/Text-Balanced],
1163    },
1164
1165    'Text::ParseWords' => {
1166        'DISTRIBUTION' => 'NEILB/Text-ParseWords-3.31.tar.gz',
1167        'FILES'        => q[cpan/Text-ParseWords],
1168    },
1169
1170    'Text-Tabs+Wrap' => {
1171        'DISTRIBUTION' => 'ARISTOTLE/Text-Tabs+Wrap-2024.001.tar.gz',
1172        'SYNCINFO'     => 'jkeenan on Sun Feb 25 20:37:52 2024',
1173        'MAIN_MODULE'  => 'Text::Tabs',
1174        'FILES'        => q[cpan/Text-Tabs],
1175        'EXCLUDED'   => [
1176            qr{^xt},
1177
1178        ],
1179        'MAP'          => {
1180            ''                        => 'cpan/Text-Tabs/',
1181            'lib.modern/Text/Tabs.pm' => 'cpan/Text-Tabs/lib/Text/Tabs.pm',
1182            'lib.modern/Text/Wrap.pm' => 'cpan/Text-Tabs/lib/Text/Wrap.pm',
1183        },
1184    },
1185
1186    # Jerry Hedden does take patches that are applied to blead first, even
1187    # though that can be hard to discern from the Git history; so it's
1188    # correct for this (and Thread::Semaphore, threads, and threads::shared)
1189    # to be under dist/ rather than cpan/
1190    'Thread::Queue' => {
1191        'DISTRIBUTION' => 'JDHEDDEN/Thread-Queue-3.13.tar.gz',
1192        'FILES'        => q[dist/Thread-Queue],
1193        'EXCLUDED'     => [
1194            qr{^examples/},
1195            qw( t/00_load.t
1196                t/99_pod.t
1197                t/test.pl
1198                ),
1199        ],
1200    },
1201
1202    'Thread::Semaphore' => {
1203        'DISTRIBUTION' => 'JDHEDDEN/Thread-Semaphore-2.13.tar.gz',
1204        'FILES'        => q[dist/Thread-Semaphore],
1205        'EXCLUDED'     => [
1206            qw( examples/semaphore.pl
1207                t/00_load.t
1208                t/99_pod.t
1209                t/test.pl
1210                ),
1211        ],
1212    },
1213
1214    'threads' => {
1215        'DISTRIBUTION' => 'JDHEDDEN/threads-2.21.tar.gz',
1216        'FILES'        => q[dist/threads],
1217        'EXCLUDED'     => [
1218            qr{^examples/},
1219            qw( t/pod.t
1220                t/test.pl
1221                ),
1222        ],
1223    },
1224
1225    'threads::shared' => {
1226        'DISTRIBUTION' => 'JDHEDDEN/threads-shared-1.59.tar.gz',
1227        'FILES'        => q[dist/threads-shared],
1228        'EXCLUDED'     => [
1229            qw( examples/class.pl
1230                t/pod.t
1231                t/test.pl
1232                ),
1233        ],
1234    },
1235
1236    'Tie::File' => {
1237        'DISTRIBUTION' => 'TODDR/Tie-File-1.07.tar.gz',
1238        'FILES'        => q[dist/Tie-File],
1239    },
1240
1241    'Tie::RefHash' => {
1242        'DISTRIBUTION' => 'ETHER/Tie-RefHash-1.40.tar.gz',
1243        'FILES'        => q[cpan/Tie-RefHash],
1244        'EXCLUDED'     => [
1245            qr{^t/00-},
1246            qr{^xt/},
1247        ],
1248    },
1249
1250    'Time::HiRes' => {
1251        'DISTRIBUTION' => 'ATOOMIC/Time-HiRes-1.9764.tar.gz',
1252        'FILES'        => q[dist/Time-HiRes],
1253    },
1254
1255    'Time::Local' => {
1256        'DISTRIBUTION' => 'DROLSKY/Time-Local-1.35.tar.gz',
1257        'FILES'        => q[cpan/Time-Local],
1258        'EXCLUDED'     => [
1259            qr{^dev-bin/},
1260            qr{^git/},
1261            qr{^xt/},
1262            qw( CODE_OF_CONDUCT.md
1263                azure-pipelines.yml
1264                perlcriticrc
1265                perltidyrc
1266                precious.toml
1267                t/00-report-prereqs.t
1268                t/00-report-prereqs.dd
1269                ),
1270        ],
1271    },
1272
1273    'Time::Piece' => {
1274        'DISTRIBUTION' => 'ESAYM/Time-Piece-1.3401.tar.gz',
1275        'FILES'        => q[cpan/Time-Piece],
1276        'EXCLUDED'     => [ qw[reverse_deps.txt] ],
1277        'CUSTOMIZED'   => [
1278            # https://github.com/Dual-Life/Time-Piece/pull/64
1279            'Piece.pm',
1280            'Piece.xs'
1281         ],
1282    },
1283
1284    'Unicode::Collate' => {
1285        'DISTRIBUTION' => 'SADAHIRO/Unicode-Collate-1.31.tar.gz',
1286        'FILES'        => q[cpan/Unicode-Collate],
1287        'EXCLUDED'     => [
1288            qr{N$},
1289            qr{^data/},
1290            qr{^gendata/},
1291            qw( disableXS
1292                enableXS
1293                mklocale
1294                ),
1295        ],
1296    },
1297
1298    'Unicode::Normalize' => {
1299        'DISTRIBUTION' => 'KHW/Unicode-Normalize-1.26.tar.gz',
1300        'FILES'        => q[dist/Unicode-Normalize],
1301        'EXCLUDED'     => [
1302            qw( MANIFEST.N
1303                Normalize.pmN
1304                disableXS
1305                enableXS
1306                ),
1307        ],
1308    },
1309
1310    'version' => {
1311        'DISTRIBUTION' => 'LEONT/version-0.9930.tar.gz',
1312        'SYNCINFO'     => 'LeoNerd on Mon Sep 18 21:49:09 2023',
1313        'FILES'        => q[cpan/version vutil.c vutil.h vxs.inc],
1314        'EXCLUDED' => [
1315            qr{^vutil/lib/},
1316            'vutil/Makefile.PL',
1317            'vutil/ppport.h',
1318            'vutil/vxs.xs',
1319            't/00impl-pp.t',
1320            't/survey_locales',
1321            'vperl/vpp.pm',
1322        ],
1323
1324        # When adding the CPAN-distributed files for version.pm, it is necessary
1325        # to delete an entire block out of lib/version.pm, since that code is
1326        # only necessary with the CPAN release.
1327        'CUSTOMIZED'   => [
1328            'lib/version.pm',
1329         ],
1330
1331        'MAP' => {
1332            'vutil/'         => '',
1333            ''               => 'cpan/version/',
1334        },
1335    },
1336
1337    'warnings' => {
1338        'FILES'      => q[
1339                 lib/warnings
1340                 lib/warnings.{pm,t}
1341                 regen/warnings.pl
1342                 t/lib/warnings
1343        ],
1344    },
1345
1346    'Win32' => {
1347        'DISTRIBUTION' => 'JDB/Win32-0.59.tar.gz',
1348        'FILES'        => q[cpan/Win32],
1349    },
1350
1351    'Win32API::File' => {
1352        'DISTRIBUTION' => 'CHORNY/Win32API-File-0.1203.tar.gz',
1353        'FILES'        => q[cpan/Win32API-File],
1354        'EXCLUDED'     => [
1355            qr{^ex/},
1356        ],
1357        # https://rt.cpan.org/Ticket/Display.html?id=127837
1358        'CUSTOMIZED'   => [
1359            qw( File.pm
1360                File.xs
1361                ),
1362        ],
1363    },
1364
1365    'XSLoader' => {
1366        'DISTRIBUTION' => 'SAPER/XSLoader-0.24.tar.gz',
1367        'FILES'        => q[dist/XSLoader],
1368        'EXCLUDED'     => [
1369            qr{^eg/},
1370            qw( t/00-load.t
1371                t/01-api.t
1372                t/distchk.t
1373                t/pod.t
1374                t/podcover.t
1375                t/portfs.t
1376                ),
1377            'XSLoader.pm',    # we use XSLoader_pm.PL
1378        ],
1379    },
1380
1381    # this pseudo-module represents all the files under ext/ and lib/
1382    # that aren't otherwise claimed. This means that the following two
1383    # commands will check that every file under ext/ and lib/ is
1384    # accounted for, and that there are no duplicates:
1385    #
1386    #    perl Porting/Maintainers --checkmani lib ext
1387    #    perl Porting/Maintainers --checkmani
1388
1389    '_PERLLIB' => {
1390        'FILES'    => q[
1391                ext/Amiga-ARexx/
1392                ext/Amiga-Exec/
1393                ext/B/
1394                ext/Devel-Peek/
1395                ext/DynaLoader/
1396                ext/Errno/
1397                ext/ExtUtils-Miniperl/
1398                ext/Fcntl/
1399                ext/File-DosGlob/
1400                ext/File-Find/
1401                ext/File-Glob/
1402                ext/FileCache/
1403                ext/GDBM_File/
1404                ext/Hash-Util-FieldHash/
1405                ext/Hash-Util/
1406                ext/I18N-Langinfo/
1407                ext/IPC-Open3/
1408                ext/NDBM_File/
1409                ext/ODBM_File/
1410                ext/Opcode/
1411                ext/POSIX/
1412                ext/PerlIO-encoding/
1413                ext/PerlIO-mmap/
1414                ext/PerlIO-scalar/
1415                ext/PerlIO-via/
1416                ext/Pod-Functions/
1417                ext/Pod-Html/
1418                ext/SDBM_File/
1419                ext/Sys-Hostname/
1420                ext/Tie-Hash-NamedCapture/
1421                ext/Tie-Memoize/
1422                ext/VMS-DCLsym/
1423                ext/VMS-Filespec/
1424                ext/VMS-Stdio/
1425                ext/Win32CORE/
1426                ext/XS-APItest/
1427                ext/XS-Typemap/
1428                ext/attributes/
1429                ext/mro/
1430                ext/re/
1431                lib/AnyDBM_File.{pm,t}
1432                lib/Benchmark.{pm,t}
1433                lib/B/Deparse{.pm,.t,-*.t}
1434                lib/B/Op_private.pm
1435                lib/CORE.pod
1436                lib/Class/Struct.{pm,t}
1437                lib/Config.t
1438                lib/Config/Extensions.{pm,t}
1439                lib/DB.{pm,t}
1440                lib/DBM_Filter.pm
1441                lib/DBM_Filter/
1442                lib/DirHandle.{pm,t}
1443                lib/English.{pm,t}
1444                lib/ExtUtils/Embed.pm
1445                lib/ExtUtils/XSSymSet.pm
1446                lib/ExtUtils/t/Embed.t
1447                lib/ExtUtils/typemap
1448                lib/File/Basename.{pm,t}
1449                lib/File/Compare.{pm,t}
1450                lib/File/Copy.{pm,t}
1451                lib/File/stat{.pm,.t,-7896.t}
1452                lib/FileHandle.{pm,t}
1453                lib/Getopt/Std.{pm,t}
1454                lib/Internals.pod
1455                lib/Internals.t
1456                lib/meta_notation.{pm,t}
1457                lib/Net/hostent.{pm,t}
1458                lib/Net/netent.{pm,t}
1459                lib/Net/protoent.{pm,t}
1460                lib/Net/servent.{pm,t}
1461                lib/PerlIO.pm
1462                lib/Pod/t/Usage.t
1463                lib/SelectSaver.{pm,t}
1464                lib/Symbol.{pm,t}
1465                lib/Thread.{pm,t}
1466                lib/Tie/Array.pm
1467                lib/Tie/Array/
1468                lib/Tie/ExtraHash.t
1469                lib/Tie/Handle.pm
1470                lib/Tie/Handle/
1471                lib/Tie/Hash.{pm,t}
1472                lib/Tie/Scalar.{pm,t}
1473                lib/Tie/StdHandle.pm
1474                lib/Tie/SubstrHash.{pm,t}
1475                lib/Time/gmtime.{pm,t}
1476                lib/Time/localtime.{pm,t}
1477                lib/Time/tm.pm
1478                lib/UNIVERSAL.pm
1479                lib/Unicode/README
1480                lib/Unicode/testnorm.t
1481                lib/Unicode/UCD.{pm,t}
1482                lib/User/grent.{pm,t}
1483                lib/User/pwent.{pm,t}
1484                lib/_charnames.pm
1485                lib/blib.{pm,t}
1486                lib/builtin.{pm,t}
1487                lib/builtin-taint.t
1488                lib/bytes.{pm,t}
1489                lib/charnames.{pm,t}
1490                lib/dbm_filter_util.pl
1491                lib/deprecate.pm
1492                lib/diagnostics.{pm,t}
1493                lib/dumpvar.{pl,t}
1494                lib/feature.{pm,t}
1495                lib/feature/
1496                lib/filetest.{pm,t}
1497                lib/h2ph.t
1498                lib/h2xs.t
1499                lib/integer.{pm,t}
1500                lib/less.{pm,t}
1501                lib/locale.{pm,t}
1502                lib/locale_threads.t
1503                lib/open.{pm,t}
1504                lib/overload/numbers.pm
1505                lib/overloading.{pm,t}
1506                lib/overload{.pm,.t,64.t}
1507                lib/perl5db.{pl,t}
1508                lib/perl5db/
1509                lib/perlbug.t
1510                lib/sigtrap.{pm,t}
1511                lib/sort.{pm,t}
1512                lib/strict.{pm,t}
1513                lib/subs.{pm,t}
1514                lib/unicore/
1515                lib/utf8.{pm,t}
1516                lib/vars{.pm,.t,_carp.t}
1517                lib/vmsish.{pm,t}
1518                ],
1519    },
1520    'openbsd' => {
1521        'FILES'      => q[lib/Config_git.pl],
1522    },
1523);
1524
1525our %DistName;
1526# legacy CPAN flag
1527for my $mod_name ( keys %Modules ) {
1528    my $data = $Modules{$mod_name};
1529    $data->{CPAN} = !!$data->{DISTRIBUTION};
1530    my (@files)= split /\s+/, $data->{FILES};
1531    if (@files and $files[0]=~s!^(cpan|dist)/!!) {
1532        $DistName{$files[0]} = $mod_name;
1533        $DistName{"$1/$files[0]"} = $mod_name;
1534    }
1535}
1536
1537# legacy UPSTREAM flag
1538for ( keys %Modules ) {
1539    # Keep any existing UPSTREAM flag so that "overrides" can be applied
1540    next if exists $Modules{$_}{UPSTREAM};
1541
1542    if ($_ eq '_PERLLIB' or $Modules{$_}{FILES} =~ m{^\s*(?:dist|ext|lib)/}) {
1543        $Modules{$_}{UPSTREAM} = 'blead';
1544    }
1545    elsif ($Modules{$_}{FILES} =~ m{^\s*cpan/}) {
1546        $Modules{$_}{UPSTREAM} = 'cpan';
1547    }
1548    else {
1549        warn "Unexpected location of FILES for module $_: $Modules{$_}{FILES}";
1550    }
1551}
1552
1553our %Maintainers;
1554# legacy MAINTAINER field
1555for ( keys %Modules ) {
1556    # Keep any existing MAINTAINER flag so that "overrides" can be applied
1557    next if exists $Modules{$_}{MAINTAINER};
1558
1559    if ($Modules{$_}{UPSTREAM} eq 'blead') {
1560        $Modules{$_}{MAINTAINER} = 'P5P';
1561        $Maintainers{P5P} = 'perl5-porters <perl5-porters@perl.org>';
1562    }
1563    elsif (exists $Modules{$_}{DISTRIBUTION}) {
1564        (my $pause_id = $Modules{$_}{DISTRIBUTION}) =~ s{/.*$}{};
1565        $Modules{$_}{MAINTAINER} = $pause_id;
1566        $Maintainers{$pause_id} = "<$pause_id\@cpan.org>";
1567    }
1568    else {
1569        warn "No DISTRIBUTION for non-blead module $_";
1570    }
1571}
1572
15731;
1574