Update Archive-Tar to CPAN version 2.18
[perl.git] / Porting / Maintainers.pl
1 #!perl
2 # A simple listing of core files that have specific maintainers,
3 # or at least someone that can be called an "interested party".
4 # Also, a "module" does not necessarily mean a CPAN module, it
5 # might mean a file or files or a subdirectory.
6 # Most (but not all) of the modules have dual lives in the core
7 # and in CPAN.
8
9 package Maintainers;
10
11 use utf8;
12 use File::Glob qw(:case);
13
14 # IGNORABLE: files which, if they appear in the root of a CPAN
15 # distribution, need not appear in core (i.e. core-cpan-diff won't
16 # complain if it can't find them)
17
18 @IGNORABLE = qw(
19     .cvsignore .dualLivedDiffConfig .gitignore .perlcriticrc .perltidyrc
20     .travis.yml ANNOUNCE Announce Artistic AUTHORS BENCHMARK BUGS Build.PL
21     CHANGELOG ChangeLog Changelog CHANGES Changes CONTRIBUTING CONTRIBUTING.md
22     CONTRIBUTING.mkdn COPYING Copying cpanfile CREDITS dist.ini GOALS HISTORY
23     INSTALL INSTALL.SKIP LICENCE LICENSE Makefile.PL MANIFEST MANIFEST.SKIP
24     META.json META.yml MYMETA.json MYMETA.yml NEW NEWS NOTES perlcritic.rc
25     ppport.h README README.md README.pod README.PATCHING SIGNATURE THANKS TODO
26     Todo VERSION WHATSNEW
27 );
28
29 # Each entry in the  %Modules hash roughly represents a distribution,
30 # except when DISTRIBUTION is set, where it *exactly* represents a single
31 # CPAN distribution.
32
33 # The keys of %Modules are human descriptions of the distributions, and
34 # may not exactly match a module or distribution name. Distributions
35 # which have an obvious top-level module associated with them will usually
36 # have a key named for that module, e.g. 'Archive::Extract' for
37 # Archive-Extract-N.NN.tar.gz; the remaining keys are likely to be based
38 # on the name of the distribution, e.g. 'Locale-Codes' for
39 # Locale-Codes-N.NN.tar.gz'.
40
41 # UPSTREAM indicates where patches should go.  This is generally now
42 # inferred from the FILES: modules with files in dist/, ext/ and lib/
43 # are understood to have UPSTREAM 'blead', meaning that the copy of the
44 # module in the blead sources is to be considered canonical, while
45 # modules with files in cpan/ are understood to have UPSTREAM 'cpan',
46 # meaning that the module on CPAN is to be patched first.
47
48 # MAINTAINER has previously been used to indicate who the current maintainer
49 # of the module is, but this is no longer stated explicitly. It is now
50 # understood to be either the Perl 5 Porters if UPSTREAM is 'blead', or else
51 # the CPAN author whose PAUSE user ID forms the first part of the DISTRIBUTION
52 # value, e.g. 'BINGOS' in the case of 'BINGOS/Archive-Tar-2.00.tar.gz'.
53 # (PAUSE's View Permissions page may be consulted to find other authors who
54 # have owner or co-maint permissions for the module in question.)
55
56 # FILES is a list of filenames, glob patterns, and directory
57 # names to be recursed down, which collectively generate a complete list
58 # of the files associated with the distribution.
59
60 # BUGS is an email or url to post bug reports.  For modules with
61 # UPSTREAM => 'blead', use perl5-porters@perl.org.  rt.cpan.org
62 # appears to automatically provide a URL for CPAN modules; any value
63 # given here overrides the default:
64 # http://rt.cpan.org/Public/Dist/Display.html?Name=$ModuleName
65
66 # DISTRIBUTION names the tarball on CPAN which (allegedly) the files
67 # included in core are derived from. Note that the file's version may not
68 # necessarily match the newest version on CPAN.
69
70 # EXCLUDED is a list of files to be excluded from a CPAN tarball before
71 # comparing the remaining contents with core. Each item can either be a
72 # full pathname (eg 't/foo.t') or a pattern (e.g. qr{^t/}).
73 # It defaults to the empty list.
74
75 # CUSTOMIZED is a list of files that have been customized within the
76 # Perl core.  Use this whenever patching a cpan upstream distribution
77 # or whenever we expect to have a file that differs from the tarball.
78 # If the file in blead matches the file in the tarball from CPAN,
79 # Porting/core-cpan-diff will warn about it, as it indicates an expected
80 # customization might have been lost when updating from upstream.  The
81 # path should be relative to the distribution directory.  If the upstream
82 # distribution should be modified to incorporate the change then be sure
83 # to raise a ticket for it on rt.cpan.org and add a comment alongside the
84 # list of CUSTOMIZED files noting the ticket number.
85
86 # DEPRECATED contains the *first* version of Perl in which the module
87 # was considered deprecated.  It should only be present if the module is
88 # actually deprecated.  Such modules should use deprecated.pm to
89 # issue a warning if used.  E.g.:
90 #
91 #     use if $] >= 5.011, 'deprecate';
92 #
93
94 # MAP is a hash that maps CPAN paths to their core equivalents.
95 # Each key represents a string prefix, with longest prefixes checked
96 # first. The first match causes that prefix to be replaced with the
97 # corresponding key. For example, with the following MAP:
98 #   {
99 #     'lib/'     => 'lib/',
100 #     ''     => 'lib/Foo/',
101 #   },
102 #
103 # these files are mapped as shown:
104 #
105 #    README     becomes lib/Foo/README
106 #    lib/Foo.pm becomes lib/Foo.pm
107 #
108 # The default is dependent on the type of module.
109 # For distributions which appear to be stored under ext/, it defaults to:
110 #
111 #   { '' => 'ext/Foo-Bar/' }
112 #
113 # otherwise, it's
114 #
115 #   {
116 #     'lib/'     => 'lib/',
117 #     ''     => 'lib/Foo/Bar/',
118 #   }
119
120 %Modules = (
121
122     'Archive::Tar' => {
123         'DISTRIBUTION' => 'BINGOS/Archive-Tar-2.18.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         'CUSTOMIZED'   => [
775             'lib/Math/BigInt.pm', # CPAN RT 118468
776             't/bigintpm.inc',     # CPAN RT 118468
777         ],
778         'EXCLUDED'     => [
779             qr{^inc/},
780             qr{^examples/},
781             qr{^t/author-},
782             qw( t/00sig.t
783                 t/01load.t
784                 t/02pod.t
785                 t/03podcov.t
786                 ),
787         ],
788     },
789
790     'Math::BigInt::FastCalc' => {
791         'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-FastCalc-0.42.tar.gz',
792         'FILES'        => q[cpan/Math-BigInt-FastCalc],
793         'EXCLUDED'     => [
794             qr{^inc/},
795             qw( t/00sig.t
796                 t/01load.t
797                 t/02pod.t
798                 t/03podcov.t
799                 ),
800
801             # instead we use the versions of these test
802             # files that come with Math::BigInt:
803             qw( t/bigfltpm.inc
804                 t/bigfltpm.t
805                 t/bigintpm.inc
806                 t/bigintpm.t
807                 t/mbimbf.inc
808                 t/mbimbf.t
809                 ),
810         ],
811     },
812
813     'Math::BigRat' => {
814         'DISTRIBUTION' => 'PJACKLAM/Math-BigRat-0.260804.tar.gz',
815         'FILES'        => q[cpan/Math-BigRat],
816         'EXCLUDED'     => [
817             qr{^inc/},
818             qr{^t/author-},
819             qw( t/00sig.t
820                 t/01load.t
821                 t/02pod.t
822                 t/03podcov.t
823                 ),
824         ],
825     },
826
827     'Math::Complex' => {
828         'DISTRIBUTION' => 'ZEFRAM/Math-Complex-1.59.tar.gz',
829         'FILES'        => q[cpan/Math-Complex],
830         'CUSTOMIZED'   => [
831             'lib/Math/Complex.pm', # CPAN RT 118467
832             't/Complex.t',         # CPAN RT 118467
833             't/Trig.t',            # CPAN RT 118467
834         ],
835         'EXCLUDED'     => [
836             qw( t/pod.t
837                 t/pod-coverage.t
838                 ),
839         ],
840     },
841
842     'Memoize' => {
843         'DISTRIBUTION' => 'MJD/Memoize-1.03.tgz',
844         'FILES'        => q[cpan/Memoize],
845         'EXCLUDED'     => ['article.html'],
846         'CUSTOMIZED'   => [
847             # CVE-2016-1238
848             qw( Memoize.pm )
849         ],
850     },
851
852     'MIME::Base64' => {
853         'DISTRIBUTION' => 'GAAS/MIME-Base64-3.15.tar.gz',
854         'FILES'        => q[cpan/MIME-Base64],
855         'EXCLUDED'     => ['t/bad-sv.t'],
856     },
857
858     'Module::CoreList' => {
859         'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20161020.tar.gz',
860         'FILES'        => q[dist/Module-CoreList],
861     },
862
863     'Module::Load' => {
864         'DISTRIBUTION' => 'BINGOS/Module-Load-0.32.tar.gz',
865         'FILES'        => q[cpan/Module-Load],
866     },
867
868     'Module::Load::Conditional' => {
869         'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.68.tar.gz',
870         'FILES'        => q[cpan/Module-Load-Conditional],
871     },
872
873     'Module::Loaded' => {
874         'DISTRIBUTION' => 'BINGOS/Module-Loaded-0.08.tar.gz',
875         'FILES'        => q[cpan/Module-Loaded],
876     },
877
878     'Module::Metadata' => {
879         'DISTRIBUTION' => 'ETHER/Module-Metadata-1.000033.tar.gz',
880         'FILES'        => q[cpan/Module-Metadata],
881         'EXCLUDED'     => [
882             qw(t/00-report-prereqs.t),
883             qw(t/00-report-prereqs.dd),
884             qr{weaver.ini},
885             qr{^xt},
886         ],
887     },
888
889     'Net::Ping' => {
890         'DISTRIBUTION' => 'RURBAN/Net-Ping-2.55.tar.gz',
891         'FILES'        => q[dist/Net-Ping],
892         'EXCLUDED'     => [
893             qw(README.md.PL),
894             qw(t/020_external.t),
895             qw(t/600_pod.t),
896             qw(t/601_pod-coverage.t),
897         ],
898         'CUSTOMIZED'   => [
899             qw( t/000_load.t t/001_new.t t/010_pingecho.t t/500_ping_icmp.t),
900         ],
901
902     },
903
904     'NEXT' => {
905         'DISTRIBUTION' => 'NEILB/NEXT-0.67.tar.gz',
906         'FILES'        => q[cpan/NEXT],
907         'EXCLUDED'     => [qr{^demo/}],
908     },
909
910     'Params::Check' => {
911         'DISTRIBUTION' => 'BINGOS/Params-Check-0.38.tar.gz',
912         'FILES'        => q[cpan/Params-Check],
913     },
914
915     'parent' => {
916         'DISTRIBUTION' => 'CORION/parent-0.236.tar.gz',
917         'FILES'        => q[cpan/parent],
918         'EXCLUDED'     => [
919             qr{^xt}
920         ],
921     },
922
923     'PathTools' => {
924         'DISTRIBUTION' => 'RJBS/PathTools-3.62.tar.gz',
925         'FILES'        => q[dist/PathTools],
926         'EXCLUDED'     => [
927             qr{^t/lib/Test/},
928             qw( t/rel2abs_vs_symlink.t),
929         ],
930     },
931
932     'Perl::OSType' => {
933         'DISTRIBUTION' => 'DAGOLDEN/Perl-OSType-1.010.tar.gz',
934         'FILES'        => q[cpan/Perl-OSType],
935         'EXCLUDED'     => [qw(tidyall.ini), qr/^xt/, qr{^t/00-}],
936     },
937
938     'perlfaq' => {
939         'DISTRIBUTION' => 'LLAP/perlfaq-5.021011.tar.gz',
940         'FILES'        => q[cpan/perlfaq],
941         'EXCLUDED'     => [
942             qw( inc/CreateQuestionList.pm
943                 inc/perlfaq.tt
944                 t/00-compile.t),
945             qr{^xt/},
946         ],
947     },
948
949     'PerlIO::via::QuotedPrint' => {
950         'DISTRIBUTION' => 'SHAY/PerlIO-via-QuotedPrint-0.08.tar.gz',
951         'FILES'        => q[cpan/PerlIO-via-QuotedPrint],
952     },
953
954     'Pod::Checker' => {
955         'DISTRIBUTION' => 'MAREKR/Pod-Checker-1.73.tar.gz',
956         'FILES'        => q[cpan/Pod-Checker],
957         'CUSTOMIZED'   => [ qw[
958             t/pod/contains_bad_pod.xr
959             t/pod/selfcheck.t
960             t/pod/testcmp.pl
961             t/pod/testpchk.pl
962         ] ],
963     },
964
965     'Pod::Escapes' => {
966         'DISTRIBUTION' => 'NEILB/Pod-Escapes-1.07.tar.gz',
967         'FILES'        => q[cpan/Pod-Escapes],
968     },
969
970     'Pod::Parser' => {
971         'DISTRIBUTION' => 'MAREKR/Pod-Parser-1.63.tar.gz',
972         'FILES'        => q[cpan/Pod-Parser],
973     },
974
975     'Pod::Perldoc' => {
976         'DISTRIBUTION' => 'MALLEN/Pod-Perldoc-3.27.tar.gz',
977         'FILES'        => q[cpan/Pod-Perldoc],
978
979         # Note that we use the CPAN-provided Makefile.PL, since it
980         # contains special handling of the installation of perldoc.pod
981
982         'EXCLUDED' => [
983             # In blead, the perldoc executable is generated by perldoc.PL
984             # instead
985             # XXX We can and should fix this, but clean up the DRY-failure in
986             # utils first
987             'perldoc',
988
989             # https://rt.cpan.org/Ticket/Display.html?id=116827
990             't/02_module_pod_output.t'
991         ],
992     },
993
994     'Pod::Simple' => {
995         'DISTRIBUTION' => 'MARCGREEN/Pod-Simple-3.32.tar.gz',
996         'FILES'        => q[cpan/Pod-Simple],
997     },
998
999     'Pod::Usage' => {
1000         'DISTRIBUTION' => 'MAREKR/Pod-Usage-1.69.tar.gz',
1001         'FILES'        => q[cpan/Pod-Usage],
1002     },
1003
1004     'podlators' => {
1005         'DISTRIBUTION' => 'RRA/podlators-4.08.tar.gz',
1006         'FILES'        => q[cpan/podlators pod/perlpodstyle.pod],
1007
1008         'MAP' => {
1009             ''                 => 'cpan/podlators/',
1010             # this file lives outside the cpan/ directory
1011             'pod/perlpodstyle.pod' => 'pod/perlpodstyle.pod',
1012         },
1013     },
1014
1015     'Safe' => {
1016         'DISTRIBUTION' => 'RGARCIA/Safe-2.35.tar.gz',
1017         'FILES'        => q[dist/Safe],
1018     },
1019
1020     'Scalar-List-Utils' => {
1021         'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.46.tar.gz',
1022         'FILES'        => q[cpan/Scalar-List-Utils],
1023         'CUSTOMIZED'   => [
1024             'lib/List/Util.pm',    # CPAN RT 118470
1025             'lib/List/Util/XS.pm', # CPAN RT 118470
1026             'lib/Scalar/Util.pm',  # CPAN RT 118470
1027             'lib/Sub/Util.pm',     # CPAN RT 118470
1028             't/lln.t',             # CPAN RT 118470
1029             't/uniq.t',            # CPAN RT 118470
1030         ],
1031     },
1032
1033     'Search::Dict' => {
1034         'DISTRIBUTION' => 'DAGOLDEN/Search-Dict-1.07.tar.gz',
1035         'FILES'        => q[dist/Search-Dict],
1036     },
1037
1038     'SelfLoader' => {
1039         'DISTRIBUTION' => 'SMUELLER/SelfLoader-1.20.tar.gz',
1040         'FILES'        => q[dist/SelfLoader],
1041         'EXCLUDED'     => ['t/00pod.t'],
1042     },
1043
1044     'Socket' => {
1045         'DISTRIBUTION' => 'PEVANS/Socket-2.020.tar.gz',
1046         'FILES'        => q[cpan/Socket],
1047
1048         # https://rt.cpan.org/Ticket/Display.html?id=106797
1049         # https://rt.cpan.org/Ticket/Display.html?id=107058
1050         # https://rt.cpan.org/Ticket/Display.html?id=111707
1051         'CUSTOMIZED'   => [ qw[ Socket.pm Socket.xs ] ],
1052     },
1053
1054     'Storable' => {
1055         'DISTRIBUTION' => 'AMS/Storable-2.51.tar.gz',
1056         'FILES'        => q[dist/Storable],
1057         'EXCLUDED'     => [
1058             qr{^t/compat/},
1059         ],
1060     },
1061
1062     'Sys::Syslog' => {
1063         'DISTRIBUTION' => 'SAPER/Sys-Syslog-0.35.tar.gz',
1064         'FILES'        => q[cpan/Sys-Syslog],
1065         'EXCLUDED'     => [
1066             qr{^eg/},
1067             qw( README.win32
1068                 t/data-validation.t
1069                 t/distchk.t
1070                 t/pod.t
1071                 t/podcover.t
1072                 t/podspell.t
1073                 t/portfs.t
1074                 win32/PerlLog.RES
1075                 ),
1076         ],
1077     },
1078
1079     'Term::ANSIColor' => {
1080         'DISTRIBUTION' => 'RRA/Term-ANSIColor-4.06.tar.gz',
1081         'FILES'        => q[cpan/Term-ANSIColor],
1082         'EXCLUDED'     => [
1083             qr{^docs/},
1084             qr{^examples/},
1085             qr{^t/data/},
1086             qr{^t/docs/},
1087             qr{^t/style/},
1088             qw( t/module/aliases-env.t ),
1089         ],
1090     },
1091
1092     'Term::Cap' => {
1093         'DISTRIBUTION' => 'JSTOWE/Term-Cap-1.17.tar.gz',
1094         'FILES'        => q[cpan/Term-Cap],
1095     },
1096
1097     'Term::Complete' => {
1098         'DISTRIBUTION' => 'FLORA/Term-Complete-1.402.tar.gz',
1099         'FILES'        => q[dist/Term-Complete],
1100         'EXCLUDED'     => [qr{^t/release-.*\.t}],
1101     },
1102
1103     'Term::ReadLine' => {
1104         'DISTRIBUTION' => 'FLORA/Term-ReadLine-1.14.tar.gz',
1105         'FILES'        => q[dist/Term-ReadLine],
1106         'EXCLUDED'     => [qr{^t/release-.*\.t}],
1107     },
1108
1109     'Test' => {
1110         'DISTRIBUTION' => 'JESSE/Test-1.26.tar.gz',
1111         'FILES'        => q[dist/Test],
1112     },
1113
1114     'Test::Harness' => {
1115         'DISTRIBUTION' => 'LEONT/Test-Harness-3.36.tar.gz',
1116         'FILES'        => q[cpan/Test-Harness],
1117         'EXCLUDED'     => [
1118             qr{^examples/},
1119             qr{^xt/},
1120             qw( Changes-2.64
1121                 MANIFEST.CUMMULATIVE
1122                 HACKING.pod
1123                 perlcriticrc
1124                 t/000-load.t
1125                 t/lib/if.pm
1126                 ),
1127         ],
1128         'CUSTOMIZED'   => [
1129             # CVE-2016-1238
1130             qw(
1131                bin/prove lib/App/Prove.pm lib/App/Prove/State.pm
1132                lib/App/Prove/State/Result.pm
1133                lib/App/Prove/State/Result/Test.pm
1134                lib/TAP/Base.pm lib/TAP/Formatter/Base.pm
1135                lib/TAP/Formatter/Color.pm
1136                lib/TAP/Formatter/Console.pm
1137                lib/TAP/Formatter/Console/ParallelSession.pm
1138                lib/TAP/Formatter/Console/Session.pm
1139                lib/TAP/Formatter/File.pm
1140                lib/TAP/Formatter/File/Session.pm
1141                lib/TAP/Formatter/Session.pm lib/TAP/Harness.pm
1142                lib/TAP/Harness/Env.pm lib/TAP/Object.pm
1143                lib/TAP/Parser.pm lib/TAP/Parser/Aggregator.pm
1144                lib/TAP/Parser/Grammar.pm
1145                lib/TAP/Parser/Iterator.pm
1146                lib/TAP/Parser/Iterator/Array.pm
1147                lib/TAP/Parser/Iterator/Process.pm
1148                lib/TAP/Parser/Iterator/Stream.pm
1149                lib/TAP/Parser/IteratorFactory.pm
1150                lib/TAP/Parser/Multiplexer.pm
1151                lib/TAP/Parser/Result.pm
1152                lib/TAP/Parser/Result/Bailout.pm
1153                lib/TAP/Parser/Result/Comment.pm
1154                lib/TAP/Parser/Result/Plan.pm
1155                lib/TAP/Parser/Result/Pragma.pm
1156                lib/TAP/Parser/Result/Test.pm
1157                lib/TAP/Parser/Result/Unknown.pm
1158                lib/TAP/Parser/Result/Version.pm
1159                lib/TAP/Parser/Result/YAML.pm
1160                lib/TAP/Parser/ResultFactory.pm
1161                lib/TAP/Parser/Scheduler.pm
1162                lib/TAP/Parser/Scheduler/Job.pm
1163                lib/TAP/Parser/Scheduler/Spinner.pm
1164                lib/TAP/Parser/Source.pm
1165                lib/TAP/Parser/SourceHandler.pm
1166                lib/TAP/Parser/SourceHandler/Executable.pm
1167                lib/TAP/Parser/SourceHandler/File.pm
1168                lib/TAP/Parser/SourceHandler/Handle.pm
1169                lib/TAP/Parser/SourceHandler/Perl.pm
1170                lib/TAP/Parser/SourceHandler/RawTAP.pm
1171                lib/TAP/Parser/YAMLish/Reader.pm
1172                lib/TAP/Parser/YAMLish/Writer.pm
1173                lib/Test/Harness.pm
1174             )
1175         ],
1176     },
1177
1178     'Test::Simple' => {
1179         'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302062.tar.gz',
1180         'FILES'        => q[cpan/Test-Simple],
1181         'EXCLUDED'     => [
1182             qr{^examples/},
1183             qr{^xt/},
1184             qw( appveyor.yml
1185                 perltidyrc
1186                 t/00compile.t
1187                 t/00-report.t
1188                 t/zzz-check-breaks.t
1189                 ),
1190         ],
1191     },
1192
1193     'Text::Abbrev' => {
1194         'DISTRIBUTION' => 'FLORA/Text-Abbrev-1.02.tar.gz',
1195         'FILES'        => q[dist/Text-Abbrev],
1196         'EXCLUDED'     => [qr{^t/release-.*\.t}],
1197     },
1198
1199     'Text::Balanced' => {
1200         'DISTRIBUTION' => 'SHAY/Text-Balanced-2.03.tar.gz',
1201         'FILES'        => q[cpan/Text-Balanced],
1202         'EXCLUDED'     => [
1203             qw( t/97_meta.t
1204                 t/98_pod.t
1205                 t/99_pmv.t
1206                 ),
1207         ],
1208     },
1209
1210     'Text::ParseWords' => {
1211         'DISTRIBUTION' => 'CHORNY/Text-ParseWords-3.30.tar.gz',
1212         'FILES'        => q[cpan/Text-ParseWords],
1213     },
1214
1215     'Text-Tabs+Wrap' => {
1216         'DISTRIBUTION' => 'MUIR/modules/Text-Tabs+Wrap-2013.0523.tar.gz',
1217         'FILES'        => q[cpan/Text-Tabs],
1218         'EXCLUDED'   => [
1219             qr/^lib\.old/,
1220             't/dnsparks.t',    # see af6492bf9e
1221         ],
1222         'MAP'          => {
1223             ''                        => 'cpan/Text-Tabs/',
1224             'lib.modern/Text/Tabs.pm' => 'cpan/Text-Tabs/lib/Text/Tabs.pm',
1225             'lib.modern/Text/Wrap.pm' => 'cpan/Text-Tabs/lib/Text/Wrap.pm',
1226         },
1227     },
1228
1229     # Jerry Hedden does take patches that are applied to blead first, even
1230     # though that can be hard to discern from the Git history; so it's
1231     # correct for this (and Thread::Semaphore, threads, and threads::shared)
1232     # to be under dist/ rather than cpan/
1233     'Thread::Queue' => {
1234         'DISTRIBUTION' => 'JDHEDDEN/Thread-Queue-3.11.tar.gz',
1235         'FILES'        => q[dist/Thread-Queue],
1236         'EXCLUDED'     => [
1237             qr{^examples/},
1238             qw( t/00_load.t
1239                 t/99_pod.t
1240                 t/test.pl
1241                 ),
1242         ],
1243     },
1244
1245     'Thread::Semaphore' => {
1246         'DISTRIBUTION' => 'JDHEDDEN/Thread-Semaphore-2.13.tar.gz',
1247         'FILES'        => q[dist/Thread-Semaphore],
1248         'EXCLUDED'     => [
1249             qw( examples/semaphore.pl
1250                 t/00_load.t
1251                 t/99_pod.t
1252                 t/test.pl
1253                 ),
1254         ],
1255     },
1256
1257     'threads' => {
1258         'DISTRIBUTION' => 'JDHEDDEN/threads-2.09.tar.gz',
1259         'FILES'        => q[dist/threads],
1260         'EXCLUDED'     => [
1261             qr{^examples/},
1262             qw( t/pod.t
1263                 t/test.pl
1264                 threads.h
1265                 ),
1266         ],
1267     },
1268
1269     'threads::shared' => {
1270         'DISTRIBUTION' => 'JDHEDDEN/threads-shared-1.52.tar.gz',
1271         'FILES'        => q[dist/threads-shared],
1272         'EXCLUDED'     => [
1273             qw( examples/class.pl
1274                 shared.h
1275                 t/pod.t
1276                 t/test.pl
1277                 ),
1278         ],
1279     },
1280
1281     'Tie::File' => {
1282         'DISTRIBUTION' => 'TODDR/Tie-File-1.00.tar.gz',
1283         'FILES'        => q[dist/Tie-File],
1284     },
1285
1286     'Tie::RefHash' => {
1287         'DISTRIBUTION' => 'FLORA/Tie-RefHash-1.39.tar.gz',
1288         'FILES'        => q[cpan/Tie-RefHash],
1289     },
1290
1291     'Time::HiRes' => {
1292         'DISTRIBUTION' => 'JHI/Time-HiRes-1.9740.tar.gz',
1293         'FILES'        => q[dist/Time-HiRes],
1294     },
1295
1296     'Time::Local' => {
1297         'DISTRIBUTION' => 'DROLSKY/Time-Local-1.24.tar.gz',
1298         'FILES'        => q[cpan/Time-Local],
1299         'EXCLUDED'     => [
1300             qr{^xt/},
1301             qw( perlcriticrc
1302                 perltidyrc
1303                 tidyall.ini
1304                 t/00-report-prereqs.t
1305                 t/00-report-prereqs.dd
1306                 ),
1307         ],
1308     },
1309
1310     'Time::Piece' => {
1311         'DISTRIBUTION' => 'ESAYM/Time-Piece-1.31.tar.gz',
1312         'FILES'        => q[cpan/Time-Piece],
1313     },
1314
1315     'Unicode::Collate' => {
1316         'DISTRIBUTION' => 'SADAHIRO/Unicode-Collate-1.17.tar.gz',
1317         'FILES'        => q[cpan/Unicode-Collate],
1318         'EXCLUDED'     => [
1319             qr{N$},
1320             qr{^data/},
1321             qr{^gendata/},
1322             qw( disableXS
1323                 enableXS
1324                 mklocale
1325                 ),
1326         ],
1327     },
1328
1329     'Unicode::Normalize' => {
1330         'DISTRIBUTION' => 'KHW/Unicode-Normalize-1.25.tar.gz',
1331         'FILES'        => q[cpan/Unicode-Normalize],
1332         'EXCLUDED'     => [
1333             qw( MANIFEST.N
1334                 Normalize.pmN
1335                 disableXS
1336                 enableXS
1337                 ),
1338         ],
1339     },
1340
1341     'version' => {
1342         'DISTRIBUTION' => 'JPEACOCK/version-0.9917.tar.gz',
1343         'FILES'        => q[cpan/version vutil.c vutil.h vxs.inc],
1344         'EXCLUDED' => [
1345             qr{^vutil/lib/},
1346             'vutil/Makefile.PL',
1347             'vutil/ppport.h',
1348             'vutil/vxs.xs',
1349             't/00impl-pp.t',
1350             't/survey_locales',
1351             'vperl/vpp.pm',
1352         ],
1353
1354         # When adding the CPAN-distributed files for version.pm, it is necessary
1355         # to delete an entire block out of lib/version.pm, since that code is
1356         # only necessary with the CPAN release.
1357         'CUSTOMIZED'   => [
1358             qw( lib/version.pm
1359                 ),
1360         ],
1361
1362         'MAP' => {
1363             'vutil/'         => '',
1364             ''               => 'cpan/version/',
1365         },
1366     },
1367
1368     'warnings' => {
1369         'FILES'      => q[
1370                  lib/warnings
1371                  lib/warnings.{pm,t}
1372                  regen/warnings.pl
1373                  t/lib/warnings
1374         ],
1375     },
1376
1377     'Win32' => {
1378         'DISTRIBUTION' => "JDB/Win32-0.52.tar.gz",
1379         'FILES'        => q[cpan/Win32],
1380     },
1381
1382     'Win32API::File' => {
1383         'DISTRIBUTION' => 'CHORNY/Win32API-File-0.1203.tar.gz',
1384         'FILES'        => q[cpan/Win32API-File],
1385         'EXCLUDED'     => [
1386             qr{^ex/},
1387         ],
1388     },
1389
1390     'XSLoader' => {
1391         'DISTRIBUTION' => 'SAPER/XSLoader-0.24.tar.gz',
1392         'FILES'        => q[dist/XSLoader],
1393         'EXCLUDED'     => [
1394             qr{^eg/},
1395             qw( t/00-load.t
1396                 t/01-api.t
1397                 t/distchk.t
1398                 t/pod.t
1399                 t/podcover.t
1400                 t/portfs.t
1401                 ),
1402             'XSLoader.pm',    # we use XSLoader_pm.PL
1403         ],
1404     },
1405
1406     # this pseudo-module represents all the files under ext/ and lib/
1407     # that aren't otherwise claimed. This means that the following two
1408     # commands will check that every file under ext/ and lib/ is
1409     # accounted for, and that there are no duplicates:
1410     #
1411     #    perl Porting/Maintainers --checkmani lib ext
1412     #    perl Porting/Maintainers --checkmani
1413
1414     '_PERLLIB' => {
1415         'FILES'    => q[
1416                 ext/Amiga-ARexx/
1417                 ext/Amiga-Exec/
1418                 ext/B/
1419                 ext/Devel-Peek/
1420                 ext/DynaLoader/
1421                 ext/Errno/
1422                 ext/ExtUtils-Miniperl/
1423                 ext/Fcntl/
1424                 ext/File-DosGlob/
1425                 ext/File-Find/
1426                 ext/File-Glob/
1427                 ext/FileCache/
1428                 ext/GDBM_File/
1429                 ext/Hash-Util-FieldHash/
1430                 ext/Hash-Util/
1431                 ext/I18N-Langinfo/
1432                 ext/IPC-Open3/
1433                 ext/NDBM_File/
1434                 ext/ODBM_File/
1435                 ext/Opcode/
1436                 ext/POSIX/
1437                 ext/PerlIO-encoding/
1438                 ext/PerlIO-mmap/
1439                 ext/PerlIO-scalar/
1440                 ext/PerlIO-via/
1441                 ext/Pod-Functions/
1442                 ext/Pod-Html/
1443                 ext/SDBM_File/
1444                 ext/Sys-Hostname/
1445                 ext/Tie-Hash-NamedCapture/
1446                 ext/Tie-Memoize/
1447                 ext/VMS-DCLsym/
1448                 ext/VMS-Filespec/
1449                 ext/VMS-Stdio/
1450                 ext/Win32CORE/
1451                 ext/XS-APItest/
1452                 ext/XS-Typemap/
1453                 ext/arybase/
1454                 ext/attributes/
1455                 ext/mro/
1456                 ext/re/
1457                 lib/AnyDBM_File.{pm,t}
1458                 lib/Benchmark.{pm,t}
1459                 lib/B/Deparse{.pm,.t,-*.t}
1460                 lib/B/Op_private.pm
1461                 lib/CORE.pod
1462                 lib/Class/Struct.{pm,t}
1463                 lib/Config.t
1464                 lib/Config/Extensions.{pm,t}
1465                 lib/DB.{pm,t}
1466                 lib/DBM_Filter.pm
1467                 lib/DBM_Filter/
1468                 lib/DirHandle.{pm,t}
1469                 lib/English.{pm,t}
1470                 lib/ExtUtils/Embed.pm
1471                 lib/ExtUtils/XSSymSet.pm
1472                 lib/ExtUtils/t/Embed.t
1473                 lib/ExtUtils/typemap
1474                 lib/File/Basename.{pm,t}
1475                 lib/File/Compare.{pm,t}
1476                 lib/File/Copy.{pm,t}
1477                 lib/File/stat{.pm,.t,-7896.t}
1478                 lib/FileHandle.{pm,t}
1479                 lib/FindBin.{pm,t}
1480                 lib/Getopt/Std.{pm,t}
1481                 lib/Internals.pod
1482                 lib/Internals.t
1483                 lib/meta_notation.{pm,t}
1484                 lib/Net/hostent.{pm,t}
1485                 lib/Net/netent.{pm,t}
1486                 lib/Net/protoent.{pm,t}
1487                 lib/Net/servent.{pm,t}
1488                 lib/PerlIO.pm
1489                 lib/Pod/t/InputObjects.t
1490                 lib/Pod/t/Select.t
1491                 lib/Pod/t/Usage.t
1492                 lib/Pod/t/utils.t
1493                 lib/SelectSaver.{pm,t}
1494                 lib/Symbol.{pm,t}
1495                 lib/Thread.{pm,t}
1496                 lib/Tie/Array.pm
1497                 lib/Tie/Array/
1498                 lib/Tie/ExtraHash.t
1499                 lib/Tie/Handle.pm
1500                 lib/Tie/Handle/
1501                 lib/Tie/Hash.{pm,t}
1502                 lib/Tie/Scalar.{pm,t}
1503                 lib/Tie/StdHandle.pm
1504                 lib/Tie/SubstrHash.{pm,t}
1505                 lib/Time/gmtime.{pm,t}
1506                 lib/Time/localtime.{pm,t}
1507                 lib/Time/tm.pm
1508                 lib/UNIVERSAL.pm
1509                 lib/Unicode/README
1510                 lib/Unicode/UCD.{pm,t}
1511                 lib/User/grent.{pm,t}
1512                 lib/User/pwent.{pm,t}
1513                 lib/_charnames.pm
1514                 lib/blib.{pm,t}
1515                 lib/bytes.{pm,t}
1516                 lib/bytes_heavy.pl
1517                 lib/charnames.{pm,t}
1518                 lib/dbm_filter_util.pl
1519                 lib/deprecate.pm
1520                 lib/diagnostics.{pm,t}
1521                 lib/dumpvar.{pl,t}
1522                 lib/feature.{pm,t}
1523                 lib/feature/
1524                 lib/filetest.{pm,t}
1525                 lib/h2ph.t
1526                 lib/h2xs.t
1527                 lib/integer.{pm,t}
1528                 lib/less.{pm,t}
1529                 lib/locale.{pm,t}
1530                 lib/locale_threads.t
1531                 lib/open.{pm,t}
1532                 lib/overload/numbers.pm
1533                 lib/overloading.{pm,t}
1534                 lib/overload{.pm,.t,64.t}
1535                 lib/perl5db.{pl,t}
1536                 lib/perl5db/
1537                 lib/perlbug.t
1538                 lib/sigtrap.{pm,t}
1539                 lib/sort.{pm,t}
1540                 lib/strict.{pm,t}
1541                 lib/subs.{pm,t}
1542                 lib/unicore/
1543                 lib/utf8.{pm,t}
1544                 lib/utf8_heavy.pl
1545                 lib/vars{.pm,.t,_carp.t}
1546                 lib/vmsish.{pm,t}
1547                 ],
1548     },
1549 );
1550
1551 # legacy CPAN flag
1552 for ( values %Modules ) {
1553     $_->{CPAN} = !!$_->{DISTRIBUTION};
1554 }
1555
1556 # legacy UPSTREAM flag
1557 for ( keys %Modules ) {
1558     # Keep any existing UPSTREAM flag so that "overrides" can be applied
1559     next if exists $Modules{$_}{UPSTREAM};
1560
1561     if ($_ eq '_PERLLIB' or $Modules{$_}{FILES} =~ m{^\s*(?:dist|ext|lib)/}) {
1562         $Modules{$_}{UPSTREAM} = 'blead';
1563     }
1564     elsif ($Modules{$_}{FILES} =~ m{^\s*cpan/}) {
1565         $Modules{$_}{UPSTREAM} = 'cpan';
1566     }
1567     else {
1568         warn "Unexpected location of FILES for module $_: $Modules{$_}{FILES}";
1569     }
1570 }
1571
1572 # legacy MAINTAINER field
1573 for ( keys %Modules ) {
1574     # Keep any existing MAINTAINER flag so that "overrides" can be applied
1575     next if exists $Modules{$_}{MAINTAINER};
1576
1577     if ($Modules{$_}{UPSTREAM} eq 'blead') {
1578         $Modules{$_}{MAINTAINER} = 'P5P';
1579         $Maintainers{P5P} = 'perl5-porters <perl5-porters@perl.org>';
1580     }
1581     elsif (exists $Modules{$_}{DISTRIBUTION}) {
1582         (my $pause_id = $Modules{$_}{DISTRIBUTION}) =~ s{/.*$}{};
1583         $Modules{$_}{MAINTAINER} = $pause_id;
1584         $Maintainers{$pause_id} = "<$pause_id\@cpan.org>";
1585     }
1586     else {
1587         warn "No DISTRIBUTION for non-blead module $_";
1588     }
1589 }
1590
1591 1;