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