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