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