[libalien-ffi-perl] 01/02: Import original source of Alien-FFI 0.14

C.J. Collier cjcollier at linuxfoundation.org
Sun Jun 5 22:40:12 UTC 2016


This is an automated email from the git hooks/post-receive script.

cjadamscollier-guest pushed a commit to branch master
in repository libalien-ffi-perl.

commit 01591a8d30441cd33168edcf45ed395121567664
Author: C.J. Collier <cjcollier at linuxfoundation.org>
Date:   Sun Jun 5 15:36:16 2016 -0700

    Import original source of Alien-FFI 0.14
---
 Build.PL                         |  64 +++++++
 Changes                          |  66 +++++++
 INSTALL                          |  43 +++++
 LICENSE                          | 379 +++++++++++++++++++++++++++++++++++++++
 MANIFEST                         |  27 +++
 META.json                        |  80 +++++++++
 META.yml                         |  30 ++++
 README                           |  53 ++++++
 cpanfile                         |  40 +++++
 dist.ini                         |  40 +++++
 inc/My/ModuleBuild.pm            | 114 ++++++++++++
 lib/Alien/FFI.pm                 | 112 ++++++++++++
 t/00_diag.t                      |  84 +++++++++
 t/01_use.t                       |   5 +
 t/compile.t                      |  45 +++++
 xt/release/changes.t             |  27 +++
 xt/release/eol.t                 |  14 ++
 xt/release/fixme.t               |  19 ++
 xt/release/no_tabs.t             |  15 ++
 xt/release/pod.t                 |  15 ++
 xt/release/pod_coverage.t        |  74 ++++++++
 xt/release/pod_spelling_common.t |  27 +++
 xt/release/pod_spelling_system.t | 101 +++++++++++
 xt/release/release.yml           |  24 +++
 xt/release/strict.t              |  15 ++
 xt/release/version.t             |  44 +++++
 26 files changed, 1557 insertions(+)

