The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
CONTRIBUTING 088
Changes 2553
INSTALL 044
LICENSE 0379
MANIFEST 1528
META.json 17722
META.yml 29543
Makefile.PL 6183
README 1837
README.md 0221
corpus/BOMTest/UTF16BE.pm --
corpus/BOMTest/UTF16LE.pm --
corpus/BOMTest/UTF8.pm 013
dist.ini 037
lib/Module/Metadata.pm 132151
maint/Makefile.PL.include 100
maint/Makefile.include 110
maint/bump-version 370
t/00-report-prereqs.t 0204
t/contains_pod.t 914
t/encoding.t 11
t/endpod.t 10
t/lib/BOMTest/UTF16BE.pm --
t/lib/BOMTest/UTF16LE.pm --
t/lib/BOMTest/UTF8.pm 130
t/lib/DistGen.pm 8490
t/lib/ENDPOD.pm 10
t/lib/MBTest.pm 2800
t/lib/Tie/CPHash.pm 1950
t/metadata.t 170257
t/taint.t 22
xt/author/00-compile.t 050
xt/pod.t 150
xt/release/changes_has_content.t 041
xt/release/cpan-changes.t 011
xt/release/distmeta.t 06
xt/release/eol.t 08
xt/release/kwalitee.t 04
xt/release/minimum-version.t 08
xt/release/mojibake.t 012
xt/release/no-tabs.t 037
xt/release/pod-coverage.t 07
xt/release/pod-no404s.t 021
xt/release/pod-syntax.t 06
xt/release/portability.t 011
45 files changed (This is a version diff) 20563069
@@ -0,0 +1,88 @@
+
+CONTRIBUTING
+
+Thank you for considering contributing to this distribution.  This file
+contains instructions that will help you work with the source code.
+
+The distribution is managed with Dist::Zilla (https://metacpan.org/release/Dist-Zilla).
+This means than many of the usual files you might expect are not in the
+repository, but are generated at release time (e.g. Makefile.PL).
+
+However, you can run tests directly using the 'prove' tool:
+
+  $ prove -l
+  $ prove -lv t/some_test_file.t
+  $ prove -lvr t/
+
+In most cases, 'prove' is entirely sufficent for you to test any
+patches you have.
+
+You may need to satisfy some dependencies.  The easiest way to satisfy
+dependencies is to install the last release -- this is available at
+https://metacpan.org/release/Module-Metadata.
+
+If you use cpanminus, you can do it without downloading the tarball first:
+
+  $ cpanm --reinstall --installdeps --with-recommends Module::Metadata
+
+Dist::Zilla is a very powerful authoring tool, but requires a number of
+author-specific plugins.  If you would like to use it for contributing,
+install it from CPAN, then run one of the following commands, depending on
+your CPAN client:
+
+  $ cpan `dzil authordeps --missing`
+or
+  $ dzil authordeps --missing | cpanm
+
+You should then also install any additional requirements not needed by the
+dzil build but may be needed by tests or other development:
+
+  $ cpan `dzil listdeps --author --missing`
+or
+  $ dzil listdeps --author --missing | cpanm
+
+Or, you can use the 'dzil stale' command to install all requirements at once:
+
+  $ cpan Dist::Zilla::App::Command::stale
+  $ cpan `dzil stale --all`
+or
+  $ cpanm Dist::Zilla::App::Command::stale
+  $ dzil stale --all | cpanm
+
+You can also do this via cpanm directly:
+
+  $ cpanm --reinstall --installdeps --with-develop --with-recommends Module::Metadata
+
+Once installed, here are some dzil commands you might try:
+
+  $ dzil build
+  $ dzil test
+  $ dzil test --release
+  $ dzil xtest
+  $ dzil listdeps --json
+  $ dzil build --notgz
+
+You can learn more about Dist::Zilla at http://dzil.org/.
+
+The code for this distribution is hosted at GitHub. The repository is:
+https://github.com/Perl-Toolchain-Gang/Module-Metadata
+You can submit code changes by forking the repository, pushing your code
+changes to your clone, and then submitting a pull request. Detailed
+instructions for doing that is available here:
+
+https://help.github.com/
+https://help.github.com/articles/creating-a-pull-request
+
+If you have found a bug, but do not have an accompanying patch to fix it, you
+can submit an issue report here:
+https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Metadata
+or via bug-Module-Metadata@rt.cpan.org.
+
+There is also a mailing list available for users of this distribution, at
+http://lists.perl.org/list/cpan-workers.html.
+There is also an irc channel available for users of this distribution, at
+irc://irc.perl.org/#toolchain.
+
+
+This file was generated via Dist::Zilla::Plugin::GenerateFile::ShareDir 0.005 from a
+template file originating in Dist-Zilla-PluginBundle-Author-ETHER-0.064.
@@ -1,94 +1,122 @@
-Release history for Module-Metadata
-
-1.000019   2013-10-06
+Revision history for Module-Metadata
+
+1.000024  2014-06-03 01:52:46Z
+  - fix inaccurate prerequisite declaration on Test::More (in 1.000023)
+
+1.000023  2014-06-02 02:37:17Z
+  - support installations on older perls with an ExtUtils::MakeMaker earlier
+    than 6.63_03
+
+1.000022 - 2014-04-29
+  - work around change in comparison behaviour in Test::More 0.95_01 by being
+    more explicit with our tests - now explicitly checking the string form of
+    the extracted version, rather than the entire version object
+  - ensure the extracted version is returned as a version object in all cases
+    (RT#87782, Randy Stauner)
+
+1.000021 - 2014-04-29
+  - fix use of newer interface from File::Path, to avoid another prereq on
+    older perls (Graham Knop, PR#7)
+  - fixed all out of date prereq declarations
+
+1.000020 - 2014-04-27
+  - new is_indexable() object method (ether, RT#84357)
+  - eliminated dependency on IO::File (and by virtue, XS) - thanks, leont!
+  - removed cruft in test infrastructure left behind from separation from
+    Module::Build (ether)
+  - repository moved to https://github.com/Perl-Toolchain-Gang/Module-Metadata
+  - .pm file is now wholly ascii, for nicer fatpacking (RT#95086)
+  - some code micro-optimizations (Olivier Mengué, PR#4)
+
+1.000019 - 2013-10-06
   - warnings now disabled inside during the evaluation of generated version
     sub (BinGOs, RT#89282)
 
-1.000018   2013-09-11
+1.000018 - 2013-09-11
   - re-release of detainting fix without unstated non-core test dependencies
 
-1.000017   2013-09-10
+1.000017 - 2013-09-10
   - detaint version, if needed (RT#88576, Chris Williams)
 
-1.000016   2013-08-21
+1.000016 - 2013-08-21
   - Re-release to fix prereqs and other metadata
 
-1.000015   2013-08-21
+1.000015 - 2013-08-21
   - Change wording about safety/security to satisfy CVE-2013-1437
 
-1.000014   2013-05-09
+1.000014 - 2013-05-09
   - Remove "now installs to 'site' for perl 5.12+" from last version
 
-1.000013   2013-05-08
+1.000013 - 2013-05-08
   - Fix reliance on recent Test::Builder
   - Make tests perl 5.6 compatible
   - now installs to 'site' for perl 5.12+, as per p5p recommendation
 
-1.000012   2013-05-04
+1.000012 - 2013-05-04
   - improved package detection heuristics (thanks, Edward Zborowski!)
   - fix ->contains_pod (RT#84932, Tokuhiro Matsuno)
   - fix detection of pod after __END__ (RT79656, Tokuhiro Matsuno)
 
-1.000011   2012-08-16
+1.000011 - 2012-08-16
   - LEONT++ hasn't found any issues with my changes; mark it done (or at
     least ready for smoking). (APEIRON)
 
-1.000010_003   2012-08-16 01:00:00
+1.000010_003 - 2012-08-16 01:00:00
   - Remove other spurious message (APEIRON)
 
-1.000010_002   2012-08-15 20:15:00
+1.000010_002 - 2012-08-15 20:15:00
   - APEIRON is an idiot (APEIRON)
 
-1.000010_001   2012-08-15 20:00:00
+1.000010_001 - 2012-08-15 20:00:00
   - Dev release to test removing a warning about modules not using the
     'eval $VERSION' syntax which causes lots of spew. (APEIRON)
 
-1.000010   2012-07-29 19:30:00
+1.000010 - 2012-07-29 19:30:00
   - Performance improvement: the creation of a Module::Metadata object
     for a typical module file has been sped up by about 40% (VPIT)
   - Fix t/metadata.t failure under Cygwin (JDHEDDEN)
   - Portability fix-ups for new_from_module() and test failures on VMS (CBERRY)
 
-1.000009   2012-02-08 12:00:00
+1.000009 - 2012-02-08 12:00:00
   - API of 'provides' changed to require a 'version' argument to future
     proof the function against CPAN Meta Spec changes (DAGOLDEN)
   - Fatal errors now use 'croak' instead of 'die'; Carp added as
     prerequisite (DAGOLDEN)
 
-1.000008   2012-02-07 22:30:00
+1.000008 - 2012-02-07 22:30:00
   - Adds 'provides' method to generate a CPAN META provides data structure
     correctly; use of package_versions_from_directory is discouraged (DAGOLDEN)
 
-1.000007   2011-09-07 12:00:00
+1.000007 - 2011-09-07 12:00:00
   - Apply VMS fixes backported from blead (Craig A. Berry)
 
-1.000006   2011-08-29 04:00:00
+1.000006 - 2011-08-29 04:00:00
   - Support PACKAGE BLOCK syntax (VPIT)
 
-1.000005   2011-08-02 09:45:00
+1.000005 - 2011-08-02 09:45:00
   - Localize $package::VERSION during version discovery (MIYAGAWA)
   - Fix references to Module::Build::ModuleInfo [RT #66133] (DAGOLDEN)
   - Added 'new_from_handle()' method [RT #68875] (DAGOLDEN)
   - Improved documentation (SYNOPSIS, broke out class/object method, and
     other minor edits) (DAGOLDEN)
 
-1.000004   2011-02-03 07:55:00
+1.000004 - 2011-02-03 07:55:00
   - Fix broken metadata.t when @INC has relative paths (JJORE)
 
-1.000003   2011-01-06 21:35:00
+1.000003 - 2011-01-06 21:35:00
   - Pod cleanup (DAGOLDEN)
 
-1.000002   2010-12-10 12:00:00
+1.000002 - 2010-12-10 12:00:00
   - Remove Module::Metadata::Version and depend directly on version.pm
     (DAGOLDEN)
   - Munge versions that fail even "lax" version number rules to try
     to return something sensible (DAGOLDEN)
 
-1.000001   2010-07-09 00:52:37
+1.000001 - 2010-07-09 00:52:37
   - fix build code to prevent Author.PL being mistakenly run during make
     and add some extra author-side tools (MSTROUT)
 
-1.000000   2010-07-07
+1.000000 - 2010-07-07
   - Initial release (MSTROUT)
   - Code extracted from Module::Build + Module::Build::Version (MSTROUT)
   - Tests extracted from Module::Build (DAGOLDEN)
@@ -0,0 +1,44 @@
+
+This is the Perl distribution Module-Metadata.
+
+Installing Module-Metadata is straightforward.
+
+## Installation with cpanm
+
+If you have cpanm, you only need one line:
+
+    % cpanm Module::Metadata
+
+If you are installing into a system-wide directory, you may need to pass the
+"-S" flag to cpanm, which uses sudo to install the module:
+
+    % cpanm -S Module::Metadata
+
+## Installing with the CPAN shell
+
+Alternatively, if your CPAN shell is set up, you should just be able to do:
+
+    % cpan Module::Metadata
+
+## Manual installation
+
+As a last resort, you can manually install it. Download the tarball, untar it,
+then build it:
+
+    % perl Makefile.PL
+    % make && make test
+
+Then install it:
+
+    % make install
+
+If you are installing into a system-wide directory, you may need to run:
+
+    % sudo make install
+
+## Documentation
+
+Module-Metadata documentation is available as POD.
+You can run perldoc from a shell to read the documentation:
+
+    % perldoc Module::Metadata
@@ -0,0 +1,379 @@
+This software is copyright (c) 2010 by Perl Toolchain Gang.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+   Software Foundation; either version 1, or (at your option) any
+   later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 2010 by Perl Toolchain Gang.
+
+This is free software, licensed under:
+
+  The GNU General Public License, Version 1, February 1989
+
+                    GNU GENERAL PUBLIC LICENSE
+                     Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The license agreements of most software companies try to keep users
+at the mercy of those companies.  By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must tell them their rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License.  The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications.  Each
+licensee is addressed as "you".
+
+  1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program.  You may charge a fee for the physical act of
+transferring a copy.
+
+  2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+    a) cause the modified files to carry prominent notices stating that
+    you changed the files and the date of any change; and
+
+    b) cause the whole of any work that you distribute or publish, that
+    in whole or in part contains the Program or any part thereof, either
+    with or without modifications, to be licensed at no charge to all
+    third parties under the terms of this General Public License (except
+    that you may choose to grant warranty protection to some or all
+    third parties, at your option).
+
+    c) If the modified program normally reads commands interactively when
+    run, you must cause it, when started running for such interactive use
+    in the simplest and most usual way, to print or display an
+    announcement including an appropriate copyright notice and a notice
+    that there is no warranty (or else, saying that you provide a
+    warranty) and that users may redistribute the program under these
+    conditions, and telling the user how to view a copy of this General
+    Public License.
+
+    d) You may charge a fee for the physical act of transferring a
+    copy, and you may at your option offer warranty protection in
+    exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+  3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+    a) accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of
+    Paragraphs 1 and 2 above; or,
+
+    b) accompany it with a written offer, valid for at least three
+    years, to give any third party free (except for a nominal charge
+    for the cost of distribution) a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of
+    Paragraphs 1 and 2 above; or,
+
+    c) accompany it with the information you received as to where the
+    corresponding source code may be obtained.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it.  For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+  4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License.  However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+  5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions.  You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+  7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+  8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+        Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+  To do so, attach the following notices to the program.  It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 1, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19xx name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  program `Gnomovision' (a program to direct compilers to make passes
+  at assemblers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 2010 by Perl Toolchain Gang.
+
+This is free software, licensed under:
+
+  The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+  - "Package" refers to the collection of files distributed by the Copyright
+    Holder, and derivatives of that collection of files created through
+    textual modification. 
+  - "Standard Version" refers to such a Package if it has not been modified,
+    or has been modified in accordance with the wishes of the Copyright
+    Holder. 
+  - "Copyright Holder" is whoever is named in the copyright or copyrights for
+    the package. 
+  - "You" is you, if you're thinking about copying or distributing this Package.
+  - "Reasonable copying fee" is whatever you can justify on the basis of media
+    cost, duplication charges, time of people involved, and so on. (You will
+    not be required to justify it to the Copyright Holder, but only to the
+    computing community at large as a market that must bear the fee.) 
+  - "Freely Available" means that no fee is charged for the item itself, though
+    there may be fees involved in handling the item. It also means that
+    recipients of the item may redistribute it under the same conditions they
+    received it. 
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+  a) place your modifications in the Public Domain or otherwise make them
+     Freely Available, such as by posting said modifications to Usenet or an
+     equivalent medium, or placing the modifications on a major archive site
+     such as ftp.uu.net, or by allowing the Copyright Holder to include your
+     modifications in the Standard Version of the Package.
+
+  b) use the modified Package only within your corporation or organization.
+
+  c) rename any non-standard executables so the names do not conflict with
+     standard executables, which must also be provided, and provide a separate
+     manual page for each non-standard executable that clearly documents how it
+     differs from the Standard Version.
+
+  d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+  a) distribute a Standard Version of the executables and library files,
+     together with instructions (in the manual page or equivalent) on where to
+     get the Standard Version.
+
+  b) accompany the distribution with the machine-readable source of the Package
+     with your modifications.
+
+  c) accompany any non-standard executables with their corresponding Standard
+     Version executables, giving the non-standard executables non-standard
+     names, and clearly documenting the differences in manual pages (or
+     equivalent), together with instructions on where to get the Standard
+     Version.
+
+  d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
@@ -1,26 +1,39 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.019.
+CONTRIBUTING
 Changes
-lib/Module/Metadata.pm
-maint/bump-version
-maint/Makefile.include
-maint/Makefile.PL.include
+INSTALL
+LICENSE
+MANIFEST
+META.json
+META.yml
 Makefile.PL
-MANIFEST			This list of files
+README
+README.md
+corpus/BOMTest/UTF16BE.pm
+corpus/BOMTest/UTF16LE.pm
+corpus/BOMTest/UTF8.pm
+dist.ini
+lib/Module/Metadata.pm
+t/00-report-prereqs.t
 t/contains_pod.t
 t/encoding.t
 t/endpod.t
 t/lib/0_1/Foo.pm
 t/lib/0_2/Foo.pm
-t/lib/BOMTest/UTF16BE.pm
-t/lib/BOMTest/UTF16LE.pm
-t/lib/BOMTest/UTF8.pm
-t/lib/DistGen.pm
 t/lib/ENDPOD.pm
-t/lib/MBTest.pm
-t/lib/Tie/CPHash.pm
 t/metadata.t
 t/taint.t
 t/version.t
-xt/pod.t
-META.yml                                 Module YAML meta-data (added by MakeMaker)
-META.json                                Module JSON meta-data (added by MakeMaker)
-README                                   README file (added by Distar)
+xt/author/00-compile.t
+xt/release/changes_has_content.t
+xt/release/cpan-changes.t
+xt/release/distmeta.t
+xt/release/eol.t
+xt/release/kwalitee.t
+xt/release/minimum-version.t
+xt/release/mojibake.t
+xt/release/no-tabs.t
+xt/release/pod-coverage.t
+xt/release/pod-no404s.t
+xt/release/pod-syntax.t
+xt/release/portability.t
@@ -1,10 +1,11 @@
 {
    "abstract" : "Gather package and POD information from perl module files",
    "author" : [
-      "Ken Williams <kwilliams@cpan.org>, Randy W. Sims <RandyS@ThePierianSpring.org>"
+      "Ken Williams <kwilliams@cpan.org>",
+      "Randy W. Sims <RandyS@ThePierianSpring.org>"
    ],
-   "dynamic_config" : 0,
-   "generated_by" : "ExtUtils::MakeMaker version 6.78, CPAN::Meta::Converter version 2.132620",
+   "dynamic_config" : 1,
+   "generated_by" : "Dist::Zilla version 5.019, CPAN::Meta::Converter version 2.141520",
    "license" : [
       "perl_5"
    ],
@@ -16,56 +17,760 @@
    "no_index" : {
       "directory" : [
          "t",
-         "inc"
+         "xt",
+         "corpus"
       ]
    },
    "prereqs" : {
-      "build" : {
+      "configure" : {
          "requires" : {
-            "ExtUtils::MakeMaker" : "0"
+            "ExtUtils::MakeMaker" : "6.30"
+         }
+      },
+      "develop" : {
+         "recommends" : {
+            "Dist::Zilla::PluginBundle::Author::ETHER" : "0.064"
+         },
+         "requires" : {
+            "Dist::Zilla" : "5",
+            "Dist::Zilla::Plugin::ContributorsFromGit" : "0",
+            "Dist::Zilla::Plugin::DynamicPrereqs" : "0",
+            "Dist::Zilla::Plugin::Encoding" : "0",
+            "Dist::Zilla::Plugin::GitHub::Update" : "0",
+            "Dist::Zilla::Plugin::GithubMeta" : "0",
+            "Dist::Zilla::Plugin::MakeMaker" : "0",
+            "Dist::Zilla::Plugin::MetaResources" : "0",
+            "Dist::Zilla::Plugin::OnlyCorePrereqs" : "0",
+            "Dist::Zilla::Plugin::Prereqs" : "0",
+            "Dist::Zilla::PluginBundle::Author::ETHER" : "0.064",
+            "File::Spec" : "0",
+            "IO::Handle" : "0",
+            "IPC::Open3" : "0",
+            "Pod::Coverage::TrustPod" : "0",
+            "Test::Builder" : "0.90",
+            "Test::CPAN::Changes" : "0.19",
+            "Test::CPAN::Meta" : "0",
+            "Test::Kwalitee" : "1.12",
+            "Test::More" : "0.94",
+            "Test::NoTabs" : "0",
+            "Test::Pod" : "1.41",
+            "Test::Pod::Coverage" : "1.08"
          }
       },
       "runtime" : {
          "requires" : {
             "Carp" : "0",
+            "Fcntl" : "0",
             "File::Find" : "0",
             "File::Spec" : "0",
-            "IO::File" : "0",
             "perl" : "5.006",
             "strict" : "0",
-            "vars" : "0",
             "version" : "0.87",
             "warnings" : "0"
          }
       },
       "test" : {
+         "recommends" : {
+            "CPAN::Meta" : "0",
+            "CPAN::Meta::Requirements" : "2.120900"
+         },
          "requires" : {
-            "Carp" : "0",
-            "Config" : "0",
             "Cwd" : "0",
             "Data::Dumper" : "0",
-            "Exporter" : "0",
+            "ExtUtils::MakeMaker" : "0",
             "File::Basename" : "0",
-            "File::Find" : "0",
             "File::Path" : "0",
-            "File::Spec" : "0",
+            "File::Spec::Functions" : "0",
             "File::Temp" : "0",
             "IO::File" : "0",
-            "Test::More" : "0"
+            "List::Util" : "0",
+            "Test::More" : "0.82",
+            "lib" : "0"
          }
       }
    },
+   "provides" : {
+      "Module::Metadata" : {
+         "file" : "lib/Module/Metadata.pm",
+         "version" : "1.000024"
+      }
+   },
    "release_status" : "stable",
    "resources" : {
       "bugtracker" : {
          "mailto" : "bug-Module-Metadata@rt.cpan.org",
          "web" : "https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Metadata"
       },
+      "homepage" : "https://github.com/Perl-Toolchain-Gang/Module-Metadata",
       "repository" : {
          "type" : "git",
-         "url" : "git://git.shadowcat.co.uk/p5sagit/Module-Metadata.git",
-         "web" : "http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit/Module-Metadata.git"
+         "url" : "https://github.com/Perl-Toolchain-Gang/Module-Metadata.git",
+         "web" : "https://github.com/Perl-Toolchain-Gang/Module-Metadata"
+      },
+      "x_IRC" : "irc://irc.perl.org/#toolchain",
+      "x_MailingList" : "http://lists.perl.org/list/cpan-workers.html"
+   },
+   "version" : "1.000024",
+   "x_Dist_Zilla" : {
+      "perl" : {
+         "version" : "5.020000"
+      },
+      "plugins" : [
+         {
+            "class" : "Dist::Zilla::Plugin::Git::NextVersion",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::NextVersion" : {
+                  "first_version" : "0.001",
+                  "version_by_branch" : "0",
+                  "version_regexp" : "(?^:^v([\\d._]+)(-TRIAL)?$)"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/Git::NextVersion",
+            "version" : "2.022"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::EnsurePrereqsInstalled",
+            "name" : "@Author::ETHER/EnsurePrereqsInstalled",
+            "version" : "0.002"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PromptIfStale",
+            "config" : {
+               "Dist::Zilla::Plugin::PromptIfStale" : {
+                  "check_all_plugins" : 0,
+                  "check_all_prereqs" : 0,
+                  "modules" : [
+                     "Dist::Zilla::PluginBundle::Author::ETHER"
+                  ],
+                  "phase" : "build",
+                  "skip" : []
+               }
+            },
+            "name" : "@Author::ETHER/build",
+            "version" : "0.023"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PromptIfStale",
+            "config" : {
+               "Dist::Zilla::Plugin::PromptIfStale" : {
+                  "check_all_plugins" : "1",
+                  "check_all_prereqs" : "1",
+                  "modules" : [],
+                  "phase" : "release",
+                  "skip" : []
+               }
+            },
+            "name" : "@Author::ETHER/release",
+            "version" : "0.023"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::ExecDir",
+            "name" : "@Author::ETHER/ExecDir",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::ShareDir",
+            "name" : "@Author::ETHER/ShareDir",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FileFinder::ByName",
+            "name" : "@Author::ETHER/Examples",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FileFinder::ByName",
+            "name" : "@Author::ETHER/ExtraTestFiles",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::GatherDir",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::GatherDir" : {
+                  "include_untracked" : "0"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/Git::GatherDir",
+            "version" : "2.022"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MetaYAML",
+            "name" : "@Author::ETHER/MetaYAML",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MetaJSON",
+            "name" : "@Author::ETHER/MetaJSON",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::License",
+            "name" : "@Author::ETHER/License",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Readme",
+            "name" : "@Author::ETHER/Readme",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Manifest",
+            "name" : "@Author::ETHER/Manifest",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::GenerateFile::ShareDir",
+            "config" : {
+               "Dist::Zilla::Plugin::GenerateFile::ShareDir" : {
+                  "destination_filename" : "CONTRIBUTING",
+                  "dist" : "Dist-Zilla-PluginBundle-Author-ETHER",
+                  "encoding" : "UTF-8",
+                  "source_filename" : "CONTRIBUTING"
+               }
+            },
+            "name" : "@Author::ETHER/generate CONTRIBUTING",
+            "version" : "0.005"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::Compile",
+            "config" : {
+               "Dist::Zilla::Plugin::Test::Compile" : {
+                  "filename" : "xt/author/00-compile.t",
+                  "module_finder" : [
+                     ":InstallModules"
+                  ],
+                  "script_finder" : [
+                     ":ExecFiles",
+                     "@Author::ETHER/Examples"
+                  ]
+               }
+            },
+            "name" : "@Author::ETHER/Test::Compile",
+            "version" : "2.041"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::NoTabs",
+            "config" : {
+               "Dist::Zilla::Plugin::Test::NoTabs" : {
+                  "finder" : [
+                     ":InstallModules",
+                     ":ExecFiles",
+                     "@Author::ETHER/Examples",
+                     ":TestFiles",
+                     "@Author::ETHER/ExtraTestFiles"
+                  ]
+               }
+            },
+            "name" : "@Author::ETHER/Test::NoTabs",
+            "version" : "0.08"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::EOLTests",
+            "name" : "@Author::ETHER/EOLTests",
+            "version" : "0.02"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MetaTests",
+            "name" : "@Author::ETHER/MetaTests",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::CPAN::Changes",
+            "name" : "@Author::ETHER/Test::CPAN::Changes",
+            "version" : "0.008"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
+            "name" : "@Author::ETHER/Test::ChangesHasContent",
+            "version" : "0.006"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::MinimumVersion",
+            "name" : "@Author::ETHER/Test::MinimumVersion",
+            "version" : "2.000005"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
+            "name" : "@Author::ETHER/PodSyntaxTests",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PodCoverageTests",
+            "name" : "@Author::ETHER/PodCoverageTests",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::Pod::No404s",
+            "name" : "@Author::ETHER/Test::Pod::No404s",
+            "version" : "1.001"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::Kwalitee",
+            "name" : "@Author::ETHER/Test::Kwalitee",
+            "version" : "2.07"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MojibakeTests",
+            "name" : "@Author::ETHER/MojibakeTests",
+            "version" : "0.5"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
+            "name" : "@Author::ETHER/Test::ReportPrereqs",
+            "version" : "0.013"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::Portability",
+            "name" : "@Author::ETHER/Test::Portability",
+            "version" : "2.000005"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Describe",
+            "name" : "@Author::ETHER/Git::Describe",
+            "version" : "0.003"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PkgVersion",
+            "name" : "@Author::ETHER/PkgVersion",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Authority",
+            "name" : "@Author::ETHER/Authority",
+            "version" : "1.006"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::NextRelease",
+            "name" : "@Author::ETHER/NextRelease",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::ReadmeAnyFromPod",
+            "name" : "@Author::ETHER/ReadmeAnyFromPod",
+            "version" : "0.141120"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::GithubMeta",
+            "name" : "@Author::ETHER/GithubMeta",
+            "version" : "0.46"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::AutoMetaResources",
+            "name" : "@Author::ETHER/AutoMetaResources",
+            "version" : "1.20"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MetaNoIndex",
+            "name" : "@Author::ETHER/MetaNoIndex",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MetaProvides::Package",
+            "config" : {
+               "Dist::Zilla::Plugin::MetaProvides::Package" : {
+                  "finder" : [
+                     ":InstallModules"
+                  ],
+                  "finder_objects" : [
+                     {
+                        "class" : "Dist::Zilla::Plugin::FinderCode",
+                        "name" : ":InstallModules",
+                        "version" : "5.019"
+                     }
+                  ]
+               },
+               "Dist::Zilla::Role::MetaProvider::Provider" : {
+                  "inherit_missing" : "1",
+                  "inherit_version" : "1",
+                  "meta_noindex" : "1"
+               }
+            },
+            "name" : "@Author::ETHER/MetaProvides::Package",
+            "version" : "2.000001"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MetaConfig",
+            "name" : "@Author::ETHER/MetaConfig",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Keywords",
+            "name" : "@Author::ETHER/Keywords",
+            "version" : "0.005"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::AutoPrereqs",
+            "name" : "@Author::ETHER/AutoPrereqs",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Prereqs::AuthorDeps",
+            "name" : "@Author::ETHER/Prereqs::AuthorDeps",
+            "version" : "0.003"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MinimumPerl",
+            "name" : "@Author::ETHER/MinimumPerl",
+            "version" : "1.003"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Prereqs",
+            "config" : {
+               "Dist::Zilla::Plugin::Prereqs" : {
+                  "phase" : "develop",
+                  "type" : "requires"
+               }
+            },
+            "name" : "@Author::ETHER/installer_requirements",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Prereqs",
+            "config" : {
+               "Dist::Zilla::Plugin::Prereqs" : {
+                  "phase" : "develop",
+                  "type" : "recommends"
+               }
+            },
+            "name" : "@Author::ETHER/pluginbundle_version",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::RunExtraTests",
+            "config" : {
+               "Dist::Zilla::Role::TestRunner" : {
+                  "default_jobs" : 9
+               }
+            },
+            "name" : "@Author::ETHER/RunExtraTests",
+            "version" : "0.021"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MakeMaker",
+            "config" : {
+               "Dist::Zilla::Role::TestRunner" : {
+                  "default_jobs" : 9
+               }
+            },
+            "name" : "@Author::ETHER/MakeMaker",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::InstallGuide",
+            "name" : "@Author::ETHER/InstallGuide",
+            "version" : "1.200003"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::CheckSelfDependency",
+            "config" : {
+               "Dist::Zilla::Plugin::CheckSelfDependency" : {
+                  "finder" : [
+                     ":InstallModules"
+                  ]
+               }
+            },
+            "name" : "@Author::ETHER/CheckSelfDependency",
+            "version" : "0.007"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Run::AfterBuild",
+            "name" : "@Author::ETHER/Run::AfterBuild",
+            "version" : "0.021"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::CheckStrictVersion",
+            "name" : "@Author::ETHER/CheckStrictVersion",
+            "version" : "0.001"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Check",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Check" : {
+                  "untracked_files" : "die"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/initial check",
+            "version" : "2.022"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts",
+            "config" : {
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/Git::CheckFor::MergeConflicts",
+            "version" : "0.011"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch",
+            "config" : {
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/Git::CheckFor::CorrectBranch",
+            "version" : "0.011"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Remote::Check",
+            "name" : "@Author::ETHER/Git::Remote::Check",
+            "version" : "0.2.0"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
+            "name" : "@Author::ETHER/CheckPrereqsIndexed",
+            "version" : "0.012"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::TestRelease",
+            "name" : "@Author::ETHER/TestRelease",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Check",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Check" : {
+                  "untracked_files" : "die"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/after tests",
+            "version" : "2.022"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::CheckIssues",
+            "name" : "@Author::ETHER/CheckIssues",
+            "version" : "0.002"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::UploadToCPAN",
+            "name" : "@Author::ETHER/UploadToCPAN",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::CopyFilesFromRelease",
+            "name" : "@Author::ETHER/CopyFilesFromRelease",
+            "version" : "0.001"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Commit",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Commit" : {
+                  "add_files_in" : [
+                     "."
+                  ],
+                  "commit_msg" : "%N-%v%t%n%n%c",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [
+                     "Changes",
+                     "README.md",
+                     "LICENSE",
+                     "CONTRIBUTING"
+                  ],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/Git::Commit",
+            "version" : "2.022"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Tag",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Tag" : {
+                  "branch" : null,
+                  "signed" : 0,
+                  "tag" : "v1.000024",
+                  "tag_format" : "v%v%t",
+                  "tag_message" : "v%v%t",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/Git::Tag",
+            "version" : "2.022"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::GitHub::Update",
+            "name" : "@Author::ETHER/GitHub::Update",
+            "version" : "0.36"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Push",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Push" : {
+                  "push_to" : [
+                     "origin"
+                  ],
+                  "remotes_must_exist" : 1
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
+            "name" : "@Author::ETHER/Git::Push",
+            "version" : "2.022"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::InstallRelease",
+            "name" : "@Author::ETHER/InstallRelease",
+            "version" : "0.008"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Prereqs",
+            "config" : {
+               "Dist::Zilla::Plugin::Prereqs" : {
+                  "phase" : "develop",
+                  "type" : "requires"
+               }
+            },
+            "name" : "@Author::ETHER/via_options",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::ConfirmRelease",
+            "name" : "@Author::ETHER/ConfirmRelease",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Encoding",
+            "name" : "Encoding",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MetaResources",
+            "name" : "MetaResources",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::OnlyCorePrereqs",
+            "name" : "OnlyCorePrereqs",
+            "version" : "0.013"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Prereqs",
+            "config" : {
+               "Dist::Zilla::Plugin::Prereqs" : {
+                  "phase" : "develop",
+                  "type" : "requires"
+               }
+            },
+            "name" : "DevelopRequires",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::DynamicPrereqs",
+            "name" : "DynamicPrereqs",
+            "version" : "0.004"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::ContributorsFromGit",
+            "name" : "ContributorsFromGit",
+            "version" : "0.013"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":InstallModules",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":IncModules",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":TestFiles",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":ExecFiles",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":ShareFiles",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":MainModule",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":AllFiles",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":NoFiles",
+            "version" : "5.019"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::VerifyPhases",
+            "name" : "@Author::ETHER/PHASE VERIFICATION",
+            "version" : "0.003"
+         }
+      ],
+      "zilla" : {
+         "class" : "Dist::Zilla::Dist::Builder",
+         "config" : {
+            "is_trial" : "0"
+         },
+         "version" : "5.019"
       }
    },
-   "version" : "1.000019"
+   "x_authority" : "cpan:MSTROUT",
+   "x_contributors" : [
+      "Chris 'BinGOs' Williams <chris@bingosnet.co.uk>",
+      "Chris Nehren <apeiron@cpan.org>",
+      "Craig A. Berry <cberry@cpan.org>",
+      "David Golden <dagolden@cpan.org>",
+      "David Steinbrunner <dsteinbrunner@pobox.com>",
+      "Edward Zborowski <ed@rubensteintech.com>",
+      "Gareth Harper <gareth@broadbean.com>",
+      "Graham Knop <haarg@haarg.org>",
+      "Jerry D. Hedden <jdhedden@cpan.org>",
+      "Josh Jore <jjore@cpan.org>",
+      "Karen Etheridge <ether@cpan.org>",
+      "Matt S Trout <mst@shadowcat.co.uk>",
+      "Olivier Mengué <dolmen@cpan.org>",
+      "Peter Rabbitson <ribasushi@cpan.org>",
+      "Tatsuhiko Miyagawa <miyagawa@bulknews.net>",
+      "Tomas Doran <bobtfish@bobtfish.net>",
+      "Vincent Pit <perl@profvince.com>",
+      "tokuhirom <tokuhirom@gmail.com>"
+   ]
 }
+
@@ -1,43 +1,557 @@
 ---
 abstract: 'Gather package and POD information from perl module files'
 author:
-  - 'Ken Williams <kwilliams@cpan.org>, Randy W. Sims <RandyS@ThePierianSpring.org>'
+  - 'Ken Williams <kwilliams@cpan.org>'
+  - 'Randy W. Sims <RandyS@ThePierianSpring.org>'
 build_requires:
-  Carp: 0
-  Config: 0
-  Cwd: 0
-  Data::Dumper: 0
-  Exporter: 0
-  ExtUtils::MakeMaker: 0
-  File::Basename: 0
-  File::Find: 0
-  File::Path: 0
-  File::Spec: 0
-  File::Temp: 0
-  IO::File: 0
-  Test::More: 0
-dynamic_config: 0
-generated_by: 'ExtUtils::MakeMaker version 6.78, CPAN::Meta::Converter version 2.132620'
+  Cwd: '0'
+  Data::Dumper: '0'
+  ExtUtils::MakeMaker: '0'
+  File::Basename: '0'
+  File::Path: '0'
+  File::Spec::Functions: '0'
+  File::Temp: '0'
+  IO::File: '0'
+  List::Util: '0'
+  Test::More: '0.82'
+  lib: '0'
+configure_requires:
+  ExtUtils::MakeMaker: '6.30'
+dynamic_config: 1
+generated_by: 'Dist::Zilla version 5.019, CPAN::Meta::Converter version 2.141520'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: 1.4
+  version: '1.4'
 name: Module-Metadata
 no_index:
   directory:
     - t
-    - inc
+    - xt
+    - corpus
+provides:
+  Module::Metadata:
+    file: lib/Module/Metadata.pm
+    version: '1.000024'
 requires:
-  Carp: 0
-  File::Find: 0
-  File::Spec: 0
-  IO::File: 0
-  perl: 5.006
-  strict: 0
-  vars: 0
-  version: 0.87
-  warnings: 0
+  Carp: '0'
+  Fcntl: '0'
+  File::Find: '0'
+  File::Spec: '0'
+  perl: '5.006'
+  strict: '0'
+  version: '0.87'
+  warnings: '0'
 resources:
+  IRC: irc://irc.perl.org/#toolchain
+  MailingList: http://lists.perl.org/list/cpan-workers.html
   bugtracker: https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Metadata
-  repository: git://git.shadowcat.co.uk/p5sagit/Module-Metadata.git
-version: 1.000019
+  homepage: https://github.com/Perl-Toolchain-Gang/Module-Metadata
+  repository: https://github.com/Perl-Toolchain-Gang/Module-Metadata.git
+version: '1.000024'
+x_Dist_Zilla:
+  perl:
+    version: '5.020000'
+  plugins:
+    -
+      class: Dist::Zilla::Plugin::Git::NextVersion
+      config:
+        Dist::Zilla::Plugin::Git::NextVersion:
+          first_version: '0.001'
+          version_by_branch: '0'
+          version_regexp: (?^:^v([\d._]+)(-TRIAL)?$)
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/Git::NextVersion'
+      version: '2.022'
+    -
+      class: Dist::Zilla::Plugin::EnsurePrereqsInstalled
+      name: '@Author::ETHER/EnsurePrereqsInstalled'
+      version: '0.002'
+    -
+      class: Dist::Zilla::Plugin::PromptIfStale
+      config:
+        Dist::Zilla::Plugin::PromptIfStale:
+          check_all_plugins: 0
+          check_all_prereqs: 0
+          modules:
+            - Dist::Zilla::PluginBundle::Author::ETHER
+          phase: build
+          skip: []
+      name: '@Author::ETHER/build'
+      version: '0.023'
+    -
+      class: Dist::Zilla::Plugin::PromptIfStale
+      config:
+        Dist::Zilla::Plugin::PromptIfStale:
+          check_all_plugins: '1'
+          check_all_prereqs: '1'
+          modules: []
+          phase: release
+          skip: []
+      name: '@Author::ETHER/release'
+      version: '0.023'
+    -
+      class: Dist::Zilla::Plugin::ExecDir
+      name: '@Author::ETHER/ExecDir'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::ShareDir
+      name: '@Author::ETHER/ShareDir'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FileFinder::ByName
+      name: '@Author::ETHER/Examples'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FileFinder::ByName
+      name: '@Author::ETHER/ExtraTestFiles'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Git::GatherDir
+      config:
+        Dist::Zilla::Plugin::Git::GatherDir:
+          include_untracked: '0'
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/Git::GatherDir'
+      version: '2.022'
+    -
+      class: Dist::Zilla::Plugin::MetaYAML
+      name: '@Author::ETHER/MetaYAML'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::MetaJSON
+      name: '@Author::ETHER/MetaJSON'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::License
+      name: '@Author::ETHER/License'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Readme
+      name: '@Author::ETHER/Readme'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Manifest
+      name: '@Author::ETHER/Manifest'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::GenerateFile::ShareDir
+      config:
+        Dist::Zilla::Plugin::GenerateFile::ShareDir:
+          destination_filename: CONTRIBUTING
+          dist: Dist-Zilla-PluginBundle-Author-ETHER
+          encoding: UTF-8
+          source_filename: CONTRIBUTING
+      name: '@Author::ETHER/generate CONTRIBUTING'
+      version: '0.005'
+    -
+      class: Dist::Zilla::Plugin::Test::Compile
+      config:
+        Dist::Zilla::Plugin::Test::Compile:
+          filename: xt/author/00-compile.t
+          module_finder:
+            - ':InstallModules'
+          script_finder:
+            - ':ExecFiles'
+            - '@Author::ETHER/Examples'
+      name: '@Author::ETHER/Test::Compile'
+      version: '2.041'
+    -
+      class: Dist::Zilla::Plugin::Test::NoTabs
+      config:
+        Dist::Zilla::Plugin::Test::NoTabs:
+          finder:
+            - ':InstallModules'
+            - ':ExecFiles'
+            - '@Author::ETHER/Examples'
+            - ':TestFiles'
+            - '@Author::ETHER/ExtraTestFiles'
+      name: '@Author::ETHER/Test::NoTabs'
+      version: '0.08'
+    -
+      class: Dist::Zilla::Plugin::EOLTests
+      name: '@Author::ETHER/EOLTests'
+      version: '0.02'
+    -
+      class: Dist::Zilla::Plugin::MetaTests
+      name: '@Author::ETHER/MetaTests'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Test::CPAN::Changes
+      name: '@Author::ETHER/Test::CPAN::Changes'
+      version: '0.008'
+    -
+      class: Dist::Zilla::Plugin::Test::ChangesHasContent
+      name: '@Author::ETHER/Test::ChangesHasContent'
+      version: '0.006'
+    -
+      class: Dist::Zilla::Plugin::Test::MinimumVersion
+      name: '@Author::ETHER/Test::MinimumVersion'
+      version: '2.000005'
+    -
+      class: Dist::Zilla::Plugin::PodSyntaxTests
+      name: '@Author::ETHER/PodSyntaxTests'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::PodCoverageTests
+      name: '@Author::ETHER/PodCoverageTests'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Test::Pod::No404s
+      name: '@Author::ETHER/Test::Pod::No404s'
+      version: '1.001'
+    -
+      class: Dist::Zilla::Plugin::Test::Kwalitee
+      name: '@Author::ETHER/Test::Kwalitee'
+      version: '2.07'
+    -
+      class: Dist::Zilla::Plugin::MojibakeTests
+      name: '@Author::ETHER/MojibakeTests'
+      version: '0.5'
+    -
+      class: Dist::Zilla::Plugin::Test::ReportPrereqs
+      name: '@Author::ETHER/Test::ReportPrereqs'
+      version: '0.013'
+    -
+      class: Dist::Zilla::Plugin::Test::Portability
+      name: '@Author::ETHER/Test::Portability'
+      version: '2.000005'
+    -
+      class: Dist::Zilla::Plugin::Git::Describe
+      name: '@Author::ETHER/Git::Describe'
+      version: '0.003'
+    -
+      class: Dist::Zilla::Plugin::PkgVersion
+      name: '@Author::ETHER/PkgVersion'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Authority
+      name: '@Author::ETHER/Authority'
+      version: '1.006'
+    -
+      class: Dist::Zilla::Plugin::NextRelease
+      name: '@Author::ETHER/NextRelease'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::ReadmeAnyFromPod
+      name: '@Author::ETHER/ReadmeAnyFromPod'
+      version: '0.141120'
+    -
+      class: Dist::Zilla::Plugin::GithubMeta
+      name: '@Author::ETHER/GithubMeta'
+      version: '0.46'
+    -
+      class: Dist::Zilla::Plugin::AutoMetaResources
+      name: '@Author::ETHER/AutoMetaResources'
+      version: '1.20'
+    -
+      class: Dist::Zilla::Plugin::MetaNoIndex
+      name: '@Author::ETHER/MetaNoIndex'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::MetaProvides::Package
+      config:
+        Dist::Zilla::Plugin::MetaProvides::Package:
+          finder:
+            - ':InstallModules'
+          finder_objects:
+            -
+              class: Dist::Zilla::Plugin::FinderCode
+              name: ':InstallModules'
+              version: '5.019'
+        Dist::Zilla::Role::MetaProvider::Provider:
+          inherit_missing: '1'
+          inherit_version: '1'
+          meta_noindex: '1'
+      name: '@Author::ETHER/MetaProvides::Package'
+      version: '2.000001'
+    -
+      class: Dist::Zilla::Plugin::MetaConfig
+      name: '@Author::ETHER/MetaConfig'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Keywords
+      name: '@Author::ETHER/Keywords'
+      version: '0.005'
+    -
+      class: Dist::Zilla::Plugin::AutoPrereqs
+      name: '@Author::ETHER/AutoPrereqs'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Prereqs::AuthorDeps
+      name: '@Author::ETHER/Prereqs::AuthorDeps'
+      version: '0.003'
+    -
+      class: Dist::Zilla::Plugin::MinimumPerl
+      name: '@Author::ETHER/MinimumPerl'
+      version: '1.003'
+    -
+      class: Dist::Zilla::Plugin::Prereqs
+      config:
+        Dist::Zilla::Plugin::Prereqs:
+          phase: develop
+          type: requires
+      name: '@Author::ETHER/installer_requirements'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Prereqs
+      config:
+        Dist::Zilla::Plugin::Prereqs:
+          phase: develop
+          type: recommends
+      name: '@Author::ETHER/pluginbundle_version'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::RunExtraTests
+      config:
+        Dist::Zilla::Role::TestRunner:
+          default_jobs: 9
+      name: '@Author::ETHER/RunExtraTests'
+      version: '0.021'
+    -
+      class: Dist::Zilla::Plugin::MakeMaker
+      config:
+        Dist::Zilla::Role::TestRunner:
+          default_jobs: 9
+      name: '@Author::ETHER/MakeMaker'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::InstallGuide
+      name: '@Author::ETHER/InstallGuide'
+      version: '1.200003'
+    -
+      class: Dist::Zilla::Plugin::CheckSelfDependency
+      config:
+        Dist::Zilla::Plugin::CheckSelfDependency:
+          finder:
+            - ':InstallModules'
+      name: '@Author::ETHER/CheckSelfDependency'
+      version: '0.007'
+    -
+      class: Dist::Zilla::Plugin::Run::AfterBuild
+      name: '@Author::ETHER/Run::AfterBuild'
+      version: '0.021'
+    -
+      class: Dist::Zilla::Plugin::CheckStrictVersion
+      name: '@Author::ETHER/CheckStrictVersion'
+      version: '0.001'
+    -
+      class: Dist::Zilla::Plugin::Git::Check
+      config:
+        Dist::Zilla::Plugin::Git::Check:
+          untracked_files: die
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty: []
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/initial check'
+      version: '2.022'
+    -
+      class: Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts
+      config:
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/Git::CheckFor::MergeConflicts'
+      version: '0.011'
+    -
+      class: Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch
+      config:
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/Git::CheckFor::CorrectBranch'
+      version: '0.011'
+    -
+      class: Dist::Zilla::Plugin::Git::Remote::Check
+      name: '@Author::ETHER/Git::Remote::Check'
+      version: 0.2.0
+    -
+      class: Dist::Zilla::Plugin::CheckPrereqsIndexed
+      name: '@Author::ETHER/CheckPrereqsIndexed'
+      version: '0.012'
+    -
+      class: Dist::Zilla::Plugin::TestRelease
+      name: '@Author::ETHER/TestRelease'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Git::Check
+      config:
+        Dist::Zilla::Plugin::Git::Check:
+          untracked_files: die
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty: []
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/after tests'
+      version: '2.022'
+    -
+      class: Dist::Zilla::Plugin::CheckIssues
+      name: '@Author::ETHER/CheckIssues'
+      version: '0.002'
+    -
+      class: Dist::Zilla::Plugin::UploadToCPAN
+      name: '@Author::ETHER/UploadToCPAN'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::CopyFilesFromRelease
+      name: '@Author::ETHER/CopyFilesFromRelease'
+      version: '0.001'
+    -
+      class: Dist::Zilla::Plugin::Git::Commit
+      config:
+        Dist::Zilla::Plugin::Git::Commit:
+          add_files_in:
+            - .
+          commit_msg: '%N-%v%t%n%n%c'
+          time_zone: local
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty:
+            - Changes
+            - README.md
+            - LICENSE
+            - CONTRIBUTING
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/Git::Commit'
+      version: '2.022'
+    -
+      class: Dist::Zilla::Plugin::Git::Tag
+      config:
+        Dist::Zilla::Plugin::Git::Tag:
+          branch: ~
+          signed: 0
+          tag: v1.000024
+          tag_format: v%v%t
+          tag_message: v%v%t
+          time_zone: local
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/Git::Tag'
+      version: '2.022'
+    -
+      class: Dist::Zilla::Plugin::GitHub::Update
+      name: '@Author::ETHER/GitHub::Update'
+      version: '0.36'
+    -
+      class: Dist::Zilla::Plugin::Git::Push
+      config:
+        Dist::Zilla::Plugin::Git::Push:
+          push_to:
+            - origin
+          remotes_must_exist: 1
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
+      name: '@Author::ETHER/Git::Push'
+      version: '2.022'
+    -
+      class: Dist::Zilla::Plugin::InstallRelease
+      name: '@Author::ETHER/InstallRelease'
+      version: '0.008'
+    -
+      class: Dist::Zilla::Plugin::Prereqs
+      config:
+        Dist::Zilla::Plugin::Prereqs:
+          phase: develop
+          type: requires
+      name: '@Author::ETHER/via_options'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::ConfirmRelease
+      name: '@Author::ETHER/ConfirmRelease'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::Encoding
+      name: Encoding
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::MetaResources
+      name: MetaResources
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::OnlyCorePrereqs
+      name: OnlyCorePrereqs
+      version: '0.013'
+    -
+      class: Dist::Zilla::Plugin::Prereqs
+      config:
+        Dist::Zilla::Plugin::Prereqs:
+          phase: develop
+          type: requires
+      name: DevelopRequires
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::DynamicPrereqs
+      name: DynamicPrereqs
+      version: '0.004'
+    -
+      class: Dist::Zilla::Plugin::ContributorsFromGit
+      name: ContributorsFromGit
+      version: '0.013'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':InstallModules'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':IncModules'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':TestFiles'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':ExecFiles'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':ShareFiles'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':MainModule'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':AllFiles'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':NoFiles'
+      version: '5.019'
+    -
+      class: Dist::Zilla::Plugin::VerifyPhases
+      name: '@Author::ETHER/PHASE VERIFICATION'
+      version: '0.003'
+  zilla:
+    class: Dist::Zilla::Dist::Builder
+    config:
+      is_trial: '0'
+    version: '5.019'
+x_authority: cpan:MSTROUT
+x_contributors:
+  - "Chris 'BinGOs' Williams <chris@bingosnet.co.uk>"
+  - 'Chris Nehren <apeiron@cpan.org>'
+  - 'Craig A. Berry <cberry@cpan.org>'
+  - 'David Golden <dagolden@cpan.org>'
+  - 'David Steinbrunner <dsteinbrunner@pobox.com>'
+  - 'Edward Zborowski <ed@rubensteintech.com>'
+  - 'Gareth Harper <gareth@broadbean.com>'
+  - 'Graham Knop <haarg@haarg.org>'
+  - 'Jerry D. Hedden <jdhedden@cpan.org>'
+  - 'Josh Jore <jjore@cpan.org>'
+  - 'Karen Etheridge <ether@cpan.org>'
+  - 'Matt S Trout <mst@shadowcat.co.uk>'
+  - 'Olivier Mengué <dolmen@cpan.org>'
+  - 'Peter Rabbitson <ribasushi@cpan.org>'
+  - 'Tatsuhiko Miyagawa <miyagawa@bulknews.net>'
+  - 'Tomas Doran <bobtfish@bobtfish.net>'
+  - 'Vincent Pit <perl@profvince.com>'
+  - 'tokuhirom <tokuhirom@gmail.com>'
@@ -1,66 +1,88 @@
+
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.019.
 use strict;
-use warnings FATAL => 'all';
-use ExtUtils::MakeMaker;
+use warnings;
+
 use 5.006;
 
-# TODO: convert to dzil and use [OnlyCorePrereqs], and possibly [DualLife]
-
-(do 'maint/Makefile.PL.include' or die $@) unless -f 'META.yml';
-
-WriteMakefile(
-  NAME => 'Module::Metadata',
-  VERSION_FROM => 'lib/Module/Metadata.pm',
-  ABSTRACT_FROM => 'lib/Module/Metadata.pm',
-  LICENSE => 'perl',
-  MIN_PERL_VERSION => '5.006',
-  PREREQ_PM => {
-    'Carp'        => 0,
-    'File::Find'  => 0,
-    'File::Spec'  => 0,
-    'IO::File'    => 0,
-    'strict'      => 0,
-    'warnings'    => 0,
-    'vars'        => 0,
-    'version'     => 0.87,
-    'warnings'    => 0,
-    $] < 5.008
-      ? ( 'IO::Scalar' => 0 )
-      : ()
-    ,
+use ExtUtils::MakeMaker 6.30;
+
+
+
+my %WriteMakefileArgs = (
+  "ABSTRACT" => "Gather package and POD information from perl module files",
+  "AUTHOR" => "Ken Williams <kwilliams\@cpan.org>, Randy W. Sims <RandyS\@ThePierianSpring.org>",
+  "CONFIGURE_REQUIRES" => {
+    "ExtUtils::MakeMaker" => "6.30"
   },
-  -f 'META.yml' ? () : (
-  META_MERGE => {
-    'meta-spec' => { version => 2 },
-    dynamic_config => 0,
-    resources => {
-      # r/w: p5sagit@git.shadowcat.co.uk:Module-Metadata.git
-      repository => {
-        url => 'git://git.shadowcat.co.uk/p5sagit/Module-Metadata.git',
-        web => 'http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit/Module-Metadata.git',
-        type => 'git',
-      },
-      bugtracker => {
-          mailto => 'bug-Module-Metadata@rt.cpan.org',
-          web => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Metadata',
-      },
-    },
-    prereqs => {
-      test => {
-        requires => {
-          'Test::More' => 0,
-          'Carp' => 0,
-          'Config' => 0,
-          'Cwd' => 0,
-          'Data::Dumper' => 0,
-          'Exporter' => 0,
-          'File::Basename' => 0,
-          'File::Find' => 0,
-          'File::Path' => 0,
-          'File::Spec' => 0,
-          'File::Temp' => 0,
-          'IO::File' => 0,
-        },
-      },
-    },
-  } ),
+  "DISTNAME" => "Module-Metadata",
+  "EXE_FILES" => [],
+  "LICENSE" => "perl",
+  "NAME" => "Module::Metadata",
+  "PREREQ_PM" => {
+    "Carp" => 0,
+    "Fcntl" => 0,
+    "File::Find" => 0,
+    "File::Spec" => 0,
+    "strict" => 0,
+    "version" => "0.87",
+    "warnings" => 0
+  },
+  "TEST_REQUIRES" => {
+    "Cwd" => 0,
+    "Data::Dumper" => 0,
+    "ExtUtils::MakeMaker" => 0,
+    "File::Basename" => 0,
+    "File::Path" => 0,
+    "File::Spec::Functions" => 0,
+    "File::Temp" => 0,
+    "IO::File" => 0,
+    "List::Util" => 0,
+    "Test::More" => "0.82",
+    "lib" => 0
+  },
+  "VERSION" => "1.000024",
+  "test" => {
+    "TESTS" => "t/*.t"
+  }
+);
+
+
+my %FallbackPrereqs = (
+  "Carp" => 0,
+  "Cwd" => 0,
+  "Data::Dumper" => 0,
+  "ExtUtils::MakeMaker" => 0,
+  "Fcntl" => 0,
+  "File::Basename" => 0,
+  "File::Find" => 0,
+  "File::Path" => 0,
+  "File::Spec" => 0,
+  "File::Spec::Functions" => 0,
+  "File::Temp" => 0,
+  "IO::File" => 0,
+  "List::Util" => 0,
+  "Test::More" => "0.82",
+  "lib" => 0,
+  "strict" => 0,
+  "version" => "0.87",
+  "warnings" => 0
 );
+
+$WriteMakefileArgs{PREREQ_PM}{'IO::Scalar'} = $FallbackPrereqs{'IO::Scalar'} = 0
+if $] < 5.008;
+
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+  delete $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{BUILD_REQUIRES};
+  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
+}
+
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+  unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+
+WriteMakefile(%WriteMakefileArgs);
+
+
@@ -1,191 +1,15 @@
-NAME
-    Module::Metadata - Gather package and POD information from perl module
-    files
 
-SYNOPSIS
-      use Module::Metadata;
 
-      # information about a .pm file
-      my $info = Module::Metadata->new_from_file( $file );
-      my $version = $info->version;
+This archive contains the distribution Module-Metadata,
+version 1.000024:
 
-      # CPAN META 'provides' field for .pm files in a directory
-      my $provides = Module::Metadata->provides(
-        dir => 'lib', version => 2
-      );
+  Gather package and POD information from perl module files
 
-DESCRIPTION
-    This module provides a standard way to gather metadata about a .pm file
-    through (mostly) static analysis and (some) code execution. When
-    determining the version of a module, the $VERSION assignment is
-    "eval"ed, as is traditional in the CPAN toolchain.
+This software is copyright (c) 2010 by Perl Toolchain Gang.
 
-USAGE
-  Class methods
-    "new_from_file($filename, collect_pod => 1)"
-        Constructs a "Module::Metadata" object given the path to a file.
-        Returns undef if the filename does not exist.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
-        "collect_pod" is a optional boolean argument that determines whether
-        POD data is collected and stored for reference. POD data is not
-        collected by default. POD headings are always collected.
 
-        If the file begins by an UTF-8, UTF-16BE or UTF-16LE byte-order
-        mark, then it is skipped before processing, and the content of the
-        file is also decoded appropriately starting from perl 5.8.
-
-    "new_from_handle($handle, $filename, collect_pod => 1)"
-        This works just like "new_from_file", except that a handle can be
-        provided as the first argument.
-
-        Note that there is no validation to confirm that the handle is a
-        handle or something that can act like one. Passing something that
-        isn't a handle will cause a exception when trying to read from it.
-        The "filename" argument is mandatory or undef will be returned.
-
-        You are responsible for setting the decoding layers on $handle if
-        required.
-
-    "new_from_module($module, collect_pod => 1, inc => \@dirs)"
-        Constructs a "Module::Metadata" object given a module or package
-        name. Returns undef if the module cannot be found.
-
-        In addition to accepting the "collect_pod" argument as described
-        above, this method accepts a "inc" argument which is a reference to
-        an array of directories to search for the module. If none are given,
-        the default is @INC.
-
-        If the file that contains the module begins by an UTF-8, UTF-16BE or
-        UTF-16LE byte-order mark, then it is skipped before processing, and
-        the content of the file is also decoded appropriately starting from
-        perl 5.8.
-
-    "find_module_by_name($module, \@dirs)"
-        Returns the path to a module given the module or package name. A
-        list of directories can be passed in as an optional parameter,
-        otherwise @INC is searched.
-
-        Can be called as either an object or a class method.
-
-    "find_module_dir_by_name($module, \@dirs)"
-        Returns the entry in @dirs (or @INC by default) that contains the
-        module $module. A list of directories can be passed in as an
-        optional parameter, otherwise @INC is searched.
-
-        Can be called as either an object or a class method.
-
-    "provides( %options )"
-        This is a convenience wrapper around
-        "package_versions_from_directory" to generate a CPAN META "provides"
-        data structure. It takes key/value pairs. Valid option keys include:
-
-        version (required)
-            Specifies which version of the CPAN::Meta::Spec should be used
-            as the format of the "provides" output. Currently only '1.4' and
-            '2' are supported (and their format is identical). This may
-            change in the future as the definition of "provides" changes.
-
-            The "version" option is required. If it is omitted or if an
-            unsupported version is given, then "provides" will throw an
-            error.
-
-        dir Directory to search recursively for .pm files. May not be
-            specified with "files".
-
-        files
-            Array reference of files to examine. May not be specified with
-            "dir".
-
-        prefix
-            String to prepend to the "file" field of the resulting output.
-            This defaults to lib, which is the common case for most CPAN
-            distributions with their .pm files in lib. This option ensures
-            the META information has the correct relative path even when the
-            "dir" or "files" arguments are absolute or have relative paths
-            from a location other than the distribution root.
-
-        For example, given "dir" of 'lib' and "prefix" of 'lib', the return
-        value is a hashref of the form:
-
-          {
-            'Package::Name' => {
-              version => '0.123',
-              file => 'lib/Package/Name.pm'
-            },
-            'OtherPackage::Name' => ...
-          }
-
-    "package_versions_from_directory($dir, \@files?)"
-        Scans $dir for .pm files (unless @files is given, in which case
-        looks for those files in $dir - and reads each file for packages and
-        versions, returning a hashref of the form:
-
-          {
-            'Package::Name' => {
-              version => '0.123',
-              file => 'Package/Name.pm'
-            },
-            'OtherPackage::Name' => ...
-          }
-
-        The "DB" and "main" packages are always omitted, as are any
-        "private" packages that have leading underscores in the namespace
-        (e.g. "Foo::_private")
-
-        Note that the file path is relative to $dir if that is specified.
-        This must not be used directly for CPAN META "provides". See the
-        "provides" method instead.
-
-    "log_info (internal)"
-        Used internally to perform logging; imported from Log::Contextual if
-        Log::Contextual has already been loaded, otherwise simply calls
-        warn.
-
-  Object methods
-    "name()"
-        Returns the name of the package represented by this module. If there
-        are more than one packages, it makes a best guess based on the
-        filename. If it's a script (i.e. not a *.pm) the package name is
-        'main'.
-
-    "version($package)"
-        Returns the version as defined by the $VERSION variable for the
-        package as returned by the "name" method if no arguments are given.
-        If given the name of a package it will attempt to return the version
-        of that package if it is specified in the file.
-
-    "filename()"
-        Returns the absolute path to the file.
-
-    "packages_inside()"
-        Returns a list of packages. Note: this is a raw list of packages
-        discovered (or assumed, in the case of "main"). It is not filtered
-        for "DB", "main" or private packages the way the "provides" method
-        does. Invalid package names are not returned, for example "Foo:Bar".
-        Strange but valid package names are returned, for example
-        "Foo::Bar::", and are left up to the caller on how to handle.
-
-    "pod_inside()"
-        Returns a list of POD sections.
-
-    "contains_pod()"
-        Returns true if there is any POD in the file.
-
-    "pod($section)"
-        Returns the POD data in the given section.
-
-AUTHOR
-    Original code from Module::Build::ModuleInfo by Ken Williams
-    <kwilliams@cpan.org>, Randy W. Sims <RandyS@ThePierianSpring.org>
-
-    Released as Module::Metadata by Matt S Trout (mst) <mst@shadowcat.co.uk>
-    with assistance from David Golden (xdg) <dagolden@cpan.org>.
-
-COPYRIGHT & LICENSE
-    Original code Copyright (c) 2001-2011 Ken Williams. Additional code
-    Copyright (c) 2010-2011 Matt Trout and David Golden. All rights
-    reserved.
-
-    This library is free software; you can redistribute it and/or modify it
-    under the same terms as Perl itself.
+This README file was generated by Dist::Zilla::Plugin::Readme v5.019.
 
@@ -0,0 +1,221 @@
+# NAME
+
+Module::Metadata - Gather package and POD information from perl module files
+
+# SYNOPSIS
+
+    use Module::Metadata;
+
+    # information about a .pm file
+    my $info = Module::Metadata->new_from_file( $file );
+    my $version = $info->version;
+
+    # CPAN META 'provides' field for .pm files in a directory
+    my $provides = Module::Metadata->provides(
+      dir => 'lib', version => 2
+    );
+
+# DESCRIPTION
+
+This module provides a standard way to gather metadata about a .pm file through
+(mostly) static analysis and (some) code execution.  When determining the
+version of a module, the `$VERSION` assignment is `eval`ed, as is traditional
+in the CPAN toolchain.
+
+# USAGE
+
+## Class methods
+
+- `new_from_file($filename, collect_pod => 1)`
+
+    Constructs a `Module::Metadata` object given the path to a file.  Returns
+    undef if the filename does not exist.
+
+    `collect_pod` is a optional boolean argument that determines whether POD
+    data is collected and stored for reference.  POD data is not collected by
+    default.  POD headings are always collected.
+
+    If the file begins by an UTF-8, UTF-16BE or UTF-16LE byte-order mark, then
+    it is skipped before processing, and the content of the file is also decoded
+    appropriately starting from perl 5.8.
+
+- `new_from_handle($handle, $filename, collect_pod => 1)`
+
+    This works just like `new_from_file`, except that a handle can be provided
+    as the first argument.
+
+    Note that there is no validation to confirm that the handle is a handle or
+    something that can act like one.  Passing something that isn't a handle will
+    cause a exception when trying to read from it.  The `filename` argument is
+    mandatory or undef will be returned.
+
+    You are responsible for setting the decoding layers on `$handle` if
+    required.
+
+- `new_from_module($module, collect_pod => 1, inc => \@dirs)`
+
+    Constructs a `Module::Metadata` object given a module or package name.
+    Returns undef if the module cannot be found.
+
+    In addition to accepting the `collect_pod` argument as described above,
+    this method accepts a `inc` argument which is a reference to an array of
+    directories to search for the module.  If none are given, the default is
+    @INC.
+
+    If the file that contains the module begins by an UTF-8, UTF-16BE or
+    UTF-16LE byte-order mark, then it is skipped before processing, and the
+    content of the file is also decoded appropriately starting from perl 5.8.
+
+- `find_module_by_name($module, \@dirs)`
+
+    Returns the path to a module given the module or package name. A list
+    of directories can be passed in as an optional parameter, otherwise
+    @INC is searched.
+
+    Can be called as either an object or a class method.
+
+- `find_module_dir_by_name($module, \@dirs)`
+
+    Returns the entry in `@dirs` (or `@INC` by default) that contains
+    the module `$module`. A list of directories can be passed in as an
+    optional parameter, otherwise @INC is searched.
+
+    Can be called as either an object or a class method.
+
+- `provides( %options )`
+
+    This is a convenience wrapper around `package_versions_from_directory`
+    to generate a CPAN META `provides` data structure.  It takes key/value
+    pairs.  Valid option keys include:
+
+    - version **(required)**
+
+        Specifies which version of the [CPAN::Meta::Spec](https://metacpan.org/pod/CPAN::Meta::Spec) should be used as
+        the format of the `provides` output.  Currently only '1.4' and '2'
+        are supported (and their format is identical).  This may change in
+        the future as the definition of `provides` changes.
+
+        The `version` option is required.  If it is omitted or if
+        an unsupported version is given, then `provides` will throw an error.
+
+    - dir
+
+        Directory to search recursively for `.pm` files.  May not be specified with
+        `files`.
+
+    - files
+
+        Array reference of files to examine.  May not be specified with `dir`.
+
+    - prefix
+
+        String to prepend to the `file` field of the resulting output. This defaults
+        to `lib`, which is the common case for most CPAN distributions with their
+        `.pm` files in `lib`.  This option ensures the META information has the
+        correct relative path even when the `dir` or `files` arguments are
+        absolute or have relative paths from a location other than the distribution
+        root.
+
+    For example, given `dir` of 'lib' and `prefix` of 'lib', the return value
+    is a hashref of the form:
+
+        {
+          'Package::Name' => {
+            version => '0.123',
+            file => 'lib/Package/Name.pm'
+          },
+          'OtherPackage::Name' => ...
+        }
+
+- `package_versions_from_directory($dir, \@files?)`
+
+    Scans `$dir` for .pm files (unless `@files` is given, in which case looks
+    for those files in `$dir` - and reads each file for packages and versions,
+    returning a hashref of the form:
+
+        {
+          'Package::Name' => {
+            version => '0.123',
+            file => 'Package/Name.pm'
+          },
+          'OtherPackage::Name' => ...
+        }
+
+    The `DB` and `main` packages are always omitted, as are any "private"
+    packages that have leading underscores in the namespace (e.g.
+    `Foo::_private`)
+
+    Note that the file path is relative to `$dir` if that is specified.
+    This **must not** be used directly for CPAN META `provides`.  See
+    the `provides` method instead.
+
+- `log_info (internal)`
+
+    Used internally to perform logging; imported from Log::Contextual if
+    Log::Contextual has already been loaded, otherwise simply calls warn.
+
+## Object methods
+
+- `name()`
+
+    Returns the name of the package represented by this module. If there
+    is more than one package, it makes a best guess based on the
+    filename. If it's a script (i.e. not a \*.pm) the package name is
+    'main'.
+
+- `version($package)`
+
+    Returns the version as defined by the $VERSION variable for the
+    package as returned by the `name` method if no arguments are
+    given. If given the name of a package it will attempt to return the
+    version of that package if it is specified in the file.
+
+- `filename()`
+
+    Returns the absolute path to the file.
+
+- `packages_inside()`
+
+    Returns a list of packages. Note: this is a raw list of packages
+    discovered (or assumed, in the case of `main`).  It is not
+    filtered for `DB`, `main` or private packages the way the
+    `provides` method does.  Invalid package names are not returned,
+    for example "Foo:Bar".  Strange but valid package names are
+    returned, for example "Foo::Bar::", and are left up to the caller
+    on how to handle.
+
+- `pod_inside()`
+
+    Returns a list of POD sections.
+
+- `contains_pod()`
+
+    Returns true if there is any POD in the file.
+
+- `pod($section)`
+
+    Returns the POD data in the given section.
+
+- `is_indexable($package)` or `is_indexable()`
+
+    Returns a boolean indicating whether the package (if provided) or any package
+    (otherwise) is eligible for indexing by PAUSE, the Perl Authors Upload Server.
+    Note This only checks for valid `package` declarations, and does not take any
+    ownership information into account.
+
+# AUTHOR
+
+Original code from Module::Build::ModuleInfo by Ken Williams
+<kwilliams@cpan.org>, Randy W. Sims <RandyS@ThePierianSpring.org>
+
+Released as Module::Metadata by Matt S Trout (mst) <mst@shadowcat.co.uk> with
+assistance from David Golden (xdg) <dagolden@cpan.org>.
+
+# COPYRIGHT & LICENSE
+
+Original code Copyright (c) 2001-2011 Ken Williams.
+Additional code Copyright (c) 2010-2011 Matt Trout and David Golden.
+All rights reserved.
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
diff --git a/var/tmp/source/ETHER/Module-Metadata-1.000024/Module-Metadata-1.000024/corpus/BOMTest/UTF16BE.pm b/var/tmp/source/ETHER/Module-Metadata-1.000024/Module-Metadata-1.000024/corpus/BOMTest/UTF16BE.pm
new file mode 100644
index 00000000..17c6a4ad
Binary files /dev/null and b/var/tmp/source/ETHER/Module-Metadata-1.000024/Module-Metadata-1.000024/corpus/BOMTest/UTF16BE.pm differ
diff --git a/var/tmp/source/ETHER/Module-Metadata-1.000024/Module-Metadata-1.000024/corpus/BOMTest/UTF16LE.pm b/var/tmp/source/ETHER/Module-Metadata-1.000024/Module-Metadata-1.000024/corpus/BOMTest/UTF16LE.pm
new file mode 100644
index 00000000..a46de6de
Binary files /dev/null and b/var/tmp/source/ETHER/Module-Metadata-1.000024/Module-Metadata-1.000024/corpus/BOMTest/UTF16LE.pm differ
@@ -0,0 +1,13 @@
+package Heart;
+
+our $VERSION = 1;
+
+package BOMTest::UTF8;
+
+our $VERSION = 3;
+
+package CĹ“ur;
+
+our $VERSION = 2;
+
+1;
@@ -0,0 +1,37 @@
+name    = Module-Metadata
+author  = Ken Williams <kwilliams@cpan.org>
+author  = Randy W. Sims <RandyS@ThePierianSpring.org>
+license = Perl_5
+copyright_holder = Perl Toolchain Gang
+copyright_year = 2010
+
+[@Author::ETHER]
+:version = 0.064
+installer = MakeMaker
+Authority.authority = cpan:MSTROUT
+Test::MinimumVersion.max_target_perl = 5.006
+PkgVersion.die_on_existing_version = 0
+AutoPrereqs.skip = ^Foo$
+-remove = PodWeaver
+-remove = Test::PodSpelling
+
+[Encoding]
+match = ^corpus
+encoding = bytes
+
+[MetaResources]
+x_IRC = irc://irc.perl.org/#toolchain
+x_MailingList = http://lists.perl.org/list/cpan-workers.html
+
+[OnlyCorePrereqs]
+starting_version = 5.006    ; warnings
+check_dual_life_versions = 0
+
+[Prereqs / DevelopRequires]
+Test::Builder = 0.90    ; for is_passing
+
+[DynamicPrereqs]
+-raw = $WriteMakefileArgs{PREREQ_PM}{'IO::Scalar'} = $FallbackPrereqs{'IO::Scalar'} = 0
+-raw = if $] < 5.008;
+
+[ContributorsFromGit]
@@ -1,6 +1,11 @@
 # -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
 # vim:ts=8:sw=2:et:sta:sts=2
 package Module::Metadata;
+BEGIN {
+  $Module::Metadata::AUTHORITY = 'cpan:MSTROUT';
+}
+# git description: v1.000023-1-g6bfd8b6
+$Module::Metadata::VERSION = '1.000024';
 
 # Adapted from Perl-licensed code originally distributed with
 # Module-Build by Ken Williams
@@ -12,12 +17,14 @@ package Module::Metadata;
 use strict;
 use warnings;
 
-our $VERSION = '1.000019';
-$VERSION = eval $VERSION;
-
 use Carp qw/croak/;
 use File::Spec;
-use IO::File;
+BEGIN {
+       # Try really hard to not depend ony any DynaLoaded module, such as IO::File or Fcntl
+       eval {
+               require Fcntl; Fcntl->import('SEEK_SET'); 1;
+       } or *SEEK_SET = sub { 0 }
+}
 use version 0.87;
 BEGIN {
   if ($INC{'Log/Contextual.pm'}) {
@@ -47,14 +54,14 @@ my $PKG_ADDL_WORD_REGEXP = qr{ # the 2nd+ word in a package name
 }x;
 
 my $PKG_NAME_REGEXP = qr{ # match a package name
-  (?: :: )?               # a pkg name can start with aristotle
+  (?: :: )?               # a pkg name can start with arisdottle
   $PKG_FIRST_WORD_REGEXP  # a package word
   (?:
-    (?: :: )+             ### aristotle (allow one or many times)
+    (?: :: )+             ### arisdottle (allow one or many times)
     $PKG_ADDL_WORD_REGEXP ### a package word
   )*                      # ^ zero, one or many times
   (?:
-    ::                    # allow trailing aristotle
+    ::                    # allow trailing arisdottle
   )?
 }x;
 
@@ -73,7 +80,7 @@ my $VARNAME_REGEXP = qr{ # match fully-qualified VERSION name
   ([\$*])         # sigil - $ or *
   (
     (             # optional leading package name
-      (?:::|\')?  # possibly starting like just :: (ĂŚ  la $::VERSION)
+      (?:::|\')?  # possibly starting like just :: (a la $::VERSION)
       (?:\w+(?:::|\'))*  # Foo::Bar:: ...
     )?
     VERSION
@@ -87,7 +94,7 @@ my $VERS_REGEXP = qr{ # match a VERSION definition
     $VARNAME_REGEXP           # without parens
   )
   \s*
-  =[^=~]  # = but not ==, nor =~
+  =[^=~>]  # = but not ==, nor =~, nor =>
 }x;
 
 sub new_from_file {
@@ -162,19 +169,19 @@ sub new_from_module {
     my $err = '';
       foreach my $p ( @$packages ) {
         if ( defined( $p->{version} ) ) {
-  	if ( defined( $version ) ) {
-   	  if ( $compare_versions->( $version, '!=', $p->{version} ) ) {
-  	    $err .= "  $p->{file} ($p->{version})\n";
-  	  } else {
-  	    # same version declared multiple times, ignore
-  	  }
-  	} else {
-  	  $file    = $p->{file};
-  	  $version = $p->{version};
-  	}
+          if ( defined( $version ) ) {
+            if ( $compare_versions->( $version, '!=', $p->{version} ) ) {
+              $err .= "  $p->{file} ($p->{version})\n";
+            } else {
+              # same version declared multiple times, ignore
+            }
+          } else {
+            $file    = $p->{file};
+            $version = $p->{version};
+          }
         }
-        $file ||= $p->{file} if defined( $p->{file} );
-      }
+      $file ||= $p->{file} if defined( $p->{file} );
+    }
 
     if ( $err ) {
       $err = "  $file ($version)\n" . $err;
@@ -287,45 +294,45 @@ sub new_from_module {
       if ( exists( $prime{$package} ) ) { # primary package selected
 
         if ( $result->{err} ) {
-  	# Use the selected primary package, but there are conflicting
-  	# errors among multiple alternative packages that need to be
-  	# reported
+        # Use the selected primary package, but there are conflicting
+        # errors among multiple alternative packages that need to be
+        # reported
           log_info {
-  	    "Found conflicting versions for package '$package'\n" .
-  	    "  $prime{$package}{file} ($prime{$package}{version})\n" .
-  	    $result->{err}
+            "Found conflicting versions for package '$package'\n" .
+            "  $prime{$package}{file} ($prime{$package}{version})\n" .
+            $result->{err}
           };
 
         } elsif ( defined( $result->{version} ) ) {
-  	# There is a primary package selected, and exactly one
-  	# alternative package
-
-  	if ( exists( $prime{$package}{version} ) &&
-  	     defined( $prime{$package}{version} ) ) {
-  	  # Unless the version of the primary package agrees with the
-  	  # version of the alternative package, report a conflict
-  	  if ( $compare_versions->(
+        # There is a primary package selected, and exactly one
+        # alternative package
+
+        if ( exists( $prime{$package}{version} ) &&
+             defined( $prime{$package}{version} ) ) {
+          # Unless the version of the primary package agrees with the
+          # version of the alternative package, report a conflict
+        if ( $compare_versions->(
                  $prime{$package}{version}, '!=', $result->{version}
                )
              ) {
 
             log_info {
               "Found conflicting versions for package '$package'\n" .
-  	      "  $prime{$package}{file} ($prime{$package}{version})\n" .
-  	      "  $result->{file} ($result->{version})\n"
+              "  $prime{$package}{file} ($prime{$package}{version})\n" .
+              "  $result->{file} ($result->{version})\n"
             };
-  	  }
+          }
 
-  	} else {
-  	  # The prime package selected has no version so, we choose to
-  	  # use any alternative package that does have a version
-  	  $prime{$package}{file}    = $result->{file};
-  	  $prime{$package}{version} = $result->{version};
-  	}
+        } else {
+          # The prime package selected has no version so, we choose to
+          # use any alternative package that does have a version
+          $prime{$package}{file}    = $result->{file};
+          $prime{$package}{version} = $result->{version};
+        }
 
         } else {
-  	# no alt package found with a version, but we have a prime
-  	# package so we use it whether it has a version or not
+        # no alt package found with a version, but we have a prime
+        # package so we use it whether it has a version or not
         }
 
       } else { # No primary package was selected, use the best alternative
@@ -333,7 +340,7 @@ sub new_from_module {
         if ( $result->{err} ) {
           log_info {
             "Found conflicting versions for package '$package'\n" .
-  	    $result->{err}
+            $result->{err}
           };
         }
 
@@ -341,7 +348,7 @@ sub new_from_module {
         # something rather than nothing
         $prime{$package}{file}    = $result->{file};
         $prime{$package}{version} = $result->{version}
-  	  if defined( $result->{version} );
+          if defined( $result->{version} );
       }
     }
 
@@ -383,12 +390,14 @@ sub _init {
 
   my $self = bless(\%data, $class);
 
-  if ( $handle ) {
-    $self->_parse_fh($handle);
-  }
-  else {
-    $self->_parse_file();
+  if ( not $handle ) {
+    my $filename = $self->{filename};
+    open $handle, '<', $filename
+      or croak( "Can't open '$filename': $!" );
+
+    $self->_handle_bom($handle, $filename);
   }
+  $self->_parse_fh($handle);
 
   unless($self->{module} and length($self->{module})) {
     my ($v, $d, $f) = File::Spec->splitpath($self->{filename});
@@ -423,9 +432,10 @@ sub _do_find_module {
   foreach my $dir ( @$dirs ) {
     my $testfile = File::Spec->catfile($dir, $file);
     return [ File::Spec->rel2abs( $testfile ), $dir ]
-	if -e $testfile and !-d _;  # For stuff like ExtUtils::xsubpp
-    return [ File::Spec->rel2abs( "$testfile.pm" ), $dir ]
-	if -e "$testfile.pm";
+      if -e $testfile and !-d _;  # For stuff like ExtUtils::xsubpp
+    $testfile .= '.pm';
+    return [ File::Spec->rel2abs( $testfile ), $dir ]
+      if -e $testfile;
   }
   return;
 }
@@ -449,28 +459,16 @@ sub _parse_version_expression {
   my $self = shift;
   my $line = shift;
 
-  my( $sig, $var, $pkg );
+  my( $sigil, $variable_name, $package);
   if ( $line =~ /$VERS_REGEXP/o ) {
-    ( $sig, $var, $pkg ) = $2 ? ( $1, $2, $3 ) : ( $4, $5, $6 );
-    if ( $pkg ) {
-      $pkg = ($pkg eq '::') ? 'main' : $pkg;
-      $pkg =~ s/::$//;
+    ( $sigil, $variable_name, $package) = $2 ? ( $1, $2, $3 ) : ( $4, $5, $6 );
+    if ( $package ) {
+      $package = ($package eq '::') ? 'main' : $package;
+      $package =~ s/::$//;
     }
   }
 
-  return ( $sig, $var, $pkg );
-}
-
-sub _parse_file {
-  my $self = shift;
-
-  my $filename = $self->{filename};
-  my $fh = IO::File->new( $filename )
-    or croak( "Can't open '$filename': $!" );
-
-  $self->_handle_bom($fh, $filename);
-
-  $self->_parse_fh($fh);
+  return ( $sigil, $variable_name, $package );
 }
 
 # Look for a UTF-8/UTF-16BE/UTF-16LE BOM at the beginning of the stream.
@@ -478,11 +476,11 @@ sub _parse_file {
 sub _handle_bom {
   my ($self, $fh, $filename) = @_;
 
-  my $pos = $fh->getpos;
+  my $pos = tell $fh;
   return unless defined $pos;
 
   my $buf = ' ' x 2;
-  my $count = $fh->read( $buf, length $buf );
+  my $count = read $fh, $buf, length $buf;
   return unless defined $count and $count >= 2;
 
   my $encoding;
@@ -492,7 +490,7 @@ sub _handle_bom {
     $encoding = 'UTF-16LE';
   } elsif ( $buf eq "\x{EF}\x{BB}" ) {
     $buf = ' ';
-    $count = $fh->read( $buf, length $buf );
+    $count = read $fh, $buf, length $buf;
     if ( defined $count and $count >= 1 and $buf eq "\x{BF}" ) {
       $encoding = 'UTF-8';
     }
@@ -500,11 +498,10 @@ sub _handle_bom {
 
   if ( defined $encoding ) {
     if ( "$]" >= 5.008 ) {
-      # $fh->binmode requires perl 5.10
       binmode( $fh, ":encoding($encoding)" );
     }
   } else {
-    $fh->setpos($pos)
+    seek $fh, $pos, SEEK_SET
       or croak( sprintf "Can't reset position to the top of '$filename'" );
   }
 
@@ -515,8 +512,8 @@ sub _parse_fh {
   my ($self, $fh) = @_;
 
   my( $in_pod, $seen_end, $need_vers ) = ( 0, 0, 0 );
-  my( @pkgs, %vers, %pod, @pod );
-  my $pkg = 'main';
+  my( @packages, %vers, %pod, @pod );
+  my $package = 'main';
   my $pod_sect = '';
   my $pod_data = '';
   my $in_end = 0;
@@ -540,15 +537,15 @@ sub _parse_fh {
     if ( $in_pod ) {
 
       if ( $line =~ /^=head[1-4]\s+(.+)\s*$/ ) {
-	push( @pod, $1 );
-	if ( $self->{collect_pod} && length( $pod_data ) ) {
+        push( @pod, $1 );
+        if ( $self->{collect_pod} && length( $pod_data ) ) {
           $pod{$pod_sect} = $pod_data;
           $pod_data = '';
         }
-	$pod_sect = $1;
+        $pod_sect = $1;
 
       } elsif ( $self->{collect_pod} ) {
-	$pod_data .= "$line\n";
+        $pod_data .= "$line\n";
 
       }
 
@@ -576,56 +573,57 @@ sub _parse_fh {
       last if $line eq '__DATA__';
 
       # parse $line to see if it's a $VERSION declaration
-      my( $vers_sig, $vers_fullname, $vers_pkg ) =
-          ($line =~ /VERSION/)
+      my( $version_sigil, $version_fullname, $version_package ) =
+          index($line, 'VERSION') >= 1
               ? $self->_parse_version_expression( $line )
               : ();
 
       if ( $line =~ /$PKG_REGEXP/o ) {
-        $pkg = $1;
-        push( @pkgs, $pkg ) unless grep( $pkg eq $_, @pkgs );
-        $vers{$pkg} = $2 unless exists( $vers{$pkg} );
-        $need_vers = defined $2 ? 0 : 1;
+        $package = $1;
+        my $version = $2;
+        push( @packages, $package ) unless grep( $package eq $_, @packages );
+        $need_vers = defined $version ? 0 : 1;
+
+        if ( not exists $vers{$package} and defined $version ){
+          # Upgrade to a version object.
+          my $dwim_version = eval { _dwim_version($version) };
+          croak "Version '$version' from $self->{filename} does not appear to be valid:\n$line\n\nThe fatal error was: $@\n"
+              unless defined $dwim_version;  # "0" is OK!
+          $vers{$package} = $dwim_version;
+        }
 
       # VERSION defined with full package spec, i.e. $Module::VERSION
-      } elsif ( $vers_fullname && $vers_pkg ) {
-	push( @pkgs, $vers_pkg ) unless grep( $vers_pkg eq $_, @pkgs );
-	$need_vers = 0 if $vers_pkg eq $pkg;
+      } elsif ( $version_fullname && $version_package ) {
+        push( @packages, $version_package ) unless grep( $version_package eq $_, @packages );
+        $need_vers = 0 if $version_package eq $package;
 
-	unless ( defined $vers{$vers_pkg} && length $vers{$vers_pkg} ) {
-	  $vers{$vers_pkg} =
-	    $self->_evaluate_version_line( $vers_sig, $vers_fullname, $line );
-	}
+        unless ( defined $vers{$version_package} && length $vers{$version_package} ) {
+        $vers{$version_package} = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line );
+      }
 
       # first non-comment line in undeclared package main is VERSION
-      } elsif ( !exists($vers{main}) && $pkg eq 'main' && $vers_fullname ) {
-	$need_vers = 0;
-	my $v =
-	  $self->_evaluate_version_line( $vers_sig, $vers_fullname, $line );
-	$vers{$pkg} = $v;
-	push( @pkgs, 'main' );
+      } elsif ( $package eq 'main' && $version_fullname && !exists($vers{main}) ) {
+        $need_vers = 0;
+        my $v = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line );
+        $vers{$package} = $v;
+        push( @packages, 'main' );
 
       # first non-comment line in undeclared package defines package main
-      } elsif ( !exists($vers{main}) && $pkg eq 'main' && $line =~ /\w+/ ) {
-	$need_vers = 1;
-	$vers{main} = '';
-	push( @pkgs, 'main' );
+      } elsif ( $package eq 'main' && !exists($vers{main}) && $line =~ /\w/ ) {
+        $need_vers = 1;
+        $vers{main} = '';
+        push( @packages, 'main' );
 
       # only keep if this is the first $VERSION seen
-      } elsif ( $vers_fullname && $need_vers ) {
-	$need_vers = 0;
-	my $v =
-	  $self->_evaluate_version_line( $vers_sig, $vers_fullname, $line );
-
-
-	unless ( defined $vers{$pkg} && length $vers{$pkg} ) {
-	  $vers{$pkg} = $v;
-	}
+      } elsif ( $version_fullname && $need_vers ) {
+        $need_vers = 0;
+        my $v = $self->_evaluate_version_line( $version_sigil, $version_fullname, $line );
 
+        unless ( defined $vers{$package} && length $vers{$package} ) {
+          $vers{$package} = $v;
+        }
       }
-
     }
-
   }
 
   if ( $self->{collect_pod} && length($pod_data) ) {
@@ -633,7 +631,7 @@ sub _parse_fh {
   }
 
   $self->{versions} = \%vers;
-  $self->{packages} = \@pkgs;
+  $self->{packages} = \@packages;
   $self->{pod} = \%pod;
   $self->{pod_headings} = \@pod;
 }
@@ -642,7 +640,7 @@ sub _parse_fh {
 my $pn = 0;
 sub _evaluate_version_line {
   my $self = shift;
-  my( $sigil, $var, $line ) = @_;
+  my( $sigil, $variable_name, $line ) = @_;
 
   # Some of this code came from the ExtUtils:: hierarchy.
 
@@ -657,10 +655,10 @@ sub _evaluate_version_line {
     no warnings;
 
       \$vsub = sub {
-        local $sigil$var;
-        \$$var=undef;
+        local $sigil$variable_name;
+        \$$variable_name=undef;
         $line;
-        \$$var
+        \$$variable_name
       };
   }};
 
@@ -669,7 +667,7 @@ sub _evaluate_version_line {
   local $^W;
   # Try to get the $VERSION
   eval $eval;
-  # some modules say $VERSION = $Foo::Bar::VERSION, but Foo::Bar isn't
+  # some modules say $VERSION <equal sign> $Foo::Bar::VERSION, but Foo::Bar isn't
   # installed, so we need to hunt in ./lib for it
   if ( $@ =~ /Can't locate/ && -d 'lib' ) {
     local @INC = ('lib',@INC);
@@ -680,12 +678,14 @@ sub _evaluate_version_line {
   (ref($vsub) eq 'CODE') or
     croak "failed to build version sub for $self->{filename}";
   my $result = eval { $vsub->() };
+  # FIXME: $eval is not the right thing to print here
   croak "Could not get version from $self->{filename} by executing:\n$eval\n\nThe fatal error was: $@\n"
     if $@;
 
   # Upgrade it into a version object
   my $version = eval { _dwim_version($result) };
 
+  # FIXME: $eval is not the right thing to print here
   croak "Version '$result' from $self->{filename} does not appear to be valid:\n$eval\n\nThe fatal error was: $@\n"
     unless defined $version; # "0" is OK!
 
@@ -765,10 +765,10 @@ sub version {
     my $mod  = shift || $self->{module};
     my $vers;
     if ( defined( $mod ) && length( $mod ) &&
-	 exists( $self->{versions}{$mod} ) ) {
-	return $self->{versions}{$mod};
+         exists( $self->{versions}{$mod} ) ) {
+        return $self->{versions}{$mod};
     } else {
-	return undef;
+        return undef;
     }
 }
 
@@ -776,13 +776,25 @@ sub pod {
     my $self = shift;
     my $sect = shift;
     if ( defined( $sect ) && length( $sect ) &&
-	 exists( $self->{pod}{$sect} ) ) {
-	return $self->{pod}{$sect};
+         exists( $self->{pod}{$sect} ) ) {
+        return $self->{pod}{$sect};
     } else {
-	return undef;
+        return undef;
     }
 }
 
+sub is_indexable {
+  my ($self, $package) = @_;
+
+  my @indexable_packages = grep { $_ ne 'main' } $self->packages_inside;
+
+  # check for specific package, if provided
+  return !! grep { $_ eq $package } @indexable_packages if $package;
+
+  # otherwise, check for any indexable packages at all
+  return !! @indexable_packages;
+}
+
 1;
 
 =head1 NAME
@@ -956,7 +968,7 @@ Log::Contextual has already been loaded, otherwise simply calls warn.
 =item C<< name() >>
 
 Returns the name of the package represented by this module. If there
-are more than one packages, it makes a best guess based on the
+is more than one package, it makes a best guess based on the
 filename. If it's a script (i.e. not a *.pm) the package name is
 'main'.
 
@@ -993,6 +1005,13 @@ Returns true if there is any POD in the file.
 
 Returns the POD data in the given section.
 
+=item C<< is_indexable($package) >> or C<< is_indexable() >>
+
+Returns a boolean indicating whether the package (if provided) or any package
+(otherwise) is eligible for indexing by PAUSE, the Perl Authors Upload Server.
+Note This only checks for valid C<package> declarations, and does not take any
+ownership information into account.
+
 =back
 
 =head1 AUTHOR
@@ -1,10 +0,0 @@
-BEGIN { -e 'Distar' or system("git clone git://git.shadowcat.co.uk/p5sagit/Distar.git") }
-use lib 'Distar/lib';
-use Distar;
-
-use ExtUtils::MakeMaker 6.68;	# ensure meta-spec v2 compatibility
-author 'Ken Williams <kwilliams@cpan.org>, Randy W. Sims <RandyS@ThePierianSpring.org>';
-
-manifest_include(
-  't/smells-of-vcs' => qr{.*},
-);
@@ -1,11 +0,0 @@
-bump:
-	maint/bump-version
-	rm Makefile
-bumpminor:
-	maint/bump-version minor
-	rm Makefile
-bumpmajor:
-	maint/bump-version major
-	rm Makefile
-upload: $(DISTVNAME).tar$(SUFFIX)
-	cpan-upload $<
@@ -1,37 +0,0 @@
-#!/usr/bin/env perl
-
-use 5.010;
-use strict;
-use warnings FATAL => 'all';
-use autodie;
-
-chomp(my $LATEST = qx(grep '^[0-9]' Changes | head -1 | awk '{print \$1}'));
-
-my @parts = split /\./, $LATEST;
-splice(@parts, 1, 0, 0) if @parts == 2;
-
-my $OLD_DECIMAL = sprintf('%i.%03i%03i', @parts);
-
-my %bump_part = (major => 0, minor => 1, bugfix => 2);
-
-my $bump_this =
-  $bump_part{$ARGV[0]||'bugfix'}
-    // die "no idea which part to bump - $ARGV[0] means nothing to me";
-
-my @new_parts = @parts;
-
-$new_parts[$bump_this]++;
-
-my $NEW_DECIMAL = sprintf('%i.%03i%03i', @new_parts);
-
-warn "Bumping $OLD_DECIMAL -> $NEW_DECIMAL\n";
-
-my $PM_FILE = 'lib/Module/Metadata.pm';
-
-my $file = do { local (@ARGV, $/) = ($PM_FILE); <> };
-
-$file =~ s/(?<=\$VERSION = ')${\quotemeta $OLD_DECIMAL}/${NEW_DECIMAL}/;
-
-open my $out, '>', $PM_FILE;
-
-print $out $file;
@@ -0,0 +1,204 @@
+#!perl
+
+use strict;
+use warnings;
+
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.013
+
+use Test::More tests => 1;
+
+use ExtUtils::MakeMaker;
+use File::Spec::Functions;
+use List::Util qw/max/;
+use version;
+
+# hide optional CPAN::Meta modules from prereq scanner
+# and check if they are available
+my $cpan_meta = "CPAN::Meta";
+my $cpan_meta_req = "CPAN::Meta::Requirements";
+my $HAS_CPAN_META = eval "require $cpan_meta"; ## no critic
+my $HAS_CPAN_META_REQ = eval "require $cpan_meta_req; $cpan_meta_req->VERSION('2.120900')";
+
+# Verify requirements?
+my $DO_VERIFY_PREREQS = 1;
+
+sub _merge_requires {
+    my ($collector, $prereqs) = @_;
+    for my $phase ( qw/configure build test runtime develop/ ) {
+        next unless exists $prereqs->{$phase};
+        if ( my $req = $prereqs->{$phase}{'requires'} ) {
+            my $cmr = CPAN::Meta::Requirements->from_string_hash( $req );
+            $collector->add_requirements( $cmr );
+        }
+    }
+}
+
+my %include = map {; $_ => 1 } qw(
+
+);
+
+my %exclude = map {; $_ => 1 } qw(
+
+);
+
+# Add static prereqs to the included modules list
+my $static_prereqs = do { my $x = {
+       'configure' => {
+                        'requires' => {
+                                        'ExtUtils::MakeMaker' => '6.30'
+                                      }
+                      },
+       'develop' => {
+                      'recommends' => {
+                                        'Dist::Zilla::PluginBundle::Author::ETHER' => '0.064'
+                                      },
+                      'requires' => {
+                                      'Dist::Zilla' => '5',
+                                      'Dist::Zilla::Plugin::ContributorsFromGit' => '0',
+                                      'Dist::Zilla::Plugin::DynamicPrereqs' => '0',
+                                      'Dist::Zilla::Plugin::Encoding' => '0',
+                                      'Dist::Zilla::Plugin::GitHub::Update' => '0',
+                                      'Dist::Zilla::Plugin::GithubMeta' => '0',
+                                      'Dist::Zilla::Plugin::MakeMaker' => '0',
+                                      'Dist::Zilla::Plugin::MetaResources' => '0',
+                                      'Dist::Zilla::Plugin::OnlyCorePrereqs' => '0',
+                                      'Dist::Zilla::Plugin::Prereqs' => '0',
+                                      'Dist::Zilla::PluginBundle::Author::ETHER' => '0.064',
+                                      'File::Spec' => '0',
+                                      'IO::Handle' => '0',
+                                      'IPC::Open3' => '0',
+                                      'Pod::Coverage::TrustPod' => '0',
+                                      'Test::Builder' => '0.90',
+                                      'Test::CPAN::Changes' => '0.19',
+                                      'Test::CPAN::Meta' => '0',
+                                      'Test::Kwalitee' => '1.12',
+                                      'Test::More' => '0.94',
+                                      'Test::NoTabs' => '0',
+                                      'Test::Pod' => '1.41',
+                                      'Test::Pod::Coverage' => '1.08'
+                                    }
+                    },
+       'runtime' => {
+                      'requires' => {
+                                      'Carp' => '0',
+                                      'Fcntl' => '0',
+                                      'File::Find' => '0',
+                                      'File::Spec' => '0',
+                                      'perl' => '5.006',
+                                      'strict' => '0',
+                                      'version' => '0.87',
+                                      'warnings' => '0'
+                                    }
+                    },
+       'test' => {
+                   'recommends' => {
+                                     'CPAN::Meta' => '0',
+                                     'CPAN::Meta::Requirements' => '2.120900'
+                                   },
+                   'requires' => {
+                                   'Cwd' => '0',
+                                   'Data::Dumper' => '0',
+                                   'ExtUtils::MakeMaker' => '0',
+                                   'File::Basename' => '0',
+                                   'File::Path' => '0',
+                                   'File::Spec::Functions' => '0',
+                                   'File::Temp' => '0',
+                                   'IO::File' => '0',
+                                   'List::Util' => '0',
+                                   'Test::More' => '0.82',
+                                   'lib' => '0'
+                                 }
+                 }
+     };
+  $x;
+ };
+
+delete $static_prereqs->{develop} if not $ENV{AUTHOR_TESTING};
+$include{$_} = 1 for map { keys %$_ } map { values %$_ } values %$static_prereqs;
+
+# Merge requirements for major phases (if we can)
+my $all_requires;
+if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META_REQ ) {
+    $all_requires = $cpan_meta_req->new;
+    _merge_requires($all_requires, $static_prereqs);
+}
+
+
+# Add dynamic prereqs to the included modules list (if we can)
+my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+if ( $source && $HAS_CPAN_META ) {
+  if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
+    my $dynamic_prereqs = $meta->prereqs;
+    delete $dynamic_prereqs->{develop} if not $ENV{AUTHOR_TESTING};
+    $include{$_} = 1 for map { keys %$_ } map { values %$_ } values %$dynamic_prereqs;
+
+    if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META_REQ ) {
+        _merge_requires($all_requires, $dynamic_prereqs);
+    }
+  }
+}
+else {
+  $source = 'static metadata';
+}
+
+my @modules = sort grep { ! $exclude{$_} } keys %include;
+my @reports = [qw/Version Module/];
+my @dep_errors;
+my $req_hash = defined($all_requires) ? $all_requires->as_string_hash : {};
+
+for my $mod ( @modules ) {
+  next if $mod eq 'perl';
+  my $file = $mod;
+  $file =~ s{::}{/}g;
+  $file .= ".pm";
+  my ($prefix) = grep { -e catfile($_, $file) } @INC;
+  if ( $prefix ) {
+    my $ver = MM->parse_version( catfile($prefix, $file) );
+    $ver = "undef" unless defined $ver; # Newer MM should do this anyway
+    push @reports, [$ver, $mod];
+
+    if ( $DO_VERIFY_PREREQS && $all_requires ) {
+      my $req = $req_hash->{$mod};
+      if ( defined $req && length $req ) {
+        if ( ! defined eval { version->parse($ver) } ) {
+          push @dep_errors, "$mod version '$ver' cannot be parsed (version '$req' required)";
+        }
+        elsif ( ! $all_requires->accepts_module( $mod => $ver ) ) {
+          push @dep_errors, "$mod version '$ver' is not in required range '$req'";
+        }
+      }
+    }
+
+  }
+  else {
+    push @reports, ["missing", $mod];
+
+    if ( $DO_VERIFY_PREREQS && $all_requires ) {
+      my $req = $req_hash->{$mod};
+      if ( defined $req && length $req ) {
+        push @dep_errors, "$mod is not installed (version '$req' required)";
+      }
+    }
+  }
+}
+
+if ( @reports ) {
+  my $vl = max map { length $_->[0] } @reports;
+  my $ml = max map { length $_->[1] } @reports;
+  splice @reports, 1, 0, ["-" x $vl, "-" x $ml];
+  diag "\nVersions for all modules listed in $source (including optional ones):\n",
+    map {sprintf("  %*s %*s\n",$vl,$_->[0],-$ml,$_->[1])} @reports;
+}
+
+if ( @dep_errors ) {
+  diag join("\n",
+    "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n",
+    "The following REQUIRED prerequisites were not satisfied:\n",
+    @dep_errors,
+    "\n"
+  );
+}
+
+pass;
+
+# vim: ts=4 sts=4 sw=4 et:
@@ -3,15 +3,20 @@ use warnings;
 use Test::More tests => 3;
 use Module::Metadata;
 
-*fh_from_string = $] < 5.008
-  ? require IO::Scalar && sub ($) {
-    IO::Scalar->new(\$_[0]);
-  }
-  : sub ($) {
-    open my $fh, '<', \$_[0];
-    $fh
-  }
-;
+BEGIN {
+  *fh_from_string = $] < 5.008
+    ? require IO::Scalar && sub ($) {
+      IO::Scalar->new(\$_[0]);
+    }
+    # hide in n eval'd string so Perl::MinimumVersion doesn't clutch its pearls
+    : eval <<'EVAL'
+    sub ($) {
+      open my $fh, '<', \$_[0];
+      $fh
+    }
+EVAL
+  ;
+}
 
 {
     my $src = <<'...';
@@ -22,7 +22,7 @@ plan tests => 4 * scalar(keys %versions);
 for my $enc (sort keys %versions) {
   my $pkg  = "BOMTest::$enc";
   my $vers = $versions{$enc};
-  my $pm   = File::Spec->catfile(qw<t lib BOMTest> => "$enc.pm");
+  my $pm   = File::Spec->catfile(qw<corpus BOMTest> => "$enc.pm");
   my $info = Module::Metadata->new_from_file($pm);
   is( $info->name, $pkg, "$enc: default package was found" );
   is( $info->version, $vers, "$enc: version for default package" );
@@ -1,6 +1,5 @@
 use strict;
 use warnings;
-use utf8;
 use Test::More tests => 2;
 use Module::Metadata;
 
diff --git a/var/tmp/source/ETHER/Module-Metadata-1.000019/Module-Metadata-1.000019/t/lib/BOMTest/UTF16BE.pm b/var/tmp/source/ETHER/Module-Metadata-1.000019/Module-Metadata-1.000019/t/lib/BOMTest/UTF16BE.pm
deleted file mode 100644
index 17c6a4ad..00000000
Binary files a/var/tmp/source/ETHER/Module-Metadata-1.000019/Module-Metadata-1.000019/t/lib/BOMTest/UTF16BE.pm and /dev/null differ
diff --git a/var/tmp/source/ETHER/Module-Metadata-1.000019/Module-Metadata-1.000019/t/lib/BOMTest/UTF16LE.pm b/var/tmp/source/ETHER/Module-Metadata-1.000019/Module-Metadata-1.000019/t/lib/BOMTest/UTF16LE.pm
deleted file mode 100644
index a46de6de..00000000
Binary files a/var/tmp/source/ETHER/Module-Metadata-1.000019/Module-Metadata-1.000019/t/lib/BOMTest/UTF16LE.pm and /dev/null differ
@@ -1,13 +0,0 @@
-package Heart;
-
-our $VERSION = 1;
-
-package BOMTest::UTF8;
-
-our $VERSION = 3;
-
-package CĹ“ur;
-
-our $VERSION = 2;
-
-1;
@@ -1,849 +0,0 @@
-package DistGen;
-
-use strict;
-use warnings;
-
-use vars qw( $VERSION $VERBOSE @EXPORT_OK);
-
-$VERSION = '0.01';
-$VERBOSE = 0;
-
-use Carp;
-
-use MBTest ();
-use Cwd ();
-use File::Basename ();
-use File::Find ();
-use File::Path ();
-use File::Spec ();
-use IO::File ();
-use Tie::CPHash;
-use Data::Dumper;
-
-my $vms_mode;
-my $vms_lower_case;
-
-BEGIN {
-  $vms_mode = 0;
-  $vms_lower_case = 0;
-  if( $^O eq 'VMS' ) {
-    # For things like vmsify()
-    require VMS::Filespec;
-    VMS::Filespec->import;
-    $vms_mode = 1;
-    $vms_lower_case = 1;
-    my $vms_efs_case = 0;
-    my $unix_rpt = 0;
-    if (eval { local $SIG{__DIE__}; require VMS::Feature; }) {
-        $unix_rpt = VMS::Feature::current("filename_unix_report");
-        $vms_efs_case = VMS::Feature::current("efs_case_preserve");
-    } else {
-        my $env_unix_rpt = $ENV{'DECC$FILENAME_UNIX_REPORT'} || '';
-        $unix_rpt = $env_unix_rpt =~ /^[ET1]/i;
-        my $efs_case = $ENV{'DECC$EFS_CASE_PRESERVE'} || '';
-        $vms_efs_case = $efs_case =~ /^[ET1]/i;
-    }
-    $vms_mode = 0 if $unix_rpt;
-    $vms_lower_case = 0 if $vms_efs_case;
-  }
-}
-BEGIN {
-  require Exporter;
-  *{import} = \&Exporter::import;
-  @EXPORT_OK = qw(
-    undent
-  );
-}
-
-sub undent {
-  my ($string) = @_;
-
-  my ($space) = $string =~ m/^(\s+)/;
-  $string =~ s/^$space//gm;
-
-  return($string);
-}
-
-sub chdir_all ($) {
-  # OS/2 has "current directory per disk", undeletable;
-  # doing chdir() to another disk won't change cur-dir of initial disk...
-  chdir('/') if $^O eq 'os2';
-  chdir shift;
-}
-
-########################################################################
-
-END { chdir_all(MBTest->original_cwd); }
-
-sub new {
-  my $self = bless {}, shift;
-  $self->reset(@_);
-}
-
-sub reset {
-  my $self = shift;
-  my %options = @_;
-
-  $options{name} ||= 'Simple';
-  $options{dir} = File::Spec->rel2abs(
-    defined $options{dir} ? $options{dir} : MBTest->tmpdir
-  );
-
-  my %data = (
-    no_manifest   => 0,
-    xs            => 0,
-    inc           => 0,
-    %options,
-  );
-  %$self = %data;
-
-  tie %{$self->{filedata}}, 'Tie::CPHash';
-
-  tie %{$self->{pending}{change}}, 'Tie::CPHash';
-
-  # start with a fresh, empty directory
-  if ( -d $self->dirname ) {
-    warn "Warning: Removing existing directory '@{[$self->dirname]}'\n";
-    File::Path::rmtree( $self->dirname );
-  }
-  File::Path::mkpath( $self->dirname );
-
-  $self->_gen_default_filedata();
-
-  return $self;
-}
-
-sub remove {
-  my $self = shift;
-  $self->chdir_original if($self->did_chdir);
-  File::Path::rmtree( $self->dirname );
-  return $self;
-}
-
-sub revert {
-  my ($self, $file) = @_;
-  if ( defined $file ) {
-    delete $self->{filedata}{$file};
-    delete $self->{pending}{$_}{$file} for qw/change remove/;
-  }
-  else {
-    delete $self->{filedata}{$_} for keys %{ $self->{filedata} };
-    for my $pend ( qw/change remove/ ) {
-      delete $self->{pending}{$pend}{$_} for keys %{ $self->{pending}{$pend} };
-    }
-  }
-  $self->_gen_default_filedata;
-}
-
-sub _gen_default_filedata {
-  my $self = shift;
-
-  # TODO maybe a public method like this (but with a better name?)
-  my $add_unless = sub {
-    my $self = shift;
-    my ($member, $data) = @_;
-    $self->add_file($member, $data) unless($self->{filedata}{$member});
-  };
-
-  if ( ! $self->{inc} ) {
-    $self->$add_unless('Build.PL', undent(<<"      ---"));
-      use strict;
-      use Module::Build;
-
-      my \$builder = Module::Build->new(
-          module_name         => '$self->{name}',
-          license             => 'perl',
-      );
-
-      \$builder->create_build_script();
-      ---
-  }
-  else {
-    $self->$add_unless('Build.PL', undent(<<"      ---"));
-      use strict;
-      use inc::latest 'Module::Build';
-
-      my \$builder = Module::Build->new(
-          module_name         => '$self->{name}',
-          license             => 'perl',
-      );
-
-      \$builder->create_build_script();
-      ---
-  }
-
-  my $module_filename =
-    join( '/', ('lib', split(/::/, $self->{name})) ) . '.pm';
-
-  unless ( $self->{xs} ) {
-    $self->$add_unless($module_filename, undent(<<"      ---"));
-      package $self->{name};
-
-      use vars qw( \$VERSION );
-      \$VERSION = '0.01';
-
-      use strict;
-      use warnings;
-
-      1;
-
-      __END__
-
-      =head1 NAME
-
-      $self->{name} - Perl extension for blah blah blah
-
-      =head1 DESCRIPTION
-
-      Stub documentation for $self->{name}.
-
-      =head1 AUTHOR
-
-      A. U. Thor, a.u.thor\@a.galaxy.far.far.away
-
-      =cut
-      ---
-
-  $self->$add_unless('t/basic.t', undent(<<"    ---"));
-    use Test::More tests => 1;
-    use strict;
-    use warnings;
-
-    use $self->{name};
-    ok 1;
-    ---
-
-  } else {
-    $self->$add_unless($module_filename, undent(<<"      ---"));
-      package $self->{name};
-
-      \$VERSION = '0.01';
-
-      require Exporter;
-      require DynaLoader;
-
-      \@ISA = qw(Exporter DynaLoader);
-      \@EXPORT_OK = qw( okay );
-
-      bootstrap $self->{name} \$VERSION;
-
-      1;
-
-      __END__
-
-      =head1 NAME
-
-      $self->{name} - Perl extension for blah blah blah
-
-      =head1 DESCRIPTION
-
-      Stub documentation for $self->{name}.
-
-      =head1 AUTHOR
-
-      A. U. Thor, a.u.thor\@a.galaxy.far.far.away
-
-      =cut
-      ---
-
-    my $xs_filename =
-      join( '/', ('lib', split(/::/, $self->{name})) ) . '.xs';
-    $self->$add_unless($xs_filename, undent(<<"      ---"));
-      #include "EXTERN.h"
-      #include "perl.h"
-      #include "XSUB.h"
-
-      MODULE = $self->{name}         PACKAGE = $self->{name}
-
-      SV *
-      okay()
-          CODE:
-              RETVAL = newSVpv( "ok", 0 );
-          OUTPUT:
-              RETVAL
-
-      const char *
-      xs_version()
-          CODE:
-        RETVAL = XS_VERSION;
-          OUTPUT:
-        RETVAL
-
-      const char *
-      version()
-          CODE:
-        RETVAL = VERSION;
-          OUTPUT:
-        RETVAL
-      ---
-
-  # 5.6 is missing const char * in its typemap
-  $self->$add_unless('typemap', undent(<<"      ---"));
-      const char *\tT_PV
-      ---
-
-  $self->$add_unless('t/basic.t', undent(<<"    ---"));
-    use Test::More tests => 2;
-    use strict;
-
-    use $self->{name};
-    ok 1;
-
-    ok( $self->{name}::okay() eq 'ok' );
-    ---
-  }
-}
-
-sub _gen_manifest {
-  my $self     = shift;
-  my $manifest = shift;
-
-  my $fh = IO::File->new( ">$manifest" ) or do {
-    die "Can't write '$manifest'\n";
-  };
-
-  my @files = ( 'MANIFEST', keys %{$self->{filedata}} );
-  my $data = join( "\n", sort @files ) . "\n";
-  print $fh $data;
-  close( $fh );
-
-  $self->{filedata}{MANIFEST} = $data;
-  $self->{pending}{change}{MANIFEST} = 1;
-}
-
-sub name { shift()->{name} }
-
-sub dirname {
-  my $self = shift;
-  my $dist = $self->{distdir} || join( '-', split( /::/, $self->{name} ) );
-  return File::Spec->catdir( $self->{dir}, $dist );
-}
-
-sub _real_filename {
-  my $self = shift;
-  my $filename = shift;
-  return File::Spec->catfile( split( /\//, $filename ) );
-}
-
-sub regen {
-  my $self = shift;
-  my %opts = @_;
-
-  my $dist_dirname = $self->dirname;
-
-  if ( $opts{clean} ) {
-    $self->clean() if -d $dist_dirname;
-  } else {
-    # TODO: This might leave dangling directories; e.g. if the removed file
-    # is 'lib/Simple/Simon.pm', the directory 'lib/Simple' will be left
-    # even if there are no files left in it. However, clean() will remove it.
-    my @files = keys %{$self->{pending}{remove}};
-    foreach my $file ( @files ) {
-      my $real_filename = $self->_real_filename( $file );
-      my $fullname = File::Spec->catfile( $dist_dirname, $real_filename );
-      if ( -e $fullname ) {
-        1 while unlink( $fullname );
-      }
-      print "Unlinking pending file '$file'\n" if $VERBOSE;
-      delete( $self->{pending}{remove}{$file} );
-    }
-  }
-
-  foreach my $file ( keys( %{$self->{filedata}} ) ) {
-    my $real_filename = $self->_real_filename( $file );
-    my $fullname = File::Spec->catfile( $dist_dirname, $real_filename );
-
-    if  ( ! -e $fullname ||
-        (   -e $fullname && $self->{pending}{change}{$file} ) ) {
-
-      print "Changed file '$file'.\n" if $VERBOSE;
-
-      my $dirname = File::Basename::dirname( $fullname );
-      unless ( -d $dirname ) {
-        File::Path::mkpath( $dirname ) or do {
-          die "Can't create '$dirname'\n";
-        };
-      }
-
-      if ( -e $fullname ) {
-        1 while unlink( $fullname );
-      }
-
-      my $fh = IO::File->new(">$fullname") or do {
-        die "Can't write '$fullname'\n";
-      };
-      print $fh $self->{filedata}{$file};
-      close( $fh );
-    }
-
-    delete( $self->{pending}{change}{$file} );
-  }
-
-  my $manifest = File::Spec->catfile( $dist_dirname, 'MANIFEST' );
-  unless ( $self->{no_manifest} ) {
-    if ( -e $manifest ) {
-      1 while unlink( $manifest );
-    }
-    $self->_gen_manifest( $manifest );
-  }
-  return $self;
-}
-
-sub clean {
-  my $self = shift;
-
-  my $here  = Cwd::abs_path();
-  my $there = File::Spec->rel2abs( $self->dirname() );
-
-  if ( -d $there ) {
-    chdir( $there ) or die "Can't change directory to '$there'\n";
-  } else {
-    die "Distribution not found in '$there'\n";
-  }
-
-  my %names;
-  tie %names, 'Tie::CPHash';
-  foreach my $file ( keys %{$self->{filedata}} ) {
-    my $filename = $self->_real_filename( $file );
-    $filename = lc($filename) if $vms_lower_case;
-    my $dirname = File::Basename::dirname( $filename );
-
-    $names{$filename} = 0;
-
-    print "Splitting '$dirname'\n" if $VERBOSE;
-    my @dirs = File::Spec->splitdir( $dirname );
-    while ( @dirs ) {
-      my $dir = ( scalar(@dirs) == 1
-                  ? $dirname
-                  : File::Spec->catdir( @dirs ) );
-      if (length $dir) {
-        print "Setting directory name '$dir' in \%names\n" if $VERBOSE;
-        $names{$dir} = 0;
-      }
-      pop( @dirs );
-    }
-  }
-
-  File::Find::finddepth( sub {
-    my $name = File::Spec->canonpath( $File::Find::name );
-
-    if ($vms_mode) {
-        if ($name ne '.') {
-            $name =~ s/\.\z//;
-            $name = vmspath($name) if -d $name;
-        }
-    }
-    if ($^O eq 'VMS') {
-        $name = File::Spec->rel2abs($name) if $name eq File::Spec->curdir();
-    }
-
-    if ( not exists $names{$name} ) {
-      print "Removing '$name'\n" if $VERBOSE;
-      File::Path::rmtree( $_ );
-    }
-  }, ($^O eq 'VMS' ? './' : File::Spec->curdir) );
-
-  chdir_all( $here );
-  return $self;
-}
-
-sub add_file {
-  my $self = shift;
-  $self->change_file( @_ );
-}
-
-sub remove_file {
-  my $self = shift;
-  my $file = shift;
-  unless ( exists $self->{filedata}{$file} ) {
-    warn "Can't remove '$file': It does not exist.\n" if $VERBOSE;
-  }
-  delete( $self->{filedata}{$file} );
-  $self->{pending}{remove}{$file} = 1;
-  return $self;
-}
-
-sub change_build_pl {
-  my ($self, @opts) = @_;
-
-  my $opts = ref $opts[0] eq 'HASH' ? $opts[0] : { @opts };
-
-  local $Data::Dumper::Terse = 1;
-  (my $args = Dumper($opts)) =~ s/^\s*\{|\}\s*$//g;
-
-  $self->change_file( 'Build.PL', undent(<<"    ---") );
-    use strict;
-    use warnings;
-    use Module::Build;
-    my \$b = Module::Build->new(
-    # Some CPANPLUS::Dist::Build versions need to allow mismatches
-    # On logic: thanks to Module::Install, CPAN.pm must set both keys, but
-    # CPANPLUS sets only the one
-    allow_mb_mismatch => (
-      \$ENV{PERL5_CPANPLUS_IS_RUNNING} && ! \$ENV{PERL5_CPAN_IS_RUNNING} ? 1 : 0
-    ),
-    $args
-    );
-    \$b->create_build_script();
-    ---
-  return $self;
-}
-
-sub change_file {
-  my $self = shift;
-  my $file = shift;
-  my $data = shift;
-  $self->{filedata}{$file} = $data;
-  $self->{pending}{change}{$file} = 1;
-  return $self;
-}
-
-sub get_file {
-  my $self = shift;
-  my $file = shift;
-  exists($self->{filedata}{$file}) or croak("no such entry: '$file'");
-  return $self->{filedata}{$file};
-}
-
-sub chdir_in {
-  my $self = shift;
-  $self->{original_dir} ||= Cwd::cwd; # only once!
-  my $dir = $self->dirname;
-  chdir($dir) or die "Can't chdir to '$dir': $!";
-  return $self;
-}
-########################################################################
-
-sub did_chdir { exists shift()->{original_dir} }
-
-########################################################################
-
-sub chdir_original {
-  my $self = shift;
-
-  my $dir = delete $self->{original_dir};
-  chdir_all($dir) or die "Can't chdir to '$dir': $!";
-  return $self;
-}
-########################################################################
-
-sub new_from_context {
-  my ($self, @args) = @_;
-  require Module::Build;
-  return Module::Build->new_from_context( quiet => 1, @args );
-}
-
-sub run_build_pl {
-  my ($self, @args) = @_;
-  require Module::Build;
-  return Module::Build->run_perl_script('Build.PL', [], [@args])
-}
-
-sub run_build {
-  my ($self, @args) = @_;
-  require Module::Build;
-  my $build_script = $^O eq 'VMS' ? 'Build.com' : 'Build';
-  return Module::Build->run_perl_script($build_script, [], [@args])
-}
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-DistGen - Creates simple distributions for testing.
-
-=head1 SYNOPSIS
-
-  use DistGen;
-
-  # create distribution and prepare to test
-  my $dist = DistGen->new(name => 'Foo::Bar');
-  $dist->chdir_in;
-
-  # change distribution files
-  $dist->add_file('t/some_test.t', $contents);
-  $dist->change_file('MANIFEST.SKIP', $new_contents);
-  $dist->remove_file('t/some_test.t');
-  $dist->regen;
-
-  # undo changes and clean up extraneous files
-  $dist->revert;
-  $dist->clean;
-
-  # exercise the command-line interface
-  $dist->run_build_pl();
-  $dist->run_build('test');
-
-  # start over as a new distribution
-  $dist->reset( name => 'Foo::Bar', xs => 1 );
-  $dist->chdir_in;
-
-=head1 USAGE
-
-A DistGen object manages a set of files in a distribution directory.
-
-The C<new()> constructor initializes the object and creates an empty
-directory for the distribution. It does not create files or chdir into
-the directory.  The C<reset()> method re-initializes the object in a
-new directory with new parameters.  It also does not create files or change
-the current directory.
-
-Some methods only define the target state of the distribution.  They do B<not>
-make any changes to the filesystem:
-
-  add_file
-  change_file
-  change_build_pl
-  remove_file
-  revert
-
-Other methods then change the filesystem to match the target state of
-the distribution:
-
-  clean
-  regen
-  remove
-
-Other methods are provided for a convenience during testing. The
-most important is the one to enter the distribution directory:
-
-  chdir_in
-
-Additional methods portably encapsulate running Build.PL and Build:
-
-  run_build_pl
-  run_build
-
-=head1 API
-
-=head2 Constructors
-
-=head3 new()
-
-Create a new object and an empty directory to hold the distribution's files.
-If no C<dir> option is provided, it defaults to MBTest->tmpdir, which sets
-a different temp directory for Perl core testing and CPAN testing.
-
-The C<new> method does not write any files -- see L</regen()> below.
-
-  my $dist = DistGen->new(
-    name        => 'Foo::Bar',
-    dir         => MBTest->tmpdir,
-    xs          => 1,
-    no_manifest => 0,
-  );
-
-The parameters are as follows.
-
-=over
-
-=item name
-
-The name of the module this distribution represents. The default is
-'Simple'.  This should be a "Foo::Bar" (module) name, not a "Foo-Bar"
-dist name.
-
-=item dir
-
-The (parent) directory in which to create the distribution directory.  The
-distribution will be created under this according to C<distdir> parameter
-below.  Defaults to a temporary directory.
-
-  $dist = DistGen->new( dir => '/tmp/MB-test' );
-  $dist->regen;
-
-  # distribution files have been created in /tmp/MB-test/Simple
-
-=item distdir
-
-The name of the distribution directory to create.  Defaults to the dist form of
-C<name>, e.g. 'Foo-Bar' if C<name> is 'Foo::Bar'.
-
-=item xs
-
-If true, generates an XS based module.
-
-=item no_manifest
-
-If true, C<regen()> will not create a MANIFEST file.
-
-=back
-
-The following files are added as part of the default distribution:
-
-  Build.PL
-  lib/Simple.pm # based on name parameter
-  t/basic.t
-
-If an XS module is generated, Simple.pm and basic.t are different and
-the following files are also added:
-
-  typemap
-  lib/Simple.xs # based on name parameter
-
-=head3 reset()
-
-The C<reset> method re-initializes the object as if it were generated
-from a fresh call to C<new>.  It takes the same optional parameters as C<new>.
-
-  $dist->reset( name => 'Foo::Bar', xs => 0 );
-
-=head2 Adding and editing files
-
-Note that C<$filename> should always be specified with unix-style paths,
-and are relative to the distribution root directory, e.g. C<lib/Module.pm>.
-
-No changes are made to the filesystem until the distribution is regenerated.
-
-=head3 add_file()
-
-Add a $filename containing $content to the distribution.
-
-  $dist->add_file( $filename, $content );
-
-=head3 change_file()
-
-Changes the contents of $filename to $content. No action is performed
-until the distribution is regenerated.
-
-  $dist->change_file( $filename, $content );
-
-=head3 change_build_pl()
-
-A wrapper around change_file specifically for setting Build.PL.  Instead
-of file C<$content>, it takes a hash-ref of Module::Build constructor
-arguments:
-
-  $dist->change_build_pl(
-    {
-      module_name         => $dist->name,
-      dist_version        => '3.14159265',
-      license             => 'perl',
-      create_readme       => 1,
-    }
-  );
-
-=head3 get_file
-
-Retrieves the target contents of C<$filename>.
-
-  $content = $dist->get_file( $filename );
-
-=head3 remove_file()
-
-Removes C<$filename> from the distribution.
-
-  $dist->remove_file( $filename );
-
-=head3 revert()
-
-Returns the object to its initial state, or given a $filename it returns that
-file to its initial state if it is one of the built-in files.
-
-  $dist->revert;
-  $dist->revert($filename);
-
-=head2 Changing the distribution directory
-
-These methods immediately affect the filesystem.
-
-=head3 regen()
-
-Regenerate all missing or changed files.  Also deletes any files
-flagged for removal with remove_file().
-
-  $dist->regen(clean => 1);
-
-If the optional C<clean> argument is given, it also calls C<clean>.  These
-can also be chained like this, instead:
-
-  $dist->clean->regen;
-
-=head3 clean()
-
-Removes any files that are not part of the distribution.
-
-  $dist->clean;
-
-=head3 remove()
-
-Changes back to the original directory and removes the distribution
-directory (but not the temporary directory set during C<new()>).
-
-  $dist = DistGen->new->chdir->regen;
-  # ... do some testing ...
-
-  $dist->remove->chdir_in->regen;
-  # ... do more testing ...
-
-This is like a more aggressive form of C<clean>.  Generally, calling C<clean>
-and C<regen> should be sufficient.
-
-=head2 Changing directories
-
-=head3 chdir_in
-
-Change directory into the dist root.
-
-  $dist->chdir_in;
-
-=head3 chdir_original
-
-Returns to whatever directory you were in before chdir_in() (regardless
-of the cwd.)
-
-  $dist->chdir_original;
-
-=head2 Command-line helpers
-
-These use Module::Build->run_perl_script() to ensure that Build.PL or Build are
-run in a separate process using the current perl interpreter.  (Module::Build
-is loaded on demand).  They also ensure appropriate naming for operating
-systems that require a suffix for Build.
-
-=head3 run_build_pl
-
-Runs Build.PL using the current perl interpreter.  Any arguments are
-passed on the command line.
-
-  $dist->run_build_pl('--quiet');
-
-=head3 run_build
-
-Runs Build using the current perl interpreter.  Any arguments are
-passed on the command line.
-
-  $dist->run_build(qw/test --verbose/);
-
-=head2 Properties
-
-=head3 name()
-
-Returns the name of the distribution.
-
-  $dist->name: # e.g. Foo::Bar
-
-=head3 dirname()
-
-Returns the directory where the distribution is created.
-
-  $dist->dirname; # e.g. t/_tmp/Simple
-
-=head2 Functions
-
-=head3 undent()
-
-Removes leading whitespace from a multi-line string according to the
-amount of whitespace on the first line.
-
-  my $string = undent("  foo(\n    bar => 'baz'\n  )");
-  $string eq "foo(
-    bar => 'baz'
-  )";
-
-=cut
-
-# vim:ts=2:sw=2:et:sta
@@ -1,7 +1,6 @@
 package ENDPOD;
 use strict;
 use warnings;
-use utf8;
 
 
 1;
@@ -1,280 +0,0 @@
-package MBTest;
-
-use strict;
-use warnings;
-
-use IO::File ();
-use File::Spec;
-use File::Temp ();
-use File::Path ();
-
-
-# Setup the code to clean out %ENV
-BEGIN {
-    # Environment variables which might effect our testing
-    my @delete_env_keys = qw(
-        HOME
-        DEVEL_COVER_OPTIONS
-        MODULEBUILDRC
-        PERL_MB_OPT
-        HARNESS_TIMER
-        HARNESS_OPTIONS
-        HARNESS_VERBOSE
-        PREFIX
-        INSTALL_BASE
-        INSTALLDIRS
-    );
-
-    # Remember the ENV values because on VMS %ENV is global
-    # to the user, not the process.
-    my %restore_env_keys;
-
-    sub clean_env {
-        for my $key (@delete_env_keys) {
-            if( exists $ENV{$key} ) {
-                $restore_env_keys{$key} = delete $ENV{$key};
-            }
-            else {
-                delete $ENV{$key};
-            }
-        }
-    }
-
-    END {
-        while( my($key, $val) = each %restore_env_keys ) {
-            $ENV{$key} = $val;
-        }
-    }
-}
-
-
-BEGIN {
-  clean_env();
-
-  # In case the test wants to use our other bundled
-  # modules, make sure they can be loaded.
-  my $t_lib = File::Spec->catdir('t', 'bundled');
-  push @INC, $t_lib; # Let user's installed version override
-
-  if ($ENV{PERL_CORE}) {
-    # We change directories, so expand @INC and $^X to absolute paths
-    # Also add .
-    @INC = (map(File::Spec->rel2abs($_), @INC), ".");
-    $^X = File::Spec->rel2abs($^X);
-  }
-}
-
-use Exporter;
-use Test::More;
-use Config;
-use Cwd ();
-
-# We pass everything through to Test::More
-use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS $TODO);
-$VERSION = 0.01_01;
-@ISA = qw(Test::More); # Test::More isa Exporter
-@EXPORT = @Test::More::EXPORT;
-%EXPORT_TAGS = %Test::More::EXPORT_TAGS;
-
-# We have a few extra exports, but Test::More has a special import()
-# that won't take extra additions.
-my @extra_exports = qw(
-  stdout_of
-  stderr_of
-  stdout_stderr_of
-  slurp
-  find_in_path
-  check_compiler
-  have_module
-  blib_load
-  timed_out
-);
-push @EXPORT, @extra_exports;
-__PACKAGE__->export(scalar caller, @extra_exports);
-# XXX ^-- that should really happen in import()
-
-
-########################################################################
-
-# always return to the current directory
-{
-  my $cwd = File::Spec->rel2abs(Cwd::cwd);
-
-  sub original_cwd { return $cwd }
-
-  END {
-    # Go back to where you came from!
-    chdir $cwd or die "Couldn't chdir to $cwd";
-  }
-}
-########################################################################
-
-{ # backwards compatible temp filename recipe adapted from perlfaq
-  my $tmp_count = 0;
-  my $tmp_base_name = sprintf("MB-%d-%d", $$, time());
-  sub temp_file_name {
-    sprintf("%s-%04d", $tmp_base_name, ++$tmp_count)
-  }
-}
-########################################################################
-
-# Setup a temp directory
-sub tmpdir {
-  my ($self, @args) = @_;
-  my $dir = $ENV{PERL_CORE} ? MBTest->original_cwd : File::Spec->tmpdir;
-  return File::Temp::tempdir('MB-XXXXXXXX', CLEANUP => 1, DIR => $dir, @args);
-}
-
-BEGIN {
-  $ENV{HOME} = tmpdir; # don't want .modulebuildrc or other things interfering
-}
-
-sub save_handle {
-  my ($handle, $subr) = @_;
-  my $outfile = File::Spec->catfile(File::Spec->tmpdir, temp_file_name());
-
-  local *SAVEOUT;
-  open SAVEOUT, ">&" . fileno($handle)
-    or die "Can't save output handle: $!";
-  open $handle, "> $outfile" or die "Can't create $outfile: $!";
-
-  eval {$subr->()};
-  open $handle, ">&SAVEOUT" or die "Can't restore output: $!";
-
-  my $ret = slurp($outfile);
-  1 while unlink $outfile;
-  return $ret;
-}
-
-sub stdout_of { save_handle(\*STDOUT, @_) }
-sub stderr_of { save_handle(\*STDERR, @_) }
-sub stdout_stderr_of {
-  my $subr = shift;
-  my ($stdout, $stderr);
-  $stdout = stdout_of ( sub {
-      $stderr = stderr_of( $subr )
-  });
-  return wantarray ? ($stdout, $stderr) : $stdout . $stderr;
-}
-
-sub slurp {
-  my $fh = IO::File->new($_[0]) or die "Can't open $_[0]: $!";
-  local $/;
-  return scalar <$fh>;
-}
-
-# Some extensions we should know about if we're looking for executables
-sub exe_exts {
-
-  if ($^O eq 'MSWin32') {
-    return split($Config{path_sep}, $ENV{PATHEXT} || '.com;.exe;.bat');
-  }
-  if ($^O eq 'os2') {
-    return qw(.exe .com .pl .cmd .bat .sh .ksh);
-  }
-  return;
-}
-
-sub find_in_path {
-  my $thing = shift;
-
-  my @exe_ext = exe_exts();
-  if ( File::Spec->file_name_is_absolute( $thing ) ) {
-    foreach my $ext ( '', @exe_ext ) {
-      return "$thing$ext" if -e "$thing$ext";
-    }
-  }
-  else {
-    my @path = split $Config{path_sep}, $ENV{PATH};
-    foreach (@path) {
-      my $fullpath = File::Spec->catfile($_, $thing);
-      foreach my $ext ( '', @exe_ext ) {
-        return "$fullpath$ext" if -e "$fullpath$ext";
-      }
-    }
-  }
-  return;
-}
-
-sub check_compiler {
-  return (1,1) if $ENV{PERL_CORE};
-
-  local $SIG{__WARN__} = sub {};
-
-  blib_load('Module::Build');
-  my $mb = Module::Build->current;
-  $mb->verbose( 0 );
-
-  my $have_c_compiler;
-  stderr_of( sub {$have_c_compiler = $mb->have_c_compiler} );
-
-  # check noexec tmpdir
-  my $tmp_exec;
-  if ( $have_c_compiler ) {
-    my $dir = MBTest->tmpdir;
-    my $c_file = File::Spec->catfile($dir,'test.c');
-    open my $fh, ">", $c_file;
-    print {$fh} "int main() { return 0; }\n";
-    close $fh;
-    my $exe = $mb->cbuilder->link_executable(
-      objects => $mb->cbuilder->compile( source => $c_file )
-    );
-    $tmp_exec = 0 == system( $exe );
-  }
-  return ($have_c_compiler, $tmp_exec);
-}
-
-sub have_module {
-  my $module = shift;
-  return eval "require $module; 1";
-}
-
-sub blib_load {
-  # Load the given module and ensure it came from blib/, not the larger system
-  my $mod = shift;
-  have_module($mod) or die "Error loading $mod\: $@\n";
-
-  (my $path = $mod) =~ s{::}{/}g;
-  $path .= ".pm";
-  my ($pkg, $file, $line) = caller;
-  unless($ENV{PERL_CORE}) {
-    unless($INC{$path} =~ m/\bblib\b/) {
-      (my $load_from = $INC{$path}) =~ s{$path$}{};
-      die "$mod loaded from '$load_from'\nIt should have been loaded from blib.  \@INC contains:\n  ",
-      join("\n  ", @INC) . "\nFatal error occured in blib_load() at $file, line $line.\n";
-    }
-  }
-}
-
-sub timed_out {
-  my ($sub, $timeout) = @_;
-  return unless $sub;
-  $timeout ||= 60;
-
-  my $saw_alarm = 0;
-  eval {
-    local $SIG{ALRM} = sub { $saw_alarm++; die "alarm\n"; }; # NB: \n required
-    alarm $timeout;
-    $sub->();
-    alarm 0;
-  };
-  if ($@) {
-    die unless $@ eq "alarm\n";   # propagate unexpected errors
-  }
-  return $saw_alarm;
-}
-
-sub check_EUI {
-  my $timed_out;
-  stdout_stderr_of( sub {
-      $timed_out = timed_out( sub {
-          ExtUtils::Installed->new(extra_libs => [@INC])
-        }
-      );
-    }
-  );
-  return ! $timed_out;
-}
-
-1;
-# vim:ts=2:sw=2:et:sta
@@ -1,195 +0,0 @@
-#---------------------------------------------------------------------
-package Tie::CPHash;
-#
-# Copyright 1997 Christopher J. Madsen
-#
-# Author: Christopher J. Madsen <cjm@pobox.com>
-# Created: 08 Nov 1997
-# $Revision$  $Date$
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See either the
-# GNU General Public License or the Artistic License for more details.
-#
-# Case preserving but case insensitive hash
-#---------------------------------------------------------------------
-
-require 5.000;
-use strict;
-use warnings;
-use vars qw(@ISA $VERSION);
-
-@ISA = qw();
-
-#=====================================================================
-# Package Global Variables:
-
-$VERSION = '1.02';
-
-#=====================================================================
-# Tied Methods:
-#---------------------------------------------------------------------
-# TIEHASH classname
-#      The method invoked by the command `tie %hash, classname'.
-#      Associates a new hash instance with the specified class.
-
-sub TIEHASH
-{
-    bless {}, $_[0];
-} # end TIEHASH
-
-#---------------------------------------------------------------------
-# STORE this, key, value
-#      Store datum *value* into *key* for the tied hash *this*.
-
-sub STORE
-{
-    $_[0]->{lc $_[1]} = [ $_[1], $_[2] ];
-} # end STORE
-
-#---------------------------------------------------------------------
-# FETCH this, key
-#      Retrieve the datum in *key* for the tied hash *this*.
-
-sub FETCH
-{
-    my $v = $_[0]->{lc $_[1]};
-    ($v ? $v->[1] : undef);
-} # end FETCH
-
-#---------------------------------------------------------------------
-# FIRSTKEY this
-#      Return the (key, value) pair for the first key in the hash.
-
-sub FIRSTKEY
-{
-    my $a = scalar keys %{$_[0]};
-    &NEXTKEY;
-} # end FIRSTKEY
-
-#---------------------------------------------------------------------
-# NEXTKEY this, lastkey
-#      Return the next (key, value) pair for the hash.
-
-sub NEXTKEY
-{
-    my $v = (each %{$_[0]})[1];
-    ($v ? $v->[0] : undef );
-} # end NEXTKEY
-
-#---------------------------------------------------------------------
-# SCALAR this
-#     Return bucket usage information for the hash (0 if empty).
-
-sub SCALAR
-{
-    scalar %{$_[0]};
-} # end SCALAR
-
-#---------------------------------------------------------------------
-# EXISTS this, key
-#     Verify that *key* exists with the tied hash *this*.
-
-sub EXISTS
-{
-    exists $_[0]->{lc $_[1]};
-} # end EXISTS
-
-#---------------------------------------------------------------------
-# DELETE this, key
-#     Delete the key *key* from the tied hash *this*.
-#     Returns the old value, or undef if it didn't exist.
-
-sub DELETE
-{
-    my $v = delete $_[0]->{lc $_[1]};
-    ($v ? $v->[1] : undef);
-} # end DELETE
-
-#---------------------------------------------------------------------
-# CLEAR this
-#     Clear all values from the tied hash *this*.
-
-sub CLEAR
-{
-    %{$_[0]} = ();
-} # end CLEAR
-
-#=====================================================================
-# Other Methods:
-#---------------------------------------------------------------------
-# Return the case of KEY.
-
-sub key
-{
-    my $v = $_[0]->{lc $_[1]};
-    ($v ? $v->[0] : undef);
-}
-
-#=====================================================================
-# Package Return Value:
-
-1;
-
-__END__
-
-=head1 NAME
-
-Tie::CPHash - Case preserving but case insensitive hash table
-
-=head1 SYNOPSIS
-
-    require Tie::CPHash;
-    tie %cphash, 'Tie::CPHash';
-
-    $cphash{'Hello World'} = 'Hi there!';
-    printf("The key `%s' was used to store `%s'.\n",
-           tied(%cphash)->key('HELLO WORLD'),
-           $cphash{'HELLO world'});
-
-=head1 DESCRIPTION
-
-The B<Tie::CPHash> module provides a hash table that is case
-preserving but case insensitive.  This means that
-
-    $cphash{KEY}    $cphash{key}
-    $cphash{Key}    $cphash{keY}
-
-all refer to the same entry.  Also, the hash remembers which form of
-the key was last used to store the entry.  The C<keys> and C<each>
-functions will return the key that was used to set the value.
-
-An example should make this clear:
-
-    tie %h, 'Tie::CPHash';
-    $h{Hello} = 'World';
-    print $h{HELLO};            # Prints 'World'
-    print keys(%h);             # Prints 'Hello'
-    $h{HELLO} = 'WORLD';
-    print $h{hello};            # Prints 'WORLD'
-    print keys(%h);             # Prints 'HELLO'
-
-The additional C<key> method lets you fetch the case of a specific key:
-
-    # When run after the previous example, this prints 'HELLO':
-    print tied(%h)->key('Hello');
-
-(The C<tied> function returns the object that C<%h> is tied to.)
-
-If you need a case insensitive hash, but don't need to preserve case,
-just use C<$hash{lc $key}> instead of C<$hash{$key}>.  This has a lot
-less overhead than B<Tie::CPHash>.
-
-=head1 AUTHOR
-
-Christopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>
-
-=cut
-
-# Local Variables:
-# tmtrack-file-task: "Tie::CPHash.pm"
-# End:
@@ -4,14 +4,19 @@
 
 use strict;
 use warnings;
-use lib 't/lib';
+use Test::More 0.82;
 use IO::File;
-use MBTest;
+use File::Spec;
+use File::Temp;
+use File::Basename;
+use Cwd ();
+use File::Path;
+use Data::Dumper;
 
 my $undef;
 
 # parse various module $VERSION lines
-# these will be reversed later to create %modules
+# format: expected version => code snippet
 my @modules = (
   $undef => <<'---', # no $VERSION line
 package Simple;
@@ -146,15 +151,15 @@ our $VERSION = "1.23";
   package Simple;
   use version; our $VERSION = version->new('1.23');
 ---
-  '1.23' => <<'---', # $VERSION using version.pm and qv()
+  'v1.230' => <<'---', # $VERSION using version.pm and qv()
   package Simple;
   use version; our $VERSION = qv('1.230');
 ---
-  '1.23' => <<'---', # Two version assignments, should ignore second one
+  '1.230' => <<'---', # Two version assignments, should ignore second one
   $Simple::VERSION = '1.230';
   $Simple::VERSION = eval $Simple::VERSION;
 ---
-  '1.23' => <<'---', # declared & defined on same line with 'our'
+  '1.230000' => <<'---', # declared & defined on same line with 'our'
 package Simple;
 our $VERSION = '1.23_00_00';
 ---
@@ -217,8 +222,8 @@ package Simple;
 }
 ---
 );
-my %modules = reverse @modules;
 
+# format: expected package name => code snippet
 my @pkg_names = (
   [ 'Simple' ] => <<'---', # package NAME
 package Simple;
@@ -257,99 +262,161 @@ package Simple''Edward;
 package Simple-Edward;
 ---
 );
-my %pkg_names = reverse @pkg_names;
 
-plan tests => 54 + (2 * keys( %modules )) + (2 * keys( %pkg_names ));
+# 2 tests per each pair of @modules (plus 1 for defined keys), 2 per pair of @pkg_names
+plan tests => 63
+  + ( @modules + grep { defined $modules[2*$_] } 0..$#modules/2 )
+  + ( @pkg_names );
 
 require_ok('Module::Metadata');
 
-# class method C<find_module_by_name>
-my $module = Module::Metadata->find_module_by_name(
-               'Module::Metadata' );
-ok( -e $module, 'find_module_by_name() succeeds' );
+{
+    # class method C<find_module_by_name>
+    my $module = Module::Metadata->find_module_by_name(
+                   'Module::Metadata' );
+    ok( -e $module, 'find_module_by_name() succeeds' );
+}
 
 #########################
 
-my $tmp = MBTest->tmpdir;
-
-use DistGen;
-my $dist = DistGen->new( dir => $tmp );
-$dist->regen;
+BEGIN {
+  my $cwd = File::Spec->rel2abs(Cwd::cwd);
+  sub original_cwd { return $cwd }
+}
 
-$dist->chdir_in;
+# Setup a temp directory
+sub tmpdir {
+  my (@args) = @_;
+  my $dir = $ENV{PERL_CORE} ? original_cwd : File::Spec->tmpdir;
+  return File::Temp::tempdir('MMD-XXXXXXXX', CLEANUP => 0, DIR => $dir, @args);
+}
 
+my $tmp;
+BEGIN { $tmp = tmpdir; diag "using temp dir $tmp"; }
 
-# fail on invalid module name
-my $pm_info = Module::Metadata->new_from_module(
-		'Foo::Bar', inc => [] );
-ok( !defined( $pm_info ), 'fail if can\'t find module by module name' );
+END {
+  die "tests failed; leaving temp dir $tmp behind"
+    if $ENV{AUTHOR_TESTING} and not Test::Builder->new->is_passing;
+  diag "removing temp dir $tmp";
+  chdir original_cwd;
+  File::Path::rmtree($tmp);
+}
 
+# generates a new distribution:
+# files => { relative filename => $content ... }
+# returns the name of the distribution (not including version),
+# and the absolute path name to the dist.
+{
+  my $test_num = 0;
+  sub new_dist {
+    my %opts = @_;
+
+    my $distname = 'Simple' . $test_num++;
+    my $distdir = File::Spec->catdir($tmp, $distname);
+    note "using dist $distname in $distdir";
+
+    File::Path::mkpath($distdir) or die "failed to create '$distdir'";
+
+    foreach my $rel_filename (keys %{$opts{files}})
+    {
+      my $abs_filename = File::Spec->catfile($distdir, $rel_filename);
+      my $dirname = File::Basename::dirname($abs_filename);
+      unless (-d $dirname) {
+        File::Path::mkpath($dirname) or die "Can't create '$dirname'";
+      }
+
+      note "creating $abs_filename";
+      my $fh = IO::File->new(">$abs_filename") or die "Can't write '$abs_filename'\n";
+      print $fh $opts{files}{$rel_filename};
+      close $fh;
+    }
 
-# fail on invalid filename
-my $file = File::Spec->catfile( 'Foo', 'Bar.pm' );
-$pm_info = Module::Metadata->new_from_file( $file, inc => [] );
-ok( !defined( $pm_info ), 'fail if can\'t find module by file name' );
+    chdir $distdir;
+    return ($distname, $distdir);
+  }
+}
 
+{
+  # fail on invalid module name
+  my $pm_info = Module::Metadata->new_from_module(
+                  'Foo::Bar', inc => [] );
+  ok( !defined( $pm_info ), 'fail if can\'t find module by module name' );
+}
 
-# construct from module filename
-$file = File::Spec->catfile( 'lib', split( /::/, $dist->name ) ) . '.pm';
-$pm_info = Module::Metadata->new_from_file( $file );
-ok( defined( $pm_info ), 'new_from_file() succeeds' );
+{
+  # fail on invalid filename
+  my $file = File::Spec->catfile( 'Foo', 'Bar.pm' );
+  my $pm_info = Module::Metadata->new_from_file( $file, inc => [] );
+  ok( !defined( $pm_info ), 'fail if can\'t find module by file name' );
+}
 
-# construct from filehandle
-my $handle = IO::File->new($file);
-$pm_info = Module::Metadata->new_from_handle( $handle, $file );
-ok( defined( $pm_info ), 'new_from_handle() succeeds' );
-$pm_info = Module::Metadata->new_from_handle( $handle );
-is( $pm_info, undef, "new_from_handle() without filename returns undef" );
-close($handle);
+{
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => "package Simple;\n" });
+
+  # construct from module filename
+  my $pm_info = Module::Metadata->new_from_file( $file );
+  ok( defined( $pm_info ), 'new_from_file() succeeds' );
+
+  # construct from filehandle
+  my $handle = IO::File->new($file);
+  $pm_info = Module::Metadata->new_from_handle( $handle, $file );
+  ok( defined( $pm_info ), 'new_from_handle() succeeds' );
+  $pm_info = Module::Metadata->new_from_handle( $handle );
+  is( $pm_info, undef, "new_from_handle() without filename returns undef" );
+  close($handle);
+}
 
-# construct from module name, using custom include path
-$pm_info = Module::Metadata->new_from_module(
-	     $dist->name, inc => [ 'lib', @INC ] );
-ok( defined( $pm_info ), 'new_from_module() succeeds' );
+{
+  # construct from module name, using custom include path
+  my $pm_info = Module::Metadata->new_from_module(
+               'Simple', inc => [ 'lib', @INC ] );
+  ok( defined( $pm_info ), 'new_from_module() succeeds' );
+}
 
 
-foreach my $module ( sort keys %modules ) {
-    my $expected = $modules{$module};
+# iterate through @modules pairwise
+my $test_case = 0;
+while (++$test_case and my ($expected_version, $code) = splice @modules, 0, 2 ) {
  SKIP: {
-    skip( "No our() support until perl 5.6", 2 )
-        if $] < 5.006 && $module =~ /\bour\b/;
-    skip( "No package NAME VERSION support until perl 5.11.1", 2 )
-        if $] < 5.011001 && $module =~ /package\s+[\w\:\']+\s+v?[0-9._]+/;
+    skip( "No our() support until perl 5.6", (defined $expected_version ? 3 : 2) )
+        if $] < 5.006 && $code =~ /\bour\b/;
+    skip( "No package NAME VERSION support until perl 5.11.1", (defined $expected_version ? 3 : 2) )
+        if $] < 5.011001 && $code =~ /package\s+[\w\:\']+\s+v?[0-9._]+/;
 
-    $dist->change_file( 'lib/Simple.pm', $module );
-    $dist->regen;
+    my $file = File::Spec->catfile('lib', 'Simple.pm');
+    my ($dist_name, $dist_dir) = new_dist(files => { $file => $code });
 
     my $warnings = '';
     local $SIG{__WARN__} = sub { $warnings .= $_ for @_ };
     my $pm_info = Module::Metadata->new_from_file( $file );
 
-    # Test::Builder will prematurely numify objects, so use this form
     my $errs;
     my $got = $pm_info->version;
-    if ( defined $expected ) {
-        ok( $got eq $expected,
-            "correct module version (expected '$expected')" )
-            or $errs++;
-    } else {
-        ok( !defined($got),
-            "correct module version (expected undef)" )
-            or $errs++;
-    }
-    is( $warnings, '', 'no warnings from parsing' ) or $errs++;
-    diag "Got: '$got'\nModule contents:\n$module" if $errs;
+
+    # note that in Test::More 0.94 and earlier, is() stringifies first before comparing;
+    # from 0.95_01 and later, it just lets the objects figure out how to handle 'eq'
+    # We want to ensure we preserve the original, as long as it's legal, so we
+    # explicitly check the stringified form.
+    isa_ok($got, 'version') if defined $expected_version;
+    is(
+      (defined $got ? "$got" : $got),
+      $expected_version,
+      "case $test_case: correct module version ("
+        . (defined $expected_version? "'$expected_version'" : 'undef')
+        . ')'
+    )
+    or $errs++;
+
+    is( $warnings, '', "case $test_case: no warnings from parsing" ) or $errs++;
+    diag Dumper({ got => $pm_info->version, module_contents => $code }) if $errs;
   }
 }
 
