This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta
[perl5.git] / Porting / Maintainers.pl
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
9 package Maintainers;
10
11 use strict;
12 use warnings;
13 use utf8;
14 use 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
20 our @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
129 our %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.206.tar.gz',
215         'SYNCINFO'     => 'yorton on Tue Jul 25 20:45:42 2023',
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.206.tar.gz',
228         'SYNCINFO'     => 'yorton on Tue Jul 25 20:37:04 2023',
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         'CUSTOMIZED'   => [
383             # https://github.com/Dual-Life/digest-md5/pull/24
384             'MD5.pm',
385             'MD5.xs',
386
387             't/files.t'
388         ],
389     },
390
391     'Digest::SHA' => {
392         'DISTRIBUTION' => 'MSHELOR/Digest-SHA-6.04.tar.gz',
393         'FILES'        => q[cpan/Digest-SHA],
394         'EXCLUDED'     => [
395             qw( t/pod.t
396                 t/podcover.t
397                 examples/dups
398                 ),
399         ],
400     },
401
402     'Dumpvalue' => {
403         'DISTRIBUTION' => 'FLORA/Dumpvalue-1.17.tar.gz',
404         'FILES'        => q[dist/Dumpvalue],
405         'EXCLUDED'     => [qr{^t/release-.*\.t}],
406     },
407
408     'Encode' => {
409         'DISTRIBUTION' => 'DANKOGAI/Encode-3.20.tar.gz',
410         'SYNCINFO'     => 'jkeenan on Fri Nov 10 15:12:07 2023',
411         'FILES'        => q[cpan/Encode],
412         'EXCLUDED'     => [
413             qw( t/whatwg-aliases.json
414                 t/whatwg-aliases.t
415                 ),
416         ],
417     },
418
419     'encoding::warnings' => {
420         'DISTRIBUTION' => 'AUDREYT/encoding-warnings-0.11.tar.gz',
421         'FILES'        => q[dist/encoding-warnings],
422         'EXCLUDED'     => [
423             qr{^inc/Module/},
424             qw(t/0-signature.t),
425         ],
426     },
427
428     'Env' => {
429         'DISTRIBUTION' => 'FLORA/Env-1.04.tar.gz',
430         'FILES'        => q[dist/Env],
431         'EXCLUDED'     => [qr{^t/release-.*\.t}],
432     },
433
434     'experimental' => {
435         'DISTRIBUTION' => 'LEONT/experimental-0.031.tar.gz',
436         'FILES'        => q[cpan/experimental],
437         'EXCLUDED'     => [qr{^xt/}],
438     },
439
440     'Exporter' => {
441         'DISTRIBUTION' => 'TODDR/Exporter-5.78.tar.gz',
442         'FILES'        => q[dist/Exporter],
443         'EXCLUDED' => [
444             qw( t/pod.t
445                 t/use.t
446                 ),
447         ],
448     },
449
450     'ExtUtils::CBuilder' => {
451         'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280236.tar.gz',
452         'FILES'        => q[dist/ExtUtils-CBuilder],
453         'EXCLUDED'     => [
454             qw(README.mkdn),
455             qr{^xt},
456         ],
457     },
458
459     'ExtUtils::Constant' => {
460
461         'DISTRIBUTION' => 'NWCLARK/ExtUtils-Constant-0.25.tar.gz',
462         'FILES'    => q[cpan/ExtUtils-Constant],
463         'CUSTOMIZED' => [
464              # https://rt.cpan.org/Ticket/Display.html?id=142181
465             'lib/ExtUtils/Constant/Base.pm',
466
467             # https://rt.cpan.org/Public/Bug/Display.html?id=132995
468             # https://rt.cpan.org/Ticket/Display.html?id=142183
469             't/Constant.t',
470         ],
471         'EXCLUDED' => [
472             qw( lib/ExtUtils/Constant/Aaargh56Hash.pm
473                 examples/perl_keyword.pl
474                 examples/perl_regcomp_posix_keyword.pl
475                 ),
476         ],
477     },
478
479     'ExtUtils::Install' => {
480         'DISTRIBUTION' => 'BINGOS/ExtUtils-Install-2.22.tar.gz',
481         'FILES'        => q[cpan/ExtUtils-Install],
482         'EXCLUDED'     => [
483             qw( t/lib/Test/Builder.pm
484                 t/lib/Test/Builder/Module.pm
485                 t/lib/Test/More.pm
486                 t/lib/Test/Simple.pm
487                 t/pod-coverage.t
488                 t/pod.t
489                 ),
490         ],
491     },
492
493     'ExtUtils::MakeMaker' => {
494         'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.70.tar.gz',
495         'SYNCINFO'     => 'yorton on Sun Mar 26 16:20:23 2023',
496         'FILES'        => q[cpan/ExtUtils-MakeMaker],
497         'EXCLUDED'     => [
498             qr{^t/lib/Test/},
499             qr{^(bundled|my)/},
500             qr{^t/Liblist_Kid.t},
501             qr{^t/liblist/},
502             qr{^\.perlcriticrc},
503             'PATCHING',
504             'README.packaging',
505             'lib/ExtUtils/MakeMaker/version/vpp.pm',
506         ],
507     },
508
509     'ExtUtils::PL2Bat' => {
510         'DISTRIBUTION' => 'LEONT/ExtUtils-PL2Bat-0.005.tar.gz',
511         'FILES'        => q[cpan/ExtUtils-PL2Bat],
512         'EXCLUDED'     => [
513             't/00-compile.t',
514             'script/pl2bat.pl'
515         ],
516     },
517
518     'ExtUtils::Manifest' => {
519         'DISTRIBUTION' => 'ETHER/ExtUtils-Manifest-1.75.tar.gz',
520         'FILES'        => q[cpan/ExtUtils-Manifest],
521         'EXCLUDED'     => [
522             qr(^t/00-report-prereqs),
523             qr(^xt/)
524         ],
525     },
526
527     'ExtUtils::ParseXS' => {
528         'DISTRIBUTION' => 'LEONT/ExtUtils-ParseXS-3.51.tar.gz',
529         'FILES'        => q[dist/ExtUtils-ParseXS],
530     },
531
532     'File::Fetch' => {
533         'DISTRIBUTION' => 'BINGOS/File-Fetch-1.04.tar.gz',
534         'FILES'        => q[cpan/File-Fetch],
535     },
536
537     'File::Path' => {
538         'DISTRIBUTION' => 'JKEENAN/File-Path-2.18.tar.gz',
539         'FILES'        => q[cpan/File-Path],
540         'EXCLUDED'     => [
541             qw(t/Path-Class.t),
542             qr{^xt/},
543         ],
544     },
545
546     'File::Temp' => {
547         'DISTRIBUTION' => 'ETHER/File-Temp-0.2311.tar.gz',
548         'FILES'        => q[cpan/File-Temp],
549         'EXCLUDED'     => [
550             qw( README.mkdn
551                 misc/benchmark.pl
552                 misc/results.txt
553                 ),
554             qr[^t/00-report-prereqs],
555             qr{^xt},
556         ],
557     },
558
559     'Filter::Simple' => {
560         'DISTRIBUTION' => 'SMUELLER/Filter-Simple-0.94.tar.gz',
561         'FILES'        => q[dist/Filter-Simple],
562         'EXCLUDED'     => [
563             qr{^demo/}
564         ],
565     },
566
567     'Filter::Util::Call' => {
568         'DISTRIBUTION' => 'RURBAN/Filter-1.64.tar.gz',
569         'FILES'        => q[cpan/Filter-Util-Call
570                  pod/perlfilter.pod
571                 ],
572         'EXCLUDED' => [
573             qr{^decrypt/},
574             qr{^examples/},
575             qr{^Exec/},
576             qr{^lib/Filter/},
577             qr{^tee/},
578             qw( .appveyor.yml
579                 .cirrus.yml
580                 .github/workflows/testsuite.yml
581                 .whitesource
582                 Call/Makefile.PL
583                 Call/ppport.h
584                 Call/typemap
585                 mytest
586                 t/cpp.t
587                 t/decrypt.t
588                 t/exec.t
589                 t/m4.t
590                 t/order.t
591                 t/sh.t
592                 t/tee.t
593                 t/z_kwalitee.t
594                 t/z_manifest.t
595                 t/z_meta.t
596                 t/z_perl_minimum_version.t
597                 t/z_pod-coverage.t
598                 t/z_pod.t
599                 ),
600         ],
601         'MAP' => {
602             'Call/'            => 'cpan/Filter-Util-Call/',
603             't/filter-util.pl' => 'cpan/Filter-Util-Call/filter-util.pl',
604             'perlfilter.pod'   => 'pod/perlfilter.pod',
605             ''                 => 'cpan/Filter-Util-Call/',
606         },
607         'CUSTOMIZED'   => [
608             qw(pod/perlfilter.pod)
609         ],
610     },
611
612     'FindBin' => {
613         'DISTRIBUTION' => 'TODDR/FindBin-1.54.tar.gz',
614         'FILES'        => q[dist/FindBin],
615     },
616
617     'Getopt::Long' => {
618         'DISTRIBUTION' => 'JV/Getopt-Long-2.57.tar.gz',
619         'SYNCINFO'     => 'jkeenan on Sat Nov 11 13:09:21 2023',
620         'FILES'        => q[cpan/Getopt-Long],
621         'EXCLUDED'     => [
622             qr{^examples/},
623             qw( lib/newgetopt.pl
624                 t/gol-compat.t
625                 ),
626         ],
627     },
628
629     'HTTP::Tiny' => {
630         'DISTRIBUTION' => 'DAGOLDEN/HTTP-Tiny-0.088.tar.gz',
631         'SYNCINFO'     => 'jkeenan on Sat Aug 12 14:49:17 2023',
632         'FILES'        => q[cpan/HTTP-Tiny],
633         'EXCLUDED'     => [
634             'corpus/snake-oil.crt', # only used by 210_live_ssl.t
635             't/00-report-prereqs.t',
636             't/00-report-prereqs.dd',
637             't/200_live.t',
638             't/200_live_local_ip.t',
639             't/210_live_ssl.t',
640             qr/^eg/,
641             qr/^xt/
642         ],
643     },
644
645     'I18N::Collate' => {
646         'DISTRIBUTION' => 'FLORA/I18N-Collate-1.02.tar.gz',
647         'FILES'        => q[dist/I18N-Collate],
648         'EXCLUDED'     => [qr{^t/release-.*\.t}],
649     },
650
651     'I18N::LangTags' => {
652         'FILES'        => q[dist/I18N-LangTags],
653     },
654
655     'if' => {
656         'DISTRIBUTION' => 'XSAWYERX/if-0.0608.tar.gz',
657         'FILES'        => q[dist/if],
658     },
659
660     'IO' => {
661         'DISTRIBUTION' => 'TODDR/IO-1.55.tar.gz',
662         'FILES'        => q[dist/IO],
663         'EXCLUDED'     => ['t/test.pl'],
664     },
665
666     'IO-Compress' => {
667         'DISTRIBUTION' => 'PMQS/IO-Compress-2.206.tar.gz',
668         'SYNCINFO'     => 'yorton on Tue Jul 25 20:51:33 2023',
669         'MAIN_MODULE'  => 'IO::Compress::Base',
670         'FILES'        => q[cpan/IO-Compress],
671         'EXCLUDED'     => [
672             qr{^examples/},
673             qr{^t/Test/},
674             qr{^t/999meta-},
675             't/000prereq.t',
676             't/010examples-bzip2.t',
677             't/010examples-zlib.t',
678             't/cz-05examples.t',
679         ],
680     },
681
682     'IO::Socket::IP' => {
683         'DISTRIBUTION' => 'PEVANS/IO-Socket-IP-0.42.tar.gz',
684         'SYNCINFO'     => 'jkeenan on Wed Aug 16 21:34:20 2023',
685         'FILES'        => q[cpan/IO-Socket-IP],
686         'EXCLUDED'     => [
687             qr{^examples/},
688         ],
689     },
690
691     'IO::Zlib' => {
692         'DISTRIBUTION' => 'TOMHUGHES/IO-Zlib-1.14.tar.gz',
693         'FILES'        => q[cpan/IO-Zlib],
694     },
695
696     'IPC::Cmd' => {
697         'DISTRIBUTION' => 'BINGOS/IPC-Cmd-1.04.tar.gz',
698         'FILES'        => q[cpan/IPC-Cmd],
699     },
700
701     'IPC::SysV' => {
702         'DISTRIBUTION' => 'MHX/IPC-SysV-2.09.tar.gz',
703         'FILES'        => q[cpan/IPC-SysV],
704         'EXCLUDED'     => [
705             qw( const-c.inc
706                 const-xs.inc
707                 ),
708         ],
709     },
710
711     'JSON::PP' => {
712         'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.16.tar.gz',
713         'FILES'        => q[cpan/JSON-PP],
714     },
715
716     'lib' => {
717         'DISTRIBUTION' => 'SMUELLER/lib-0.63.tar.gz',
718         'FILES'        => q[dist/lib],
719         'EXCLUDED'     => [
720             qw( forPAUSE/lib.pm
721                 t/00pod.t
722                 ),
723         ],
724     },
725
726     'libnet' => {
727         'DISTRIBUTION' => 'SHAY/libnet-3.15.tar.gz',
728         'SYNCINFO'     => 'yorton on Mon Mar 20 20:48:38 2023',
729         'MAIN_MODULE'  => 'Net::Cmd',
730         'FILES'        => q[cpan/libnet],
731         'EXCLUDED'     => [
732             qw( Configure
733                 t/changes.t
734                 t/critic.t
735                 t/pod.t
736                 t/pod_coverage.t
737                 ),
738             qr(^demos/),
739             qr(^t/external/),
740         ],
741     },
742
743     'Locale::Maketext' => {
744         'DISTRIBUTION' => 'TODDR/Locale-Maketext-1.33.tar.gz',
745         'FILES'        => q[dist/Locale-Maketext],
746         'EXCLUDED'     => [
747             qw(
748                 perlcriticrc
749                 t/00_load.t
750                 t/pod.t
751                 ),
752         ],
753     },
754
755     'Locale::Maketext::Simple' => {
756         'DISTRIBUTION' => 'JESSE/Locale-Maketext-Simple-0.21.tar.gz',
757         'FILES'        => q[cpan/Locale-Maketext-Simple],
758         'CUSTOMIZED'   => [
759             # CVE-2016-1238
760             qw( lib/Locale/Maketext/Simple.pm )
761         ],
762     },
763
764     'Math::BigInt' => {
765         'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-2.003002.tar.gz',
766         'SYNCINFO'     => 'corion on Thu Jan 11 20:23:12 2024',
767         'SYNCINFO'     => 'book on Tue Dec 26 22:44:58 2023',
768         'FILES'        => q[cpan/Math-BigInt],
769         'EXCLUDED'     => [
770             qr{^xt/},
771             qr{^examples/},
772             qw( t/00sig.t
773                 t/01load.t
774                 ),
775         ],
776     },
777
778     'Math::BigInt::FastCalc' => {
779         'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-FastCalc-0.5018.tar.gz',
780         'SYNCINFO'     => 'corion on Thu Jan 11 20:24:21 2024',
781         'SYNCINFO'     => 'jkeenan on Sat Dec 30 14:31:28 2023',
782         'SYNCINFO'     => 'jkeenan on Sun Sep 24 08:29:56 2023',
783         'FILES'        => q[cpan/Math-BigInt-FastCalc],
784         'EXCLUDED'     => [
785             qr{^inc/},
786             qr{^xt/},
787             qr{^t/Math/BigInt/Lib/TestUtil.pm},
788             qw( t/00sig.t
789                 t/01load.t
790                 ),
791
792             # instead we use the versions of these test
793             # files that come with Math::BigInt:
794             qw( t/bigfltpm.inc
795                 t/bigfltpm.t
796                 t/bigintpm.inc
797                 t/bigintpm.t
798                 t/mbimbf.inc
799                 t/mbimbf.t
800                 ),
801         ],
802     },
803
804     'Math::Complex' => {
805         'DISTRIBUTION' => 'ZEFRAM/Math-Complex-1.59.tar.gz',
806         'FILES'        => q[dist/Math-Complex],
807         'EXCLUDED'     => [
808             qw( t/pod.t
809                 t/pod-coverage.t
810                 ),
811         ],
812     },
813
814     'Memoize' => {
815         'DISTRIBUTION' => 'ARISTOTLE/Memoize-1.16.tar.gz',
816         'FILES'        => q[cpan/Memoize],
817         'EXCLUDED'     => [ qr{^inc/} ],
818     },
819
820     'MIME::Base64' => {
821         'DISTRIBUTION' => 'CAPOEIRAB/MIME-Base64-3.16.tar.gz',
822         'FILES'        => q[cpan/MIME-Base64],
823         'EXCLUDED'     => [ qr{^xt/}, 'benchmark', 'benchmark-qp', qr{^t/00-report-prereqs} ],
824         'CUSTOMIZED'   => [
825             # https://github.com/Dual-Life/mime-base64/pull/17
826             'Base64.xs',
827             'lib/MIME/Base64.pm',
828
829             'lib/MIME/QuotedPrint.pm'
830         ],
831     },
832
833     'Module::CoreList' => {
834         'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20231230.tar.gz',
835         'FILES'        => q[dist/Module-CoreList],
836     },
837
838     'Module::Load' => {
839         'DISTRIBUTION' => 'BINGOS/Module-Load-0.36.tar.gz',
840         'FILES'        => q[cpan/Module-Load],
841     },
842
843     'Module::Load::Conditional' => {
844         'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.74.tar.gz',
845         'FILES'        => q[cpan/Module-Load-Conditional],
846     },
847
848     'Module::Loaded' => {
849         'DISTRIBUTION' => 'BINGOS/Module-Loaded-0.08.tar.gz',
850         'FILES'        => q[cpan/Module-Loaded],
851     },
852
853     'Module::Metadata' => {
854         'DISTRIBUTION' => 'ETHER/Module-Metadata-1.000038.tar.gz',
855         'FILES'        => q[cpan/Module-Metadata],
856         'EXCLUDED'     => [
857             qw(t/00-report-prereqs.t),
858             qw(t/00-report-prereqs.dd),
859             qr{weaver.ini},
860             qr{^xt},
861         ],
862     },
863
864     'Net::Ping' => {
865         'DISTRIBUTION' => 'RURBAN/Net-Ping-2.75.tar.gz',
866         'FILES'        => q[dist/Net-Ping],
867         'EXCLUDED'     => [
868             qr{^\.[awc]},
869             qw(README.md.PL),
870             qw(t/020_external.t),
871             qw(t/600_pod.t),
872             qw(t/601_pod-coverage.t),
873             qw(t/602_kwalitee.t),
874             qw(t/603_meta.t),
875             qw(t/604_manifest.t),
876             qw(t/appveyor-test.bat),
877
878         ],
879     },
880
881     'NEXT' => {
882         'DISTRIBUTION' => 'NEILB/NEXT-0.69.tar.gz',
883         'FILES'        => q[cpan/NEXT],
884         'EXCLUDED'     => [qr{^demo/}],
885     },
886
887     'Params::Check' => {
888         'DISTRIBUTION' => 'BINGOS/Params-Check-0.38.tar.gz',
889         'FILES'        => q[cpan/Params-Check],
890     },
891
892     'parent' => {
893         'DISTRIBUTION' => 'CORION/parent-0.241.tar.gz',
894         'FILES'        => q[cpan/parent],
895         'EXCLUDED'     => [
896             qr{^xt}
897         ],
898     },
899
900     'PathTools' => {
901         'DISTRIBUTION' => 'XSAWYERX/PathTools-3.75.tar.gz',
902         'MAIN_MODULE'  => 'File::Spec',
903         'FILES'        => q[dist/PathTools],
904         'EXCLUDED'     => [
905             qr{^t/lib/Test/},
906             qw( t/rel2abs_vs_symlink.t),
907         ],
908     },
909
910     'Perl::OSType' => {
911         'DISTRIBUTION' => 'DAGOLDEN/Perl-OSType-1.010.tar.gz',
912         'FILES'        => q[cpan/Perl-OSType],
913         'EXCLUDED'     => [qw(tidyall.ini), qr/^xt/, qr{^t/00-}],
914     },
915
916     'perlfaq' => {
917         'DISTRIBUTION' => 'ETHER/perlfaq-5.20230812.tar.gz',
918         'SYNCINFO'     => 'jkeenan on Wed Aug 16 18:13:51 2023',
919         'FILES'        => q[cpan/perlfaq],
920         'EXCLUDED'     => [ qr/^inc/, qr/^xt/, qr{^t/00-} ],
921     },
922
923     'PerlIO::via::QuotedPrint' => {
924         'DISTRIBUTION' => 'SHAY/PerlIO-via-QuotedPrint-0.10.tar.gz',
925         'FILES'        => q[cpan/PerlIO-via-QuotedPrint],
926     },
927
928     'Pod::Checker' => {
929         'DISTRIBUTION' => 'MAREKR/Pod-Checker-1.76.tar.gz',
930         'SYNCINFO'     => 'corion on Tue Jan  9 20:34:18 2024',
931         'FILES'        => q[cpan/Pod-Checker],
932     },
933
934     'Pod::Escapes' => {
935         'DISTRIBUTION' => 'NEILB/Pod-Escapes-1.07.tar.gz',
936         'FILES'        => q[cpan/Pod-Escapes],
937     },
938
939     'Pod::Perldoc' => {
940         'DISTRIBUTION' => 'MALLEN/Pod-Perldoc-3.28.tar.gz',
941         'FILES'        => q[cpan/Pod-Perldoc],
942
943         # Note that we use the CPAN-provided Makefile.PL, since it
944         # contains special handling of the installation of perldoc.pod
945
946         'EXCLUDED' => [
947             # In blead, the perldoc executable is generated by perldoc.PL
948             # instead
949             # XXX We can and should fix this, but clean up the DRY-failure in
950             # utils first
951             'perldoc',
952
953             # files only used for manual testing
954             qr[^corpus/],
955
956             # https://rt.cpan.org/Ticket/Display.html?id=116827
957             't/02_module_pod_output.t'
958         ],
959
960         'CUSTOMIZED'   => [
961             # [rt.cpan.org #88204], [rt.cpan.org #120229]
962             'lib/Pod/Perldoc.pm',
963         ],
964     },
965
966     'Pod::Simple' => {
967         'DISTRIBUTION' => 'KHW/Pod-Simple-3.45.tar.gz',
968         'SYNCINFO'     => 'jkeenan on Wed Aug  2 19:32:39 2023',
969         'FILES'        => q[cpan/Pod-Simple],
970         'EXCLUDED' => [
971             qw{.ChangeLog.swp},
972             qr{^\.github/}
973         ],
974     },
975
976     'Pod::Usage' => {
977         'DISTRIBUTION' => 'MAREKR/Pod-Usage-2.03.tar.gz',
978         'FILES'        => q[cpan/Pod-Usage],
979         'EXCLUDED' => [
980             qr{^t/00-},
981             qr{^xt/}
982         ],
983     },
984
985     'podlators' => {
986         'DISTRIBUTION' => 'RRA/podlators-5.01.tar.gz',
987         'MAIN_MODULE'  => 'Pod::Man',
988         'FILES'        => q[cpan/podlators pod/perlpodstyle.pod],
989         'EXCLUDED'     => [
990             qr{^\.github/dependabot\.yml},
991             qr{^\.github/workflows/build\.yaml},
992         ],
993
994         'MAP' => {
995             ''                 => 'cpan/podlators/',
996             # this file lives outside the cpan/ directory
997             'pod/perlpodstyle.pod' => 'pod/perlpodstyle.pod',
998         },
999     },
1000
1001     'Safe' => {
1002         'DISTRIBUTION' => 'RGARCIA/Safe-2.35.tar.gz',
1003         'FILES'        => q[dist/Safe],
1004     },
1005
1006     'Scalar::Util' => {
1007         'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.63.tar.gz',
1008         'FILES'        => q[cpan/Scalar-List-Utils],
1009     },
1010
1011     'Search::Dict' => {
1012         'DISTRIBUTION' => 'DAGOLDEN/Search-Dict-1.07.tar.gz',
1013         'FILES'        => q[dist/Search-Dict],
1014     },
1015
1016     'SelfLoader' => {
1017         'DISTRIBUTION' => 'SMUELLER/SelfLoader-1.24.tar.gz',
1018         'FILES'        => q[dist/SelfLoader],
1019         'EXCLUDED'     => ['t/00pod.t'],
1020     },
1021
1022     'Socket' => {
1023         'DISTRIBUTION' => 'PEVANS/Socket-2.037.tar.gz',
1024         'FILES'        => q[cpan/Socket],
1025         'EXCLUDED'     => ['.editorconfig'],
1026     },
1027
1028     'Storable' => {
1029         'DISTRIBUTION' => 'NWCLARK/Storable-3.25.tar.gz',
1030         'FILES'        => q[dist/Storable],
1031         'EXCLUDED'     => [
1032             qr{^t/compat/},
1033         ],
1034     },
1035
1036     'Sys::Syslog' => {
1037         'DISTRIBUTION' => 'SAPER/Sys-Syslog-0.36.tar.gz',
1038         'FILES'        => q[cpan/Sys-Syslog],
1039         'EXCLUDED'     => [
1040             qr{^eg/},
1041             qw( README.win32
1042                 t/data-validation.t
1043                 t/distchk.t
1044                 t/pod.t
1045                 t/podcover.t
1046                 t/podspell.t
1047                 t/portfs.t
1048                 win32/PerlLog.RES
1049                 ),
1050         ],
1051     },
1052
1053     'Term::ANSIColor' => {
1054         'DISTRIBUTION' => 'RRA/Term-ANSIColor-5.01.tar.gz',
1055         'FILES'        => q[cpan/Term-ANSIColor],
1056         'EXCLUDED'     => [
1057             qr{^docs/},
1058             qr{^examples/},
1059             qr{^t/data/},
1060             qr{^t/docs/},
1061             qr{^t/style/},
1062             qw( t/module/aliases-env.t ),
1063         ],
1064     },
1065
1066     'Term::Cap' => {
1067         'DISTRIBUTION' => 'JSTOWE/Term-Cap-1.18.tar.gz',
1068         'FILES'        => q[cpan/Term-Cap],
1069     },
1070
1071     'Term::Complete' => {
1072         'DISTRIBUTION' => 'FLORA/Term-Complete-1.402.tar.gz',
1073         'FILES'        => q[dist/Term-Complete],
1074         'EXCLUDED'     => [qr{^t/release-.*\.t}],
1075     },
1076
1077     'Term::ReadLine' => {
1078         'DISTRIBUTION' => 'FLORA/Term-ReadLine-1.14.tar.gz',
1079         'FILES'        => q[dist/Term-ReadLine],
1080         'EXCLUDED'     => [qr{^t/release-.*\.t}],
1081     },
1082
1083     'Term::Table' => {
1084         'DISTRIBUTION' => 'EXODIST/Term-Table-0.018.tar.gz',
1085         'SYNCINFO'     => 'jkeenan on Wed Nov  1 19:16:24 2023',
1086         'FILES'        => q[cpan/Term-Table],
1087         'EXCLUDED'     => [
1088             qw( appveyor.yml ),
1089         ],
1090     },
1091
1092     'Test' => {
1093         'DISTRIBUTION' => 'JESSE/Test-1.26.tar.gz',
1094         'FILES'        => q[dist/Test],
1095     },
1096
1097     'Test::Harness' => {
1098         'DISTRIBUTION' => 'LEONT/Test-Harness-3.48.tar.gz',
1099         'SYNCINFO'     => 'gknop on Sat Oct 21 15:01:02 2023',
1100         'FILES'        => q[cpan/Test-Harness],
1101         'EXCLUDED'     => [
1102             qr{^examples/},
1103             qr{^xt/},
1104             qw( Changes-2.64
1105                 MANIFEST.CUMMULATIVE
1106                 HACKING.pod
1107                 perlcriticrc
1108                 t/000-load.t
1109                 t/lib/if.pm
1110                 ),
1111         ],
1112     },
1113
1114     'Test::Simple' => {
1115         'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302198.tar.gz',
1116         'SYNCINFO'     => 'jkeenan on Fri Dec  1 07:01:54 2023',
1117         'FILES'        => q[cpan/Test-Simple],
1118         'EXCLUDED'     => [
1119             qr{^examples/},
1120             qr{^xt/},
1121             qw( appveyor.yml
1122                 t/00compile.t
1123                 t/00-report.t
1124                 t/zzz-check-breaks.t
1125                 ),
1126         ],
1127     },
1128
1129     'Test2::Suite' => {
1130         'DISTRIBUTION' => 'EXODIST/Test2-Suite-0.000159.tar.gz',
1131         'SYNCINFO'     => 'jkeenan on Wed Nov  1 20:18:33 2023',
1132         'FILES'        => q[cpan/Test2-Suite],
1133         'EXCLUDED'     => [
1134             qw( appveyor.yml
1135                 perltidyrc
1136                 t/00-report.t ),
1137
1138             # https://github.com/Test-More/Test2-Suite/issues/208
1139             't/acceptance/Workflow-Acceptance.t',
1140         ],
1141     },
1142
1143     'Text::Abbrev' => {
1144         'DISTRIBUTION' => 'FLORA/Text-Abbrev-1.02.tar.gz',
1145         'FILES'        => q[dist/Text-Abbrev],
1146         'EXCLUDED'     => [qr{^t/release-.*\.t}],
1147     },
1148
1149     'Text::Balanced' => {
1150         'DISTRIBUTION' => 'SHAY/Text-Balanced-2.06.tar.gz',
1151         'FILES'        => q[cpan/Text-Balanced],
1152     },
1153
1154     'Text::ParseWords' => {
1155         'DISTRIBUTION' => 'NEILB/Text-ParseWords-3.31.tar.gz',
1156         'FILES'        => q[cpan/Text-ParseWords],
1157     },
1158
1159     'Text-Tabs+Wrap' => {
1160         'DISTRIBUTION' => 'ARISTOTLE/Text-Tabs+Wrap-2023.0511.tar.gz',
1161         'MAIN_MODULE'  => 'Text::Tabs',
1162         'FILES'        => q[cpan/Text-Tabs],
1163         'EXCLUDED'   => [
1164             qr{^xt},
1165
1166         ],
1167         'MAP'          => {
1168             ''                        => 'cpan/Text-Tabs/',
1169             'lib.modern/Text/Tabs.pm' => 'cpan/Text-Tabs/lib/Text/Tabs.pm',
1170             'lib.modern/Text/Wrap.pm' => 'cpan/Text-Tabs/lib/Text/Wrap.pm',
1171         },
1172     },
1173
1174     # Jerry Hedden does take patches that are applied to blead first, even
1175     # though that can be hard to discern from the Git history; so it's
1176     # correct for this (and Thread::Semaphore, threads, and threads::shared)
1177     # to be under dist/ rather than cpan/
1178     'Thread::Queue' => {
1179         'DISTRIBUTION' => 'JDHEDDEN/Thread-Queue-3.13.tar.gz',
1180         'FILES'        => q[dist/Thread-Queue],
1181         'EXCLUDED'     => [
1182             qr{^examples/},
1183             qw( t/00_load.t
1184                 t/99_pod.t
1185                 t/test.pl
1186                 ),
1187         ],
1188     },
1189
1190     'Thread::Semaphore' => {
1191         'DISTRIBUTION' => 'JDHEDDEN/Thread-Semaphore-2.13.tar.gz',
1192         'FILES'        => q[dist/Thread-Semaphore],
1193         'EXCLUDED'     => [
1194             qw( examples/semaphore.pl
1195                 t/00_load.t
1196                 t/99_pod.t
1197                 t/test.pl
1198                 ),
1199         ],
1200     },
1201
1202     'threads' => {
1203         'DISTRIBUTION' => 'JDHEDDEN/threads-2.21.tar.gz',
1204         'FILES'        => q[dist/threads],
1205         'EXCLUDED'     => [
1206             qr{^examples/},
1207             qw( t/pod.t
1208                 t/test.pl
1209                 ),
1210         ],
1211     },
1212
1213     'threads::shared' => {
1214         'DISTRIBUTION' => 'JDHEDDEN/threads-shared-1.59.tar.gz',
1215         'FILES'        => q[dist/threads-shared],
1216         'EXCLUDED'     => [
1217             qw( examples/class.pl
1218                 t/pod.t
1219                 t/test.pl
1220                 ),
1221         ],
1222     },
1223
1224     'Tie::File' => {
1225         'DISTRIBUTION' => 'TODDR/Tie-File-1.07.tar.gz',
1226         'FILES'        => q[dist/Tie-File],
1227     },
1228
1229     'Tie::RefHash' => {
1230         'DISTRIBUTION' => 'ETHER/Tie-RefHash-1.40.tar.gz',
1231         'FILES'        => q[cpan/Tie-RefHash],
1232         'EXCLUDED'     => [
1233             qr{^t/00-},
1234             qr{^xt/},
1235         ],
1236     },
1237
1238     'Time::HiRes' => {
1239         'DISTRIBUTION' => 'ATOOMIC/Time-HiRes-1.9764.tar.gz',
1240         'FILES'        => q[dist/Time-HiRes],
1241     },
1242
1243     'Time::Local' => {
1244         'DISTRIBUTION' => 'DROLSKY/Time-Local-1.35.tar.gz',
1245         'FILES'        => q[cpan/Time-Local],
1246         'EXCLUDED'     => [
1247             qr{^dev-bin/},
1248             qr{^git/},
1249             qr{^xt/},
1250             qw( CODE_OF_CONDUCT.md
1251                 azure-pipelines.yml
1252                 perlcriticrc
1253                 perltidyrc
1254                 precious.toml
1255                 t/00-report-prereqs.t
1256                 t/00-report-prereqs.dd
1257                 ),
1258         ],
1259     },
1260
1261     'Time::Piece' => {
1262         'DISTRIBUTION' => 'ESAYM/Time-Piece-1.3401.tar.gz',
1263         'FILES'        => q[cpan/Time-Piece],
1264         'EXCLUDED'     => [ qw[reverse_deps.txt] ],
1265         'CUSTOMIZED'   => [
1266             # https://github.com/Dual-Life/Time-Piece/pull/64
1267             'Piece.pm',
1268             'Piece.xs'
1269          ],
1270     },
1271
1272     'Unicode::Collate' => {
1273         'DISTRIBUTION' => 'SADAHIRO/Unicode-Collate-1.31.tar.gz',
1274         'FILES'        => q[cpan/Unicode-Collate],
1275         'EXCLUDED'     => [
1276             qr{N$},
1277             qr{^data/},
1278             qr{^gendata/},
1279             qw( disableXS
1280                 enableXS
1281                 mklocale
1282                 ),
1283         ],
1284     },
1285
1286     'Unicode::Normalize' => {
1287         'DISTRIBUTION' => 'KHW/Unicode-Normalize-1.26.tar.gz',
1288         'FILES'        => q[dist/Unicode-Normalize],
1289         'EXCLUDED'     => [
1290             qw( MANIFEST.N
1291                 Normalize.pmN
1292                 disableXS
1293                 enableXS
1294                 ),
1295         ],
1296     },
1297
1298     'version' => {
1299         'DISTRIBUTION' => 'LEONT/version-0.9930.tar.gz',
1300         'SYNCINFO'     => 'LeoNerd on Mon Sep 18 21:49:09 2023',
1301         'FILES'        => q[cpan/version vutil.c vutil.h vxs.inc],
1302         'EXCLUDED' => [
1303             qr{^vutil/lib/},
1304             'vutil/Makefile.PL',
1305             'vutil/ppport.h',
1306             'vutil/vxs.xs',
1307             't/00impl-pp.t',
1308             't/survey_locales',
1309             'vperl/vpp.pm',
1310         ],
1311
1312         # When adding the CPAN-distributed files for version.pm, it is necessary
1313         # to delete an entire block out of lib/version.pm, since that code is
1314         # only necessary with the CPAN release.
1315         'CUSTOMIZED'   => [
1316             'lib/version.pm',
1317
1318             't/07locale.t'
1319          ],
1320
1321         'MAP' => {
1322             'vutil/'         => '',
1323             ''               => 'cpan/version/',
1324         },
1325     },
1326
1327     'warnings' => {
1328         'FILES'      => q[
1329                  lib/warnings
1330                  lib/warnings.{pm,t}
1331                  regen/warnings.pl
1332                  t/lib/warnings
1333         ],
1334     },
1335
1336     'Win32' => {
1337         'DISTRIBUTION' => "JDB/Win32-0.59.tar.gz",
1338         'FILES'        => q[cpan/Win32],
1339     },
1340
1341     'Win32API::File' => {
1342         'DISTRIBUTION' => 'CHORNY/Win32API-File-0.1203.tar.gz',
1343         'FILES'        => q[cpan/Win32API-File],
1344         'EXCLUDED'     => [
1345             qr{^ex/},
1346         ],
1347         # https://rt.cpan.org/Ticket/Display.html?id=127837
1348         'CUSTOMIZED'   => [
1349             qw( File.pm
1350                 File.xs
1351                 ),
1352         ],
1353     },
1354
1355     'XSLoader' => {
1356         'DISTRIBUTION' => 'SAPER/XSLoader-0.24.tar.gz',
1357         'FILES'        => q[dist/XSLoader],
1358         'EXCLUDED'     => [
1359             qr{^eg/},
1360             qw( t/00-load.t
1361                 t/01-api.t
1362                 t/distchk.t
1363                 t/pod.t
1364                 t/podcover.t
1365                 t/portfs.t
1366                 ),
1367             'XSLoader.pm',    # we use XSLoader_pm.PL
1368         ],
1369     },
1370
1371     # this pseudo-module represents all the files under ext/ and lib/
1372     # that aren't otherwise claimed. This means that the following two
1373     # commands will check that every file under ext/ and lib/ is
1374     # accounted for, and that there are no duplicates:
1375     #
1376     #    perl Porting/Maintainers --checkmani lib ext
1377     #    perl Porting/Maintainers --checkmani
1378
1379     '_PERLLIB' => {
1380         'FILES'    => q[
1381                 ext/Amiga-ARexx/
1382                 ext/Amiga-Exec/
1383                 ext/B/
1384                 ext/Devel-Peek/
1385                 ext/DynaLoader/
1386                 ext/Errno/
1387                 ext/ExtUtils-Miniperl/
1388                 ext/Fcntl/
1389                 ext/File-DosGlob/
1390                 ext/File-Find/
1391                 ext/File-Glob/
1392                 ext/FileCache/
1393                 ext/GDBM_File/
1394                 ext/Hash-Util-FieldHash/
1395                 ext/Hash-Util/
1396                 ext/I18N-Langinfo/
1397                 ext/IPC-Open3/
1398                 ext/NDBM_File/
1399                 ext/ODBM_File/
1400                 ext/Opcode/
1401                 ext/POSIX/
1402                 ext/PerlIO-encoding/
1403                 ext/PerlIO-mmap/
1404                 ext/PerlIO-scalar/
1405                 ext/PerlIO-via/
1406                 ext/Pod-Functions/
1407                 ext/Pod-Html/
1408                 ext/SDBM_File/
1409                 ext/Sys-Hostname/
1410                 ext/Tie-Hash-NamedCapture/
1411                 ext/Tie-Memoize/
1412                 ext/VMS-DCLsym/
1413                 ext/VMS-Filespec/
1414                 ext/VMS-Stdio/
1415                 ext/Win32CORE/
1416                 ext/XS-APItest/
1417                 ext/XS-Typemap/
1418                 ext/attributes/
1419                 ext/mro/
1420                 ext/re/
1421                 lib/AnyDBM_File.{pm,t}
1422                 lib/Benchmark.{pm,t}
1423                 lib/B/Deparse{.pm,.t,-*.t}
1424                 lib/B/Op_private.pm
1425                 lib/CORE.pod
1426                 lib/Class/Struct.{pm,t}
1427                 lib/Config.t
1428                 lib/Config/Extensions.{pm,t}
1429                 lib/DB.{pm,t}
1430                 lib/DBM_Filter.pm
1431                 lib/DBM_Filter/
1432                 lib/DirHandle.{pm,t}
1433                 lib/English.{pm,t}
1434                 lib/ExtUtils/Embed.pm
1435                 lib/ExtUtils/XSSymSet.pm
1436                 lib/ExtUtils/t/Embed.t
1437                 lib/ExtUtils/typemap
1438                 lib/File/Basename.{pm,t}
1439                 lib/File/Compare.{pm,t}
1440                 lib/File/Copy.{pm,t}
1441                 lib/File/stat{.pm,.t,-7896.t}
1442                 lib/FileHandle.{pm,t}
1443                 lib/Getopt/Std.{pm,t}
1444                 lib/Internals.pod
1445                 lib/Internals.t
1446                 lib/meta_notation.{pm,t}
1447                 lib/Net/hostent.{pm,t}
1448                 lib/Net/netent.{pm,t}
1449                 lib/Net/protoent.{pm,t}
1450                 lib/Net/servent.{pm,t}
1451                 lib/PerlIO.pm
1452                 lib/Pod/t/Usage.t
1453                 lib/SelectSaver.{pm,t}
1454                 lib/Symbol.{pm,t}
1455                 lib/Thread.{pm,t}
1456                 lib/Tie/Array.pm
1457                 lib/Tie/Array/
1458                 lib/Tie/ExtraHash.t
1459                 lib/Tie/Handle.pm
1460                 lib/Tie/Handle/
1461                 lib/Tie/Hash.{pm,t}
1462                 lib/Tie/Scalar.{pm,t}
1463                 lib/Tie/StdHandle.pm
1464                 lib/Tie/SubstrHash.{pm,t}
1465                 lib/Time/gmtime.{pm,t}
1466                 lib/Time/localtime.{pm,t}
1467                 lib/Time/tm.pm
1468                 lib/UNIVERSAL.pm
1469                 lib/Unicode/README
1470                 lib/Unicode/testnorm.t
1471                 lib/Unicode/UCD.{pm,t}
1472                 lib/User/grent.{pm,t}
1473                 lib/User/pwent.{pm,t}
1474                 lib/_charnames.pm
1475                 lib/blib.{pm,t}
1476                 lib/builtin.{pm,t}
1477                 lib/builtin-taint.t
1478                 lib/bytes.{pm,t}
1479                 lib/bytes_heavy.pl
1480                 lib/charnames.{pm,t}
1481                 lib/dbm_filter_util.pl
1482                 lib/deprecate.pm
1483                 lib/diagnostics.{pm,t}
1484                 lib/dumpvar.{pl,t}
1485                 lib/feature.{pm,t}
1486                 lib/feature/
1487                 lib/filetest.{pm,t}
1488                 lib/h2ph.t
1489                 lib/h2xs.t
1490                 lib/integer.{pm,t}
1491                 lib/less.{pm,t}
1492                 lib/locale.{pm,t}
1493                 lib/locale_threads.t
1494                 lib/open.{pm,t}
1495                 lib/overload/numbers.pm
1496                 lib/overloading.{pm,t}
1497                 lib/overload{.pm,.t,64.t}
1498                 lib/perl5db.{pl,t}
1499                 lib/perl5db/
1500                 lib/perlbug.t
1501                 lib/sigtrap.{pm,t}
1502                 lib/sort.{pm,t}
1503                 lib/strict.{pm,t}
1504                 lib/subs.{pm,t}
1505                 lib/unicore/
1506                 lib/utf8.{pm,t}
1507                 lib/vars{.pm,.t,_carp.t}
1508                 lib/vmsish.{pm,t}
1509                 ],
1510     },
1511 );
1512
1513 our %DistName;
1514 # legacy CPAN flag
1515 for my $mod_name ( keys %Modules ) {
1516     my $data = $Modules{$mod_name};
1517     $data->{CPAN} = !!$data->{DISTRIBUTION};
1518     my (@files)= split /\s+/, $data->{FILES};
1519     if (@files and $files[0]=~s!^(cpan|dist)/!!) {
1520         $DistName{$files[0]} = $mod_name;
1521         $DistName{"$1/$files[0]"} = $mod_name;
1522     }
1523 }
1524
1525 # legacy UPSTREAM flag
1526 for ( keys %Modules ) {
1527     # Keep any existing UPSTREAM flag so that "overrides" can be applied
1528     next if exists $Modules{$_}{UPSTREAM};
1529
1530     if ($_ eq '_PERLLIB' or $Modules{$_}{FILES} =~ m{^\s*(?:dist|ext|lib)/}) {
1531         $Modules{$_}{UPSTREAM} = 'blead';
1532     }
1533     elsif ($Modules{$_}{FILES} =~ m{^\s*cpan/}) {
1534         $Modules{$_}{UPSTREAM} = 'cpan';
1535     }
1536     else {
1537         warn "Unexpected location of FILES for module $_: $Modules{$_}{FILES}";
1538     }
1539 }
1540
1541 our %Maintainers;
1542 # legacy MAINTAINER field
1543 for ( keys %Modules ) {
1544     # Keep any existing MAINTAINER flag so that "overrides" can be applied
1545     next if exists $Modules{$_}{MAINTAINER};
1546
1547     if ($Modules{$_}{UPSTREAM} eq 'blead') {
1548         $Modules{$_}{MAINTAINER} = 'P5P';
1549         $Maintainers{P5P} = 'perl5-porters <perl5-porters@perl.org>';
1550     }
1551     elsif (exists $Modules{$_}{DISTRIBUTION}) {
1552         (my $pause_id = $Modules{$_}{DISTRIBUTION}) =~ s{/.*$}{};
1553         $Modules{$_}{MAINTAINER} = $pause_id;
1554         $Maintainers{$pause_id} = "<$pause_id\@cpan.org>";
1555     }
1556     else {
1557         warn "No DISTRIBUTION for non-blead module $_";
1558     }
1559 }
1560
1561 1;