diff --git a/Build.PL b/Build.PL
new file mode 100644
index 0000000..5733ef8
--- /dev/null
+++ b/Build.PL
@@ -0,0 +1,64 @@
+use strict; use warnings;
+BEGIN {
+  unless(eval q{ use 5.006; 1}) {
+    print "Perl 5.006 or better required\n";
+    exit;
+  }
+}
+
+# This file was automatically generated by Dist::Zilla::Plugin::ModuleBuild v5.043.
+use strict;
+use warnings;
+
+use Module::Build 0.28;
+use lib qw{inc}; use My::ModuleBuild;
+
+my %module_build_args = (
+  "build_requires" => {
+    "Alien::Base" => "0.022",
+    "Module::Build" => "0.28"
+  },
+  "configure_requires" => {
+    "Alien::Base" => "0.022",
+    "Module::Build" => "0.28",
+    "perl" => "5.006"
+  },
+  "dist_abstract" => "Build and make available libffi",
+  "dist_author" => [
+    "Graham Ollis <plicease\@cpan.org>"
+  ],
+  "dist_name" => "Alien-FFI",
+  "dist_version" => "0.14",
+  "license" => "perl",
+  "module_name" => "Alien::FFI",
+  "recursive_test_files" => 1,
+  "requires" => {
+    "Alien::Base" => "0.022",
+    "Alien::Base::ModuleBuild" => "0.022",
+    "perl" => "5.006"
+  },
+  "test_requires" => {
+    "Alien::Base" => "0.022",
+    "Test::More" => "0.94",
+    "perl" => "5.006"
+  }
+);
+
+
+my %fallback_build_requires = (
+  "Alien::Base" => "0.022",
+  "Module::Build" => "0.28",
+  "Test::More" => "0.94",
+  "perl" => "5.006"
+);
+
+
+unless ( eval { Module::Build->VERSION(0.4004) } ) {
+  delete $module_build_args{test_requires};
+  $module_build_args{build_requires} = \%fallback_build_requires;
+}
+
+my $build = My::ModuleBuild->new(%module_build_args);
+
+
+$build->create_build_script;
diff --git a/Changes b/Changes
new file mode 100644
index 0000000..4655683
--- /dev/null
+++ b/Changes
@@ -0,0 +1,66 @@
+Revision history for Alien-FFI
+
+0.14      2016-03-01 12:49:45 -0500
+  - Use Alien::Base::ModuleBuild for configure_requires instead of Alien::Base
+
+0.12      2015-07-15 16:32:45 -0400
+  - Require Alien::Base 0.021 for bug fixes
+
+0.11      2015-04-24 12:41:12 -0400
+  - require Alien::Base 0.017 for bug fixes
+
+0.10      2015-04-22 07:20:59 -0400
+  - use alien_stage_install
+
+0.09      2015-03-18 13:00:16 -0400
+  - Use older version 3.1 when building from source with Microsoft Visual C++
+    newer versions seem to be broken with that compiler
+  - Build with same -arch flags as Perl on Darwin / OS X
+
+0.08      2015-02-24 12:25:47 -0500
+  - Turn off Alien::Base blib detection
+  - Make libs and cflags class methods should work correctly
+    before or after ./Build install
+
+0.07      2015-02-16 18:16:54 -0500
+  - Promote to production
+
+0.06_05   2015-02-16 10:07:27 -0500
+  - Fixed MSWin32 logic, removed MB requirement of 0.4202
+
+0.06_04   2015-02-15 08:17:38 -0500
+  - Bump MB requirement up to 0.4202
+
+0.06_03   2015-02-14 23:25:21 -0500
+  - Only attempt to use Alien::MSYS if it is installed
+
+0.06_02   2015-02-14 08:21:58 -0500
+  - Mark prereqs as "dynamic" as we need Alien::MSYS on Windows
+
+0.06_01   2015-02-13 10:43:04 -0500
+  - Only require Alien::MSYS if we need to do a build from source
+
+0.06      2015-02-03 15:39:48 -0500
+  - Ensure that Alien::Base 0.009 is installed in Build.PL
+
+0.05      2015-01-27 05:03:00 -0500
+  - Require Alien::Base 0.009 which supports multiple argument system
+    This should relax some of the weirdisms in windows
+
+0.04_01   2015-01-25 22:57:40 -0500
+  - work around some weirdisms in windows
+
+0.04      2015-01-23 17:15:50 -0500
+  - bump version requirement for Alien::Base 0.007
+    I am pretty sure this will correct a cpan testers failure that I am seeing
+    in FFI::Platypus.
+
+0.03      2015-01-21 07:30:24 -0500
+  - Work-around for unthreaded OpenBSD.  Basically applied same wonky "fix" as I did to FFI::Raw:
+    https://github.com/plicease/p5-FFI-Raw/commit/e223cf61f599ea7f51e5f5ff088de43028c8f506
+
+0.02      2014-09-11 16:56:51 -0400
+  - make Alien::Base a configure requires
+
+0.01      2014-09-11 14:40:53 -0400
+  - initial version
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..b294ee9
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,43 @@
+This is the Perl distribution Alien-FFI.
+
+Installing Alien-FFI is straightforward.
+
+## Installation with cpanm
+
+If you have cpanm, you only need one line:
+
+    % cpanm Alien::FFI
+
+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 Alien::FFI
+
+## Installing with the CPAN shell
+
+Alternatively, if your CPAN shell is set up, you should just be able to do:
+
+    % cpan Alien::FFI
+
+## Manual installation
+
+As a last resort, you can manually install it. Download the tarball, untar it,
+then build it:
+
+    % perl Build.PL
+    % ./Build && ./Build test
+
+Then install it:
+
+    % ./Build install
+
+If you are installing into a system-wide directory, you may need to run:
+
+    % sudo ./Build install
+
+## Documentation
+
+Alien-FFI documentation is available as POD.
+You can run perldoc from a shell to read the documentation:
+
+    % perldoc Alien::FFI
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..7f60d9c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,379 @@
+This software is copyright (c) 2014 by Graham Ollis.
+
+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) 2014 by Graham Ollis.
+
+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) 2014 by Graham Ollis.
+
+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
+
diff --git a/MANIFEST b/MANIFEST
new file mode 100644
index 0000000..8afc3d2
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,27 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.043.
+Build.PL
+Changes
+INSTALL
+LICENSE
+MANIFEST
+META.json
+META.yml
+README
+cpanfile
+dist.ini
+inc/My/ModuleBuild.pm
+lib/Alien/FFI.pm
+t/00_diag.t
+t/01_use.t
+t/compile.t
+xt/release/changes.t
+xt/release/eol.t
+xt/release/fixme.t
+xt/release/no_tabs.t
+xt/release/pod.t
+xt/release/pod_coverage.t
+xt/release/pod_spelling_common.t
+xt/release/pod_spelling_system.t
+xt/release/release.yml
+xt/release/strict.t
+xt/release/version.t
diff --git a/META.json b/META.json
new file mode 100644
index 0000000..64d4722
--- /dev/null
+++ b/META.json
@@ -0,0 +1,80 @@
+{
+   "abstract" : "Build and make available libffi",
+   "author" : [
+      "Graham Ollis <plicease at cpan.org>"
+   ],
+   "dynamic_config" : "1",
+   "generated_by" : "Dist::Zilla version 5.043, CPAN::Meta::Converter version 2.150005",
+   "license" : [
+      "perl_5"
+   ],
+   "meta-spec" : {
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+      "version" : 2
+   },
+   "name" : "Alien-FFI",
+   "prereqs" : {
+      "build" : {
+         "requires" : {
+            "Alien::Base" : "0.022",
+            "Module::Build" : "0.28"
+         }
+      },
+      "configure" : {
+         "requires" : {
+            "Alien::Base" : "0.022",
+            "Module::Build" : "0.28",
+            "perl" : "5.006"
+         }
+      },
+      "develop" : {
+         "recommends" : {
+            "YAML::XS" : "0"
+         },
+         "requires" : {
+            "File::Spec" : "0",
+            "FindBin" : "0",
+            "Test::CPAN::Changes" : "0",
+            "Test::EOL" : "0",
+            "Test::Fixme" : "0.07",
+            "Test::More" : "0.94",
+            "Test::NoTabs" : "0",
+            "Test::Pod" : "0",
+            "Test::Pod::Coverage" : "0",
+            "Test::Pod::Spelling::CommonMistakes" : "0",
+            "Test::Spelling" : "0",
+            "Test::Strict" : "0",
+            "YAML" : "0"
+         }
+      },
+      "runtime" : {
+         "requires" : {
+            "Alien::Base" : "0.022",
+            "Alien::Base::ModuleBuild" : "0.022",
+            "perl" : "5.006"
+         }
+      },
+      "test" : {
+         "requires" : {
+            "Alien::Base" : "0.022",
+            "Test::More" : "0.94",
+            "perl" : "5.006"
+         }
+      }
+   },
+   "release_status" : "stable",
+   "resources" : {
+      "bugtracker" : {
+         "web" : "https://github.com/plicease/Alien-FFI/issues"
+      },
+      "homepage" : "http://perl.wdlabs.com/Alien-FFI",
+      "repository" : {
+         "type" : "git",
+         "url" : "git://github.com/plicease/Alien-FFI.git",
+         "web" : "https://github.com/plicease/Alien-FFI"
+      },
+      "x_IRC" : "irc://irc.perl.org/#native"
+   },
+   "version" : "0.14"
+}
+
diff --git a/META.yml b/META.yml
new file mode 100644
index 0000000..079e0b8
--- /dev/null
+++ b/META.yml
@@ -0,0 +1,30 @@
+---
+abstract: 'Build and make available libffi'
+author:
+  - 'Graham Ollis <plicease at cpan.org>'
+build_requires:
+  Alien::Base: '0.022'
+  Module::Build: '0.28'
+  Test::More: '0.94'
+  perl: '5.006'
+configure_requires:
+  Alien::Base: '0.022'
+  Module::Build: '0.28'
+  perl: '5.006'
+dynamic_config: '1'
+generated_by: 'Dist::Zilla version 5.043, CPAN::Meta::Converter version 2.150005'
+license: perl
+meta-spec:
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: '1.4'
+name: Alien-FFI
+requires:
+  Alien::Base: '0.022'
+  Alien::Base::ModuleBuild: '0.022'
+  perl: '5.006'
+resources:
+  IRC: irc://irc.perl.org/#native
+  bugtracker: https://github.com/plicease/Alien-FFI/issues
+  homepage: http://perl.wdlabs.com/Alien-FFI
+  repository: git://github.com/plicease/Alien-FFI.git
+version: '0.14'
diff --git a/README b/README
new file mode 100644
index 0000000..1add3d6
--- /dev/null
+++ b/README
@@ -0,0 +1,53 @@
+NAME
+
+    Alien::FFI - Build and make available libffi
+
+VERSION
+
+    version 0.14
+
+SYNOPSIS
+
+    In your Build.PL:
+
+     use Alien::FFI;
+     use Module::Build;
+     
+     my $build = Module::Build->new(
+       ...
+       extra_compiler_flags => Alien::FFI->cflags,
+       extra_linker_flags   => Alien::FFI->libs,
+       ...
+     );
+     
+     $build->create_build_script;
+
+DESCRIPTION
+
+    This distribution installs libffi so that it can be used by other Perl
+    distributions. If already installed for your operating system, and it
+    can be found, this distribution will use the libffi that comes with
+    your operating system, otherwise it will download it from the Internet,
+    build and install it for you.
+
+SEE ALSO
+
+    FFI::Platypus
+
+      Write Perl bindings to non-Perl libraries without C or XS
+
+    FFI::CheckLib
+
+      Check that a library is available for FFI
+
+AUTHOR
+
+    Graham Ollis <plicease at cpan.org>
+
+COPYRIGHT AND LICENSE
+
+    This software is copyright (c) 2014 by Graham Ollis.
+
+    This is free software; you can redistribute it and/or modify it under
+    the same terms as the Perl 5 programming language system itself.
+
diff --git a/cpanfile b/cpanfile
new file mode 100644
index 0000000..15ba241
--- /dev/null
+++ b/cpanfile
@@ -0,0 +1,40 @@
+requires "Alien::Base" => "0.022";
+requires "Alien::Base::ModuleBuild" => "0.022";
+requires "perl" => "5.006";
+
+on 'build' => sub {
+  requires "Alien::Base" => "0.022";
+  requires "Module::Build" => "0.28";
+};
+
+on 'test' => sub {
+  requires "Alien::Base" => "0.022";
+  requires "Test::More" => "0.94";
+  requires "perl" => "5.006";
+};
+
+on 'configure' => sub {
+  requires "Alien::Base" => "0.022";
+  requires "Module::Build" => "0.28";
+  requires "perl" => "5.006";
+};
+
+on 'develop' => sub {
+  requires "File::Spec" => "0";
+  requires "FindBin" => "0";
+  requires "Test::CPAN::Changes" => "0";
+  requires "Test::EOL" => "0";
+  requires "Test::Fixme" => "0.07";
+  requires "Test::More" => "0.94";
+  requires "Test::NoTabs" => "0";
+  requires "Test::Pod" => "0";
+  requires "Test::Pod::Coverage" => "0";
+  requires "Test::Pod::Spelling::CommonMistakes" => "0";
+  requires "Test::Spelling" => "0";
+  requires "Test::Strict" => "0";
+  requires "YAML" => "0";
+};
+
+on 'develop' => sub {
+  recommends "YAML::XS" => "0";
+};
diff --git a/dist.ini b/dist.ini
new file mode 100644
index 0000000..5d7383c
--- /dev/null
+++ b/dist.ini
@@ -0,0 +1,40 @@
+name             = Alien-FFI
+author           = Graham Ollis <plicease at cpan.org>
+license          = Perl_5
+copyright_holder = Graham Ollis
+copyright_year   = 2014
+version          = 0.14
+
+[@Author::Plicease]
+:version      = 2.00
+travis_status = 1
+release_tests = 1
+irc           = irc://irc.perl.org/#native
+
+[RemovePrereqs]
+remove = strict
+remove = warnings
+remove = base
+remove = Alien::MSYS
+
+remove = Test::Stream
+
+[Prereqs]
+Alien::Base::ModuleBuild = 0.022
+
+[Prereqs / ConfigureRequires]
+Alien::Base   = 0.022
+
+[Prereqs / BuildRequires]
+Alien::Base   = 0.022
+
+[Prereqs / TestRequires]
+Alien::Base   = 0.022
+
+[Author::Plicease::Upload]
+cpan = 1
+
+[Meta::Dynamic::Config]
+
+[PruneFiles]
+filename = t/compile_xs.t
diff --git a/inc/My/ModuleBuild.pm b/inc/My/ModuleBuild.pm
new file mode 100644
index 0000000..93e10e2
--- /dev/null
+++ b/inc/My/ModuleBuild.pm
@@ -0,0 +1,114 @@
+package My::ModuleBuild;
+
+use strict;
+use warnings;
+use Config;
+use Text::ParseWords qw( shellwords );
+use Env qw( @PATH );
+use Cwd qw( cwd );
+use base qw( Alien::Base::ModuleBuild );
+
+my $libffi_version = '3.2.1';
+$libffi_version = '3.1' if $^O eq 'MSWin32' && $Config{ccname} eq 'cl';
+
+# some weird older perl CPAN.pm or Module::Build or something.
+# installs okay with older versions of Alien::Base
+# even though 0.009 is a configure_requires
+# we need to nip it in the bud here else
+# it breaks in FFI::Platypus
+if($] < 5.010 && ! eval { use Alien::Base 0.009 (); 1 })
+{
+  print STDERR "Alien::Base 0.009 really is required as a configure prereq.\n";
+  print STDERR "Please install it first.\n";
+  exit;
+}
+
+sub new
+{
+  my($class, %args) = @_;
+  
+  my @configure = qw( sh configure --disable-builddir --disable-shared --with-pic --prefix=%s );
+  
+  if($^O eq 'MSWin32')
+  {
+    if($Config{archname} =~ /^MSWin32-x64/)
+    {
+      push @configure, '--build=x86_64-pc-mingw64';
+    }
+    
+    if($Config{ccname} eq 'cl')
+    {
+      push @configure, qw( --enable-static --disable-shared LD=link ), 'CPP=cl -nologo -EP';
+      
+      my $cwd = cwd();
+      $cwd =~ s{/}{\\\\}g;
+      
+      if($Config{archname} =~ /^MSWin32-x64/)
+      {
+        push @configure, "CC=$cwd/_alien/libffi-$libffi_version/msvcc.sh -m64";
+      }
+      else
+      {
+        push @configure, "CC=$cwd/_alien/libffi-$libffi_version/msvcc.sh";
+      }
+
+    }
+  }
+  
+  if($^O eq 'darwin')
+  {
+    # perl -MConfig= -MText::ParseWords=shellwords -E 'my @ldflags = shellwords $Config{ldflags}; while(@ldflags) { my $arg = shift @ldflags; next unless $arg eq "-arch"; push @arch, $arg, shift @ldflags }; say $_ for @arch'
+    my @ldflags = shellwords $Config{ldflags};
+    my @arch;
+    while(@ldflags)
+    {
+      my $arg = shift @ldflags;
+      next unless $arg eq "-arch";
+      push @arch, $arg, shift @ldflags;
+    }
+    push @configure, "LDFLAGS=@arch";
+    push @configure, "CFLAGS=@arch";
+  }
+  
+  $args{alien_name} = 'libffi';
+  $args{alien_build_commands} = [
+    \@configure,
+    'make',
+  ];
+  
+  if($libffi_version eq '3.1')
+  {
+    # version 3.1 (only used for MSWin32) generated a bad libffi.pc file
+    unshift @{ $args{alien_build_commands} }, [ $^X, '-ni.bak', '-e', 's/^toolexeclibdir=.*$/toolexeclibdir=\$\{libdir\}/; print', 'libffi.pc.in' ];
+  }
+  
+  $args{alien_isolate_dynamic} = 1;
+  $args{alien_repository} = {
+    protocol => 'http',
+    host     => 'mirrors.kernel.org',
+    location => '/sourceware/libffi/',
+    exact_filename => "libffi-$libffi_version.tar.gz",
+  };
+  $args{alien_stage_install} = 1;
+  
+  my $self = $class->SUPER::new(%args);
+
+  if($^O eq 'MSWin32' && ($Alien::Base::ModuleBuild::Force || !$self->alien_check_installed_version))
+  {
+    $self->_add_prereq( 'build_requires' => 'Alien::MSYS' => 0 );
+  }
+  
+  $self;
+}
+
+*do_system = sub
+{
+  my($self, @rest) = @_;
+  require Alien::MSYS;
+  my $msys_path = Alien::MSYS::msys_path();
+  @PATH = grep { $_ ne $msys_path && $_ !~ /GnuWin32/i } @PATH;
+  unshift @PATH, $msys_path;
+  $self->SUPER::do_system(@rest);
+} if $^O eq 'MSWin32' && eval q{ use Alien::MSYS (); 1 };
+
+1;
diff --git a/lib/Alien/FFI.pm b/lib/Alien/FFI.pm
new file mode 100644
index 0000000..277fdf3
--- /dev/null
+++ b/lib/Alien/FFI.pm
@@ -0,0 +1,112 @@
+package Alien::FFI;
+
+use strict;
+use warnings;
+use Config;
+use base qw( Alien::Base );
+
+# ABSTRACT: Build and make available libffi
+our $VERSION = '0.14'; # VERSION
+
+sub libs
+{
+  my $class = shift;
+  
+  my $libs = $class->SUPER::libs(@_);
+
+  if($^O eq 'openbsd' && !$Config{usethreads} && Alien::FFI->install_type eq 'share')
+  {
+    $libs .= ' /usr/lib/libpthread.a';
+  }
+  
+  if($^O eq 'MSWin32' && $Config{ccname} eq 'cl')
+  {
+    $libs =~ s{-L}{/LIBPATH:}g;
+    $libs =~ s{-l([A-Za-z]+)}{$1.LIB}g;
+  }
+  
+  $libs;
+}
+
+sub cflags
+{
+  my $class = shift;
+  
+  my $cflags = $class->SUPER::cflags(@_);
+  
+  if($class->install_type eq 'share'
+  && $^O eq 'MSWin32'
+  && $Config{ccname} eq 'cl')
+  {
+    $cflags .= " -DFFI_BUILDING";
+  }  
+  
+  $cflags;
+}
+
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Alien::FFI - Build and make available libffi
+
+=head1 VERSION
+
+version 0.14
+
+=head1 SYNOPSIS
+
+In your C<Build.PL>:
+
+ use Alien::FFI;
+ use Module::Build;
+ 
+ my $build = Module::Build->new(
+   ...
+   extra_compiler_flags => Alien::FFI->cflags,
+   extra_linker_flags   => Alien::FFI->libs,
+   ...
+ );
+ 
+ $build->create_build_script;
+
+=head1 DESCRIPTION
+
+This distribution installs libffi so that it can be used by other Perl distributions.  If already
+installed for your operating system, and it can be found, this distribution will use the libffi
+that comes with your operating system, otherwise it will download it from the Internet, build and
+install it for you.
+
+=head1 SEE ALSO
+
+=over 4
+
+=item L<FFI::Platypus>
+
+Write Perl bindings to non-Perl libraries without C or XS
+
+=item L<FFI::CheckLib>
+
+Check that a library is available for FFI
+
+=back
+
+=head1 AUTHOR
+
+Graham Ollis <plicease at cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Graham Ollis.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/t/00_diag.t b/t/00_diag.t
new file mode 100644
index 0000000..7b2a09f
--- /dev/null
+++ b/t/00_diag.t
@@ -0,0 +1,84 @@
+use strict;
+use warnings;
+use Config;
+use Test::More tests => 1;
+
+# This .t file is generated.
+# make changes instead to dist.ini
+
+my %modules;
+my $post_diag;
+
+$modules{$_} = $_ for qw(
+  Alien::Base
+  Alien::Base::ModuleBuild
+  Module::Build
+  Test::More
+);
+
+
+
+my @modules = sort keys %modules;
+
+sub spacer ()
+{
+  diag '';
+  diag '';
+  diag '';
+}
+
+pass 'okay';
+
+my $max = 1;
+$max = $_ > $max ? $_ : $max for map { length $_ } @modules;
+our $format = "%-${max}s %s"; 
+
+spacer;
+
+my @keys = sort grep /(MOJO|PERL|\A(LC|HARNESS)_|\A(SHELL|LANG)\Z)/i, keys %ENV;
+
+if(@keys > 0)
+{
+  diag "$_=$ENV{$_}" for @keys;
+  
+  if($ENV{PERL5LIB})
+  {
+    spacer;
+    diag "PERL5LIB path";
+    diag $_ for split $Config{path_sep}, $ENV{PERL5LIB};
+    
+  }
+  elsif($ENV{PERLLIB})
+  {
+    spacer;
+    diag "PERLLIB path";
+    diag $_ for split $Config{path_sep}, $ENV{PERLLIB};
+  }
+  
+  spacer;
+}
+
+diag sprintf $format, 'perl ', $];
+
+foreach my $module (@modules)
+{
+  if(eval qq{ require $module; 1 })
+  {
+    my $ver = eval qq{ \$$module\::VERSION };
+    $ver = 'undef' unless defined $ver;
+    diag sprintf $format, $module, $ver;
+  }
+  else
+  {
+    diag sprintf $format, $module, '-';
+  }
+}
+
+if($post_diag)
+{
+  spacer;
+  $post_diag->();
+}
+
+spacer;
+
diff --git a/t/01_use.t b/t/01_use.t
new file mode 100644
index 0000000..1060227
--- /dev/null
+++ b/t/01_use.t
@@ -0,0 +1,5 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+use_ok 'Alien::FFI';
\ No newline at end of file
diff --git a/t/compile.t b/t/compile.t
new file mode 100644
index 0000000..7b5c5de
--- /dev/null
+++ b/t/compile.t
@@ -0,0 +1,45 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { plan skip_all => 'test requires Test::CChecker' unless eval q{ use Test::CChecker 0.06; 1 } }
+use Alien::FFI;
+
+plan tests => 1;
+
+compile_output_to_note;
+
+compile_with_alien 'Alien::FFI';
+
+compile_run_ok <<C_CODE, "basic compile test";
+
+#include <ffi.h>
+
+unsigned int foo(void)
+{
+  return 0xaa;
+}
+
+int
+main(int argc, char *argv[])
+{
+  ffi_cif   ffi_cif;
+  ffi_type *args[1];
+  void     *values[1];
+  int       return_value;
+  
+  if(ffi_prep_cif(&ffi_cif, FFI_DEFAULT_ABI, 0, &ffi_type_uint32, args) == FFI_OK)
+  {
+    ffi_call(&ffi_cif, (void*) foo, &return_value, values);
+  
+    if(return_value == 0xaa)
+      return 0;
+    else
+      return 2;
+  }
+  else
+  {
+    return 2;
+  }
+}
+C_CODE
+
diff --git a/xt/release/changes.t b/xt/release/changes.t
new file mode 100644
index 0000000..88cf462
--- /dev/null
+++ b/xt/release/changes.t
@@ -0,0 +1,27 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::CPAN::Changes' 
+    unless eval q{ use Test::CPAN::Changes; 1 };
+};
+use Test::CPAN::Changes;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+do {
+  my $old = \&Test::Builder::carp;
+  my $new = sub {
+    my($self, @messages) = @_;
+    return if $messages[0] =~ /^Date ".*" is not in the recommend format/;
+    $old->($self, @messages);
+  };
+  no warnings 'redefine';
+  *Test::Builder::carp = $new;
+};
+
+changes_file_ok;
+
+done_testing;
diff --git a/xt/release/eol.t b/xt/release/eol.t
new file mode 100644
index 0000000..3f2e816
--- /dev/null
+++ b/xt/release/eol.t
@@ -0,0 +1,14 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::EOL' 
+    unless eval q{ use Test::EOL; 1 };
+};
+use Test::EOL;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+all_perl_files_ok(grep { -e $_ } qw( bin lib t Makefile.PL ));
diff --git a/xt/release/fixme.t b/xt/release/fixme.t
new file mode 100644
index 0000000..9dac4c6
--- /dev/null
+++ b/xt/release/fixme.t
@@ -0,0 +1,19 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::Fixme' 
+    unless eval q{ use Test::Fixme 0.14; 1 };
+};
+use Test::Fixme 0.07;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+run_tests(
+  match => qr/FIXME/,
+  where => [ grep { -e $_ } qw( bin lib t Makefile.PL )],
+  warn  => 1,
+);
+
diff --git a/xt/release/no_tabs.t b/xt/release/no_tabs.t
new file mode 100644
index 0000000..0a6d2b6
--- /dev/null
+++ b/xt/release/no_tabs.t
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::NoTabs' 
+    unless eval q{ use Test::NoTabs; 1 };
+};
+use Test::NoTabs;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+all_perl_files_ok( grep { -e $_ } qw( bin lib t Makefile.PL ));
+
diff --git a/xt/release/pod.t b/xt/release/pod.t
new file mode 100644
index 0000000..2603675
--- /dev/null
+++ b/xt/release/pod.t
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::Pod' 
+    unless eval q{ use Test::Pod; 1 };
+};
+use Test::Pod;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+all_pod_files_ok( grep { -e $_ } qw( bin lib ));
+
diff --git a/xt/release/pod_coverage.t b/xt/release/pod_coverage.t
new file mode 100644
index 0000000..07b26b1
--- /dev/null
+++ b/xt/release/pod_coverage.t
@@ -0,0 +1,74 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires 5.010 or better'
+    unless $] >= 5.010;
+  plan skip_all => 'test requires Test::Pod::Coverage' 
+    unless eval q{ use Test::Pod::Coverage; 1 };
+  plan skip_all => 'test requires YAML'
+    unless eval q{ use YAML; 1; };
+};
+use Test::Pod::Coverage;
+use YAML qw( LoadFile );
+use FindBin;
+use File::Spec;
+
+my $config_filename = File::Spec->catfile(
+  $FindBin::Bin, 'release.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+  if -r $config_filename;
+
+plan skip_all => 'disabled' if $config->{pod_coverage}->{skip};
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+my @private_classes;
+my %private_methods;
+
+push @{ $config->{pod_coverage}->{private} },
+  'Alien::.*::Install::Files#Inline';
+
+foreach my $private (@{ $config->{pod_coverage}->{private} })
+{
+  my($class,$method) = split /#/, $private;
+  if(defined $class && $class ne '')
+  {
+    my $regex = eval 'qr{^' . $class . '$}';
+    if(defined $method && $method ne '')
+    {
+      push @private_classes, { regex => $regex, method => $method };
+    }
+    else
+    {
+      push @private_classes, { regex => $regex, all => 1 };
+    }
+  }
+  elsif(defined $method && $method ne '')
+  {
+    $private_methods{$_} = 1 for split /,/, $method;
+  }
+}
+
+my @classes = all_modules;
+
+plan tests => scalar @classes;
+
+foreach my $class (@classes)
+{
+  SKIP: {
+    my($is_private_class) = map { 1 } grep { $class =~ $_->{regex} && $_->{all} } @private_classes;
+    skip "private class: $class", 1 if $is_private_class;
+    
+    my %methods = map {; $_ => 1 } map { split /,/, $_->{method} } grep { $class =~ $_->{regex} } @private_classes;
+    $methods{$_} = 1 for keys %private_methods;
+    
+    my $also_private = eval 'qr{^' . join('|', keys %methods ) . '$}';
+    
+    pod_coverage_ok $class, { also_private => [$also_private] };
+  };
+}
+
diff --git a/xt/release/pod_spelling_common.t b/xt/release/pod_spelling_common.t
new file mode 100644
index 0000000..ad8dffd
--- /dev/null
+++ b/xt/release/pod_spelling_common.t
@@ -0,0 +1,27 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::Pod::Spelling::CommonMistakes' 
+    unless eval q{ use Test::Pod::Spelling::CommonMistakes; 1 };
+  plan skip_all => 'test requires YAML'
+    unless eval q{ use YAML qw( LoadFile ); 1 };
+};
+use Test::Pod::Spelling::CommonMistakes;
+use FindBin;
+use File::Spec;
+
+my $config_filename = File::Spec->catfile(
+  $FindBin::Bin, 'release.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+  if -r $config_filename;
+
+plan skip_all => 'disabled' if $config->{pod_spelling_common}->{skip};
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+# FIXME test files in bin too.
+all_pod_files_ok;
diff --git a/xt/release/pod_spelling_system.t b/xt/release/pod_spelling_system.t
new file mode 100644
index 0000000..3773353
--- /dev/null
+++ b/xt/release/pod_spelling_system.t
@@ -0,0 +1,101 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::Spelling' 
+    unless eval q{ use Test::Spelling; 1 };
+  plan skip_all => 'test requires YAML'
+    unless eval q{ use YAML; 1; };
+};
+use Test::Spelling;
+use YAML qw( LoadFile );
+use FindBin;
+use File::Spec;
+
+my $config_filename = File::Spec->catfile(
+  $FindBin::Bin, 'release.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+  if -r $config_filename;
+
+plan skip_all => 'disabled' if $config->{pod_spelling_system}->{skip};
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+add_stopwords(@{ $config->{pod_spelling_system}->{stopwords} });
+add_stopwords(<DATA>);
+all_pod_files_spelling_ok;
+
+__DATA__
+Plicease
+stdout
+stderr
+stdin
+subref
+loopback
+username
+os
+Ollis
+Mojolicious
+plicease
+CPAN
+reinstall
+TODO
+filename
+filenames
+login
+callback
+callbacks
+standalone
+VMS
+hostname
+hostnames
+TCP
+UDP
+IP
+API
+MSWin32
+OpenBSD
+FreeBSD
+NetBSD
+unencrypted
+WebSocket
+WebSockets
+timestamp
+timestamps
+poney
+BackPAN
+portably
+RedHat
+AIX
+BSD
+XS
+FFI
+perlish
+optimizations
+subdirectory
+RESTful
+SQLite
+JavaScript
+dir
+plugins
+munge
+jQuery
+namespace
+PDF
+PDFs
+usernames
+DBI
+pluggable
+APIs
+SSL
+JSON
+YAML
+uncommented
+Solaris
+OpenVMS
+URI
+URL
+CGI
diff --git a/xt/release/release.yml b/xt/release/release.yml
new file mode 100644
index 0000000..fbcc929
--- /dev/null
+++ b/xt/release/release.yml
@@ -0,0 +1,24 @@
+---
+pod_spelling_system:
+  skip: 0
+  # list of words that are spelled correctly
+  # (regardless of what spell check thinks)
+  stopwords:
+    - libffi
+
+pod_coverage:
+  skip: 0
+  # format is "Class#method" or "Class", regex allowed
+  # for either Class or method.
+  private:
+    - Alien::FFI#libs
+    - Alien::FFI#cflags
+
+unused_vars:
+  skip: 0
+  global:
+    ignore_vars: []
+  module: {}
+
+version:
+  dir: lib
diff --git a/xt/release/strict.t b/xt/release/strict.t
new file mode 100644
index 0000000..2dbad08
--- /dev/null
+++ b/xt/release/strict.t
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+use Test::More;
+BEGIN { 
+  plan skip_all => 'test requires Test::Strict' 
+    unless eval q{ use Test::Strict; 1 };
+};
+use Test::Strict;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+all_perl_files_ok( grep { -e $_ } qw( bin lib t Makefile.PL ));
+
diff --git a/xt/release/version.t b/xt/release/version.t
new file mode 100644
index 0000000..c3d96c4
--- /dev/null
+++ b/xt/release/version.t
@@ -0,0 +1,44 @@
+use strict;
+use warnings;
+use Test::More;
+use FindBin ();
+BEGIN {
+
+  plan skip_all => "test requires Test::Version 2.00"
+    unless eval q{
+      use Test::Version 2.00 qw( version_all_ok ), { 
+        has_version    => 1,
+        filename_match => sub { $_[0] !~ m{/(ConfigData|Install/Files)\.pm$} },
+      }; 
+      1
+    };
+
+  plan skip_all => "test requires Path::Class" 
+    unless eval q{ use Path::Class qw( file dir ); 1 };
+  plan skip_all => 'test requires YAML'
+    unless eval q{ use YAML; 1; };
+}
+
+use YAML qw( LoadFile );
+use FindBin;
+use File::Spec;
+
+plan skip_all => "test not built yet (run dzil test)"
+  unless -e dir( $FindBin::Bin)->parent->parent->file('Makefile.PL')
+  ||     -e dir( $FindBin::Bin)->parent->parent->file('Build.PL');
+
+my $config_filename = File::Spec->catfile(
+  $FindBin::Bin, 'release.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+  if -r $config_filename;
+
+if($config->{version}->{dir})
+{
+  note "using dir " . $config->{version}->{dir}
+}
+
+version_all_ok($config->{version}->{dir} ? ($config->{version}->{dir}) : ());
+done_testing;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libalien-ffi-perl.git



More information about the Pkg-perl-cvs-commits mailing list