-# revert to pristine state
-$dist->regen( clean => 1 );
-
-foreach my $pkg_name ( sort keys %pkg_names ) {
-    my $expected = $pkg_names{$pkg_name};
-
-    $dist->change_file( 'lib/Simple.pm', $pkg_name );
-    $dist->regen;
+$test_case = 0;
+while (++$test_case and my ($expected_name, $code) = splice @pkg_names, 0, 2) {
+    my $file = File::Spec->catfile('lib', 'Simple.pm');
+    my ($dist_name, $dist_dir) = new_dist(files => { $file => $code });
 
     my $warnings = '';
     local $SIG{__WARN__} = sub { $warnings .= $_ for @_ };
@@ -358,18 +425,17 @@ foreach my $pkg_name ( sort keys %pkg_names ) {
     # Test::Builder will prematurely numify objects, so use this form
     my $errs;
     my @got = $pm_info->packages_inside();
-    is_deeply( \@got, $expected,
-               "correct package names (expected '" . join(', ', @$expected) . "')" )
+    is_deeply( \@got, $expected_name,
+               "case $test_case: correct package names (expected '" . join(', ', @$expected_name) . "')" )
             or $errs++;
-    is( $warnings, '', 'no warnings from parsing' ) or $errs++;
-    diag "Got: '" . join(', ', @got) . "'\nModule contents:\n$pkg_name" if $errs;
+    is( $warnings, '', "case $test_case: no warnings from parsing" ) or $errs++;
+    diag "Got: '" . join(', ', @got) . "'\nModule contents:\n$code" if $errs;
 }
 
-# revert to pristine state
-$dist->regen( clean => 1 );
-
-# Find each package only once
-$dist->change_file( 'lib/Simple.pm', <<'---' );
+{
+  # Find each package only once
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple;
 $VERSION = '1.23';
 package Error::Simple;
@@ -377,50 +443,49 @@ $VERSION = '2.34';
 package Simple;
 ---
 
-$dist->regen;
-
-$pm_info = Module::Metadata->new_from_file( $file );
-
-my @packages = $pm_info->packages_inside;
-is( @packages, 2, 'record only one occurence of each package' );
+  my $pm_info = Module::Metadata->new_from_file( $file );
 
+  my @packages = $pm_info->packages_inside;
+  is( @packages, 2, 'record only one occurence of each package' );
+}
 
-# Module 'Simple.pm' does not contain package 'Simple';
-# constructor should not complain, no default module name or version
-$dist->change_file( 'lib/Simple.pm', <<'---' );
+{
+  # Module 'Simple.pm' does not contain package 'Simple';
+  # constructor should not complain, no default module name or version
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple::Not;
 $VERSION = '1.23';
 ---
 
-$dist->regen;
-$pm_info = Module::Metadata->new_from_file( $file );
+  my $pm_info = Module::Metadata->new_from_file( $file );
 
-is( $pm_info->name, undef, 'no default package' );
-is( $pm_info->version, undef, 'no version w/o default package' );
+  is( $pm_info->name, undef, 'no default package' );
+  is( $pm_info->version, undef, 'no version w/o default package' );
+}
 
-# Module 'Simple.pm' contains an alpha version
-# constructor should report first $VERSION found
-$dist->change_file( 'lib/Simple.pm', <<'---' );
+{
+  # Module 'Simple.pm' contains an alpha version
+  # constructor should report first $VERSION found
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple;
 $VERSION = '1.23_01';
 $VERSION = eval $VERSION;
 ---
 
-$dist->regen;
-$pm_info = Module::Metadata->new_from_file( $file );
+  my $pm_info = Module::Metadata->new_from_file( $file );
 
-is( $pm_info->version, '1.23_01', 'alpha version reported');
+  is( $pm_info->version, '1.23_01', 'alpha version reported');
 
-# NOTE the following test has be done this way because Test::Builder is
-# too smart for our own good and tries to see if the version object is a
-# dual-var, which breaks with alpha versions:
-#    Argument "1.23_0100" isn't numeric in addition (+) at
-#    /usr/lib/perl5/5.8.7/Test/Builder.pm line 505.
+  # NOTE the following test has be done this way because Test::Builder is
+  # too smart for our own good and tries to see if the version object is a
+  # dual-var, which breaks with alpha versions:
+  #    Argument "1.23_0100" isn't numeric in addition (+) at
+  #    /usr/lib/perl5/5.8.7/Test/Builder.pm line 505.
 
-ok( $pm_info->version > 1.23, 'alpha version greater than non');
-
-# revert to pristine state
-$dist->regen( clean => 1 );
+  ok( $pm_info->version > 1.23, 'alpha version greater than non');
+}
 
 # parse $VERSION lines scripts for package main
 my @scripts = (
@@ -474,18 +539,18 @@ $::VERSION = 0.01;
 
 my ( $i, $n ) = ( 1, scalar( @scripts ) );
 foreach my $script ( @scripts ) {
-  $dist->change_file( 'bin/simple.plx', $script );
-  $dist->regen;
-  $pm_info = Module::Metadata->new_from_file(
-	       File::Spec->catfile( 'bin', 'simple.plx' ) );
+  my $file = File::Spec->catfile('bin', 'simple.plx');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => $script } );
+  my $pm_info = Module::Metadata->new_from_file( $file );
 
   is( $pm_info->version, '0.01', "correct script version ($i of $n)" );
   $i++;
 }
 
-
-# examine properties of a module: name, pod, etc
-$dist->change_file( 'lib/Simple.pm', <<'---' );
+{
+  # examine properties of a module: name, pod, etc
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple;
 $VERSION = '0.01';
 package Simple::Ex;
@@ -504,44 +569,42 @@ You can find me on the IRC channel
 
 =cut
 ---
-$dist->regen;
 
-$pm_info = Module::Metadata->new_from_module(
-             $dist->name, inc => [ 'lib', @INC ] );
+  my $pm_info = Module::Metadata->new_from_module(
+             'Simple', inc => [ 'lib', @INC ] );
 
-is( $pm_info->name, 'Simple', 'found default package' );
-is( $pm_info->version, '0.01', 'version for default package' );
+  is( $pm_info->name, 'Simple', 'found default package' );
+  is( $pm_info->version, '0.01', 'version for default package' );
 
-# got correct version for secondary package
-is( $pm_info->version( 'Simple::Ex' ), '0.02',
-    'version for secondary package' );
+  # got correct version for secondary package
+  is( $pm_info->version( 'Simple::Ex' ), '0.02',
+      'version for secondary package' );
 
-my $filename = $pm_info->filename;
-ok( defined( $filename ) && -e $filename,
-    'filename() returns valid path to module file' );
+  my $filename = $pm_info->filename;
+  ok( defined( $filename ) && -e $filename,
+      'filename() returns valid path to module file' );
 
-@packages = $pm_info->packages_inside;
-is( @packages, 2, 'found correct number of packages' );
-is( $packages[0], 'Simple', 'packages stored in order found' );
+  my @packages = $pm_info->packages_inside;
+  is( @packages, 2, 'found correct number of packages' );
+  is( $packages[0], 'Simple', 'packages stored in order found' );
 
-# we can detect presence of pod regardless of whether we are collecting it
-ok( $pm_info->contains_pod, 'contains_pod() succeeds' );
+  # we can detect presence of pod regardless of whether we are collecting it
+  ok( $pm_info->contains_pod, 'contains_pod() succeeds' );
 
-my @pod = $pm_info->pod_inside;
-is_deeply( \@pod, [qw(NAME AUTHOR)], 'found all pod sections' );
+  my @pod = $pm_info->pod_inside;
+  is_deeply( \@pod, [qw(NAME AUTHOR)], 'found all pod sections' );
 
-is( $pm_info->pod('NONE') , undef,
-    'return undef() if pod section not present' );
+  is( $pm_info->pod('NONE') , undef,
+      'return undef() if pod section not present' );
 
-is( $pm_info->pod('NAME'), undef,
-    'return undef() if pod section not collected' );
+  is( $pm_info->pod('NAME'), undef,
+      'return undef() if pod section not collected' );
 
 
-# collect_pod
-$pm_info = Module::Metadata->new_from_module(
-             $dist->name, inc => [ 'lib', @INC ], collect_pod => 1 );
+  # collect_pod
+  $pm_info = Module::Metadata->new_from_module(
+               'Simple', inc => [ 'lib', @INC ], collect_pod => 1 );
 
-{
   my %pod;
   for my $section (qw(NAME AUTHOR)) {
     my $content = $pm_info->pod( $section );
@@ -570,7 +633,8 @@ EXPECTED
 
 {
   # test things that look like POD, but aren't
-$dist->change_file( 'lib/Simple.pm', <<'---' );
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple;
 
 =YES THIS STARTS POD
@@ -589,15 +653,15 @@ our $VERSION = '666';
 our $VERSION = '1.23';
 
 ---
-  $dist->regen;
-  $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
+  my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
   is( $pm_info->name, 'Simple', 'found default package' );
   is( $pm_info->version, '1.23', 'version for default package' );
 }
 
 {
   # Make sure processing stops after __DATA__
-  $dist->change_file( 'lib/Simple.pm', <<'---' );
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple;
 $VERSION = '0.01';
 __DATA__
@@ -605,9 +669,8 @@ __DATA__
   foo();
 };
 ---
-  $dist->regen;
 
-  $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
+  my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
   is( $pm_info->name, 'Simple', 'found default package' );
   is( $pm_info->version, '0.01', 'version for default package' );
   my @packages = $pm_info->packages_inside;
@@ -616,15 +679,15 @@ __DATA__
 
 {
   # Make sure we handle version.pm $VERSIONs well
-  $dist->change_file( 'lib/Simple.pm', <<'---' );
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple;
 $VERSION = version->new('0.60.' . (qw$Revision: 128 $)[1]);
 package Simple::Simon;
 $VERSION = version->new('0.61.' . (qw$Revision: 129 $)[1]);
 ---
-  $dist->regen;
 
-  $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
+  my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
   is( $pm_info->name, 'Simple', 'found default package' );
   is( $pm_info->version, '0.60.128', 'version for default package' );
   my @packages = $pm_info->packages_inside;
@@ -634,7 +697,9 @@ $VERSION = version->new('0.61.' . (qw$Revision: 129 $)[1]);
 
 # check that package_versions_from_directory works
 
-$dist->change_file( 'lib/Simple.pm', <<'---' );
+{
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package Simple;
 $VERSION = '0.01';
 package Simple::Ex;
@@ -659,23 +724,22 @@ Simple Simon
 
 =cut
 ---
-$dist->regen;
 
-my $exp_pvfd = {
-  'Simple' => {
-    'file' => 'Simple.pm',
-    'version' => '0.01'
-  },
-  'Simple::Ex' => {
-    'file' => 'Simple.pm',
-    'version' => '0.02'
-  }
-};
+  my $exp_pvfd = {
+    'Simple' => {
+      'file' => 'Simple.pm',
+      'version' => '0.01'
+    },
+    'Simple::Ex' => {
+      'file' => 'Simple.pm',
+      'version' => '0.02'
+    }
+  };
 
-my $got_pvfd = Module::Metadata->package_versions_from_directory('lib');
+  my $got_pvfd = Module::Metadata->package_versions_from_directory('lib');
 
-is_deeply( $got_pvfd, $exp_pvfd, "package_version_from_directory()" )
-  or diag explain $got_pvfd;
+  is_deeply( $got_pvfd, $exp_pvfd, "package_version_from_directory()" )
+    or diag explain $got_pvfd;
 
 {
   my $got_provides = Module::Metadata->provides(dir => 'lib', version => 2);
@@ -710,22 +774,29 @@ is_deeply( $got_pvfd, $exp_pvfd, "package_version_from_directory()" )
   is_deeply( $got_provides, $exp_provides, "provides()" )
     or diag explain $got_provides;
 }
+}
 
 # Check package_versions_from_directory with regard to case-sensitivity
 {
-  $dist->change_file( 'lib/Simple.pm', <<'---' );
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package simple;
 $VERSION = '0.01';
 ---
-  $dist->regen;
 
-  $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
+  my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
   is( $pm_info->name, undef, 'no default package' );
   is( $pm_info->version, undef, 'version for default package' );
   is( $pm_info->version('simple'), '0.01', 'version for lower-case package' );
   is( $pm_info->version('Simple'), undef, 'version for capitalized package' );
+  ok( $pm_info->is_indexable(), 'an indexable package is found' );
+  ok( $pm_info->is_indexable('simple'), 'the simple package is indexable' );
+  ok( !$pm_info->is_indexable('Simple'), 'the Simple package would not be indexed' );
+}
 
-  $dist->change_file( 'lib/Simple.pm', <<'---' );
+{
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
 package simple;
 $VERSION = '0.01';
 package Simple;
@@ -733,12 +804,28 @@ $VERSION = '0.02';
 package SiMpLe;
 $VERSION = '0.03';
 ---
-  $dist->regen;
 
-  $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
+  my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
   is( $pm_info->name, 'Simple', 'found default package' );
   is( $pm_info->version, '0.02', 'version for default package' );
   is( $pm_info->version('simple'), '0.01', 'version for lower-case package' );
   is( $pm_info->version('Simple'), '0.02', 'version for capitalized package' );
   is( $pm_info->version('SiMpLe'), '0.03', 'version for mixed-case package' );
+  ok( $pm_info->is_indexable('simple'), 'the simple package is indexable' );
+  ok( $pm_info->is_indexable('Simple'), 'the Simple package is indexable' );
+}
+
+{
+  my $file = File::Spec->catfile('lib', 'Simple.pm');
+  my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
+package ## hide from PAUSE
+   simple;
+$VERSION = '0.01';
+---
+
+  my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
+  is( $pm_info->name, undef, 'no package names found' );
+  ok( !$pm_info->is_indexable('simple'), 'the simple package would not be indexed' );
+  ok( !$pm_info->is_indexable('Simple'), 'the Simple package would not be indexed' );
+  ok( !$pm_info->is_indexable(), 'no indexable package is found' );
 }
@@ -2,7 +2,6 @@
 use strict;
 use warnings;
 
-use 5.008000;   # for ${^TAINT}
 use Test::More tests => 2;
 use Module::Metadata;
 use Carp 'croak';
@@ -17,7 +16,8 @@ sub exception(&) {
     return $@;
 }
 
-ok(${^TAINT}, 'taint flag is set');
+my $taint_on = ! eval { no warnings; join('',values %ENV), kill 0; 1; };
+ok($taint_on, 'taint flag is set');
 
 # without the fix, we get:
 # Insecure dependency in eval while running with -T switch at lib/Module/Metadata.pm line 668, <GEN0> line 15.
@@ -0,0 +1,50 @@
+use 5.006;
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.041
+
+use Test::More 0.94 tests => 1 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
+
+
+
+my @module_files = (
+    'Module/Metadata.pm'
+);
+
+
+
+# no fake home requested
+
+my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib';
+
+use File::Spec;
+use IPC::Open3;
+use IO::Handle;
+
+open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
+
+my @warnings;
+for my $lib (@module_files)
+{
+    # see L<perlfaq8/How can I capture STDERR from an external command?>
+    my $stderr = IO::Handle->new;
+
+    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]");
+    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+    my @_warnings = <$stderr>;
+    waitpid($pid, 0);
+    is($?, 0, "$lib loaded ok");
+
+    if (@_warnings)
+    {
+        warn @_warnings;
+        push @warnings, @_warnings;
+    }
+}
+
+
+
+is(scalar(@warnings), 0, 'no warnings found') if $ENV{AUTHOR_TESTING};
+
+BAIL_OUT("Compilation problems") if !Test::More->builder->is_passing;
@@ -1,15 +0,0 @@
-use Test::More 0.88;
-use Test::Pod;
-use Test::Pod::Coverage;
-use strict;
-use warnings FATAL => 'all';
-
-# the all_ things attempt to plan, which we didn't want, so stop them
-# from doing that
-no warnings 'redefine';
-local *Test::Builder::plan = sub { };
-
-all_pod_files_ok;
-all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::CountParents' });
-
-done_testing;
@@ -0,0 +1,41 @@
+#!perl
+
+use Test::More tests => 2;
+
+note 'Checking Changes';
+my $changes_file = 'Changes';
+my $newver = '1.000024';
+my $trial_token = '-TRIAL';
+
+SKIP: {
+    ok(-e $changes_file, "$changes_file file exists")
+        or skip 'Changes is missing', 1;
+
+    ok(_get_changes($newver), "$changes_file has content for $newver");
+}
+
+done_testing;
+
+# _get_changes copied and adapted from Dist::Zilla::Plugin::Git::Commit
+# by Jerome Quelin
+sub _get_changes
+{
+    my $newver = shift;
+
+    # parse changelog to find commit message
+    open(my $fh, '<', $changes_file) or die "cannot open $changes_file: $!";
+    my $changelog = join('', <$fh>);
+    close $fh;
+
+    my @content =
+        grep { /^$newver(?:$trial_token)?(?:\s+|$)/ ... /^\S/ } # from newver to un-indented
+        split /\n/, $changelog;
+    shift @content; # drop the version line
+
+    # drop unindented last line and trailing blank lines
+    pop @content while ( @content && $content[-1] =~ /^(?:\S|\s*$)/ );
+
+    # return number of non-blank lines
+    return scalar @content;
+}
+
@@ -0,0 +1,11 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More 0.96 tests => 2;
+use_ok('Test::CPAN::Changes');
+subtest 'changes_ok' => sub {
+    changes_file_ok('Changes');
+};
+done_testing();
@@ -0,0 +1,6 @@
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
+
+use Test::CPAN::Meta;
+
+meta_yaml_ok();
@@ -0,0 +1,8 @@
+use strict;
+use warnings;
+use Test::More;
+
+eval 'use Test::EOL';
+plan skip_all => 'Test::EOL required' if $@;
+
+all_perl_files_ok({ trailing_whitespace => 1 });
@@ -0,0 +1,4 @@
+# this test was generated with Dist::Zilla::Plugin::Test::Kwalitee 2.07
+use strict;
+use warnings;
+use Test::Kwalitee;
@@ -0,0 +1,8 @@
+#!perl
+
+use Test::More;
+
+eval "use Test::MinimumVersion";
+plan skip_all => "Test::MinimumVersion required for testing minimum versions"
+  if $@;
+all_minimum_version_ok( qq{5.006} );
@@ -0,0 +1,12 @@
+#!perl
+
+use strict;
+use warnings qw(all);
+
+use Test::More;
+
+## no critic (ProhibitStringyEval, RequireCheckingReturnValueOfEval)
+eval q(use Test::Mojibake);
+plan skip_all => q(Test::Mojibake required for source encoding testing) if $@;
+
+all_files_encoding_ok();
@@ -0,0 +1,37 @@
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.08
+
+use Test::More 0.88;
+use Test::NoTabs;
+
+my @files = (
+    'lib/Module/Metadata.pm',
+    't/00-report-prereqs.t',
+    't/contains_pod.t',
+    't/encoding.t',
+    't/endpod.t',
+    't/lib/0_1/Foo.pm',
+    't/lib/0_2/Foo.pm',
+    't/lib/ENDPOD.pm',
+    't/metadata.t',
+    't/taint.t',
+    't/version.t',
+    'xt/author/00-compile.t',
+    'xt/release/changes_has_content.t',
+    'xt/release/cpan-changes.t',
+    'xt/release/distmeta.t',
+    'xt/release/eol.t',
+    'xt/release/kwalitee.t',
+    'xt/release/minimum-version.t',
+    'xt/release/mojibake.t',
+    'xt/release/no-tabs.t',
+    'xt/release/pod-coverage.t',
+    'xt/release/pod-no404s.t',
+    'xt/release/pod-syntax.t',
+    'xt/release/portability.t'
+);
+
+notabs_ok($_) foreach @files;
+done_testing;
@@ -0,0 +1,7 @@
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodCoverageTests.
+
+use Test::Pod::Coverage 1.08;
+use Pod::Coverage::TrustPod;
+
+all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' });
@@ -0,0 +1,21 @@
+#!perl
+
+use strict;
+use warnings;
+use Test::More;
+
+foreach my $env_skip ( qw(
+  SKIP_POD_NO404S
+  AUTOMATED_TESTING
+) ){
+  plan skip_all => "\$ENV{$env_skip} is set, skipping"
+    if $ENV{$env_skip};
+}
+
+eval "use Test::Pod::No404s";
+if ( $@ ) {
+  plan skip_all => 'Test::Pod::No404s required for testing POD';
+}
+else {
+  all_pod_files_ok();
+}
@@ -0,0 +1,6 @@
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
+use Test::More;
+use Test::Pod 1.41;
+
+all_pod_files_ok();
@@ -0,0 +1,11 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+eval 'use Test::Portability::Files';
+plan skip_all => 'Test::Portability::Files required for testing portability'
+    if $@;
+run_tests();