[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