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