Codebase list libobject-forkaware-perl / baa7494
Import original source of Object-ForkAware 0.005 gregor herrmann 6 years ago
34 changed file(s) with 4087 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
0
1 CONTRIBUTING
2
3 Thank you for considering contributing to this distribution. This file
4 contains instructions that will help you work with the source code.
5
6 PLEASE NOTE that if you have any questions or difficulties, you can reach the
7 maintainer(s) through the bug queue described later in this document
8 (preferred), or by emailing the releaser directly. You are not required to
9 follow any of the steps in this document to submit a patch or bug report;
10 these are just recommendations, intended to help you (and help us help you
11 faster).
12
13 The distribution is managed with Dist::Zilla (https://metacpan.org/release/Dist-Zilla).
14 This means than many of the usual files you might expect are not in the
15 repository, but are generated at release time (e.g. Makefile.PL).
16
17 However, you can run tests directly using the 'prove' tool:
18
19 $ prove -l
20 $ prove -lv t/some_test_file.t
21 $ prove -lvr t/
22
23 In most cases, 'prove' is entirely sufficient for you to test any
24 patches you have.
25
26 You may need to satisfy some dependencies. The easiest way to satisfy
27 dependencies is to install the last release -- this is available at
28 https://metacpan.org/release/Object-ForkAware
29
30 If you use cpanminus, you can do it without downloading the tarball first:
31
32 $ cpanm --reinstall --installdeps --with-recommends Object::ForkAware
33
34 Dist::Zilla is a very powerful authoring tool, but requires a number of
35 author-specific plugins. If you would like to use it for contributing,
36 install it from CPAN, then run one of the following commands, depending on
37 your CPAN client:
38
39 $ cpan `dzil authordeps --missing`
40 or
41 $ dzil authordeps --missing | cpanm
42
43 You should then also install any additional requirements not needed by the
44 dzil build but may be needed by tests or other development:
45
46 $ cpan `dzil listdeps --author --missing`
47 or
48 $ dzil listdeps --author --missing | cpanm
49
50 Or, you can use the 'dzil stale' command to install all requirements at once:
51
52 $ cpan Dist::Zilla::App::Command::stale
53 $ cpan `dzil stale --all`
54 or
55 $ cpanm Dist::Zilla::App::Command::stale
56 $ dzil stale --all | cpanm
57
58 You can also do this via cpanm directly:
59
60 $ cpanm --reinstall --installdeps --with-develop --with-recommends Object::ForkAware
61
62 Once installed, here are some dzil commands you might try:
63
64 $ dzil build
65 $ dzil test
66 $ dzil test --release
67 $ dzil xtest
68 $ dzil listdeps --json
69 $ dzil build --notgz
70
71 You can learn more about Dist::Zilla at http://dzil.org/.
72
73 The code for this distribution is hosted at GitHub. The repository is:
74 https://github.com/karenetheridge/Object-ForkAware
75 You can submit code changes by forking the repository, pushing your code
76 changes to your clone, and then submitting a pull request. Detailed
77 instructions for doing that is available here:
78
79 https://help.github.com/articles/creating-a-pull-request
80
81 If you have found a bug, but do not have an accompanying patch to fix it, you
82 can submit an issue report here:
83 https://rt.cpan.org/Public/Dist/Display.html?Name=Object-ForkAware
84 or via email: bug-Object-ForkAware@rt.cpan.org
85 This is a good place to send your questions about the usage of this distribution.
86
87 If you send me a patch or pull request, your name and email address will be
88 included in the documentation as a contributor (using the attribution on the
89 commit or patch), unless you specifically request for it not to be. If you
90 wish to be listed under a different name or address, you should submit a pull
91 request to the .mailmap file to contain the correct mapping.
92
93
94 This file was generated via Dist::Zilla::Plugin::GenerateFile::FromShareDir 0.013 from a
95 template file originating in Dist-Zilla-PluginBundle-Author-ETHER-0.131.
0 Revision history for Object-ForkAware
1
2 0.005 2017-10-19 03:07:36Z
3 - fix some documentation errors
4
5 0.004 2016-10-21 03:35:49Z
6 - reduced prerequisites, updated tooling
7
8 0.003 2014-09-07 22:16:29Z
9 - fixed implementation of ->isa and ->can when called as class
10 methods (RT#98096, Graham Knop)
11
12 0.002 2014-08-16 21:32:20Z
13 - now building with [@Author::ETHER]
14 - minor documentation tweaks
15 - now also propagating ->VERSION calls to the underlying object
16
17 0.001 2013-03-17 16:00:17Z
18 - Initial release.
19
0 This is the Perl distribution Object-ForkAware.
1
2 Installing Object-ForkAware is straightforward.
3
4 ## Installation with cpanm
5
6 If you have cpanm, you only need one line:
7
8 % cpanm Object::ForkAware
9
10 If it does not have permission to install modules to the current perl, cpanm
11 will automatically set up and install to a local::lib in your home directory.
12 See the local::lib documentation (https://metacpan.org/pod/local::lib) for
13 details on enabling it in your environment.
14
15 ## Installing with the CPAN shell
16
17 Alternatively, if your CPAN shell is set up, you should just be able to do:
18
19 % cpan Object::ForkAware
20
21 ## Manual installation
22
23 As a last resort, you can manually install it. Download the tarball, untar it,
24 then build it:
25
26 % perl Makefile.PL
27 % make && make test
28
29 Then install it:
30
31 % make install
32
33 If your perl is system-managed, you can create a local::lib in your home
34 directory to install modules to. For details, see the local::lib documentation:
35 https://metacpan.org/pod/local::lib
36
37 ## Documentation
38
39 Object-ForkAware documentation is available as POD.
40 You can run perldoc from a shell to read the documentation:
41
42 % perldoc Object::ForkAware
0 This software is copyright (c) 2013 by Karen Etheridge.
1
2 This is free software; you can redistribute it and/or modify it under
3 the same terms as the Perl 5 programming language system itself.
4
5 Terms of the Perl programming language system itself
6
7 a) the GNU General Public License as published by the Free
8 Software Foundation; either version 1, or (at your option) any
9 later version, or
10 b) the "Artistic License"
11
12 --- The GNU General Public License, Version 1, February 1989 ---
13
14 This software is Copyright (c) 2013 by Karen Etheridge.
15
16 This is free software, licensed under:
17
18 The GNU General Public License, Version 1, February 1989
19
20 GNU GENERAL PUBLIC LICENSE
21 Version 1, February 1989
22
23 Copyright (C) 1989 Free Software Foundation, Inc.
24 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
26 Everyone is permitted to copy and distribute verbatim copies
27 of this license document, but changing it is not allowed.
28
29 Preamble
30
31 The license agreements of most software companies try to keep users
32 at the mercy of those companies. By contrast, our General Public
33 License is intended to guarantee your freedom to share and change free
34 software--to make sure the software is free for all its users. The
35 General Public License applies to the Free Software Foundation's
36 software and to any other program whose authors commit to using it.
37 You can use it for your programs, too.
38
39 When we speak of free software, we are referring to freedom, not
40 price. Specifically, the General Public License is designed to make
41 sure that you have the freedom to give away or sell copies of free
42 software, that you receive source code or can get it if you want it,
43 that you can change the software or use pieces of it in new free
44 programs; and that you know you can do these things.
45
46 To protect your rights, we need to make restrictions that forbid
47 anyone to deny you these rights or to ask you to surrender the rights.
48 These restrictions translate to certain responsibilities for you if you
49 distribute copies of the software, or if you modify it.
50
51 For example, if you distribute copies of a such a program, whether
52 gratis or for a fee, you must give the recipients all the rights that
53 you have. You must make sure that they, too, receive or can get the
54 source code. And you must tell them their rights.
55
56 We protect your rights with two steps: (1) copyright the software, and
57 (2) offer you this license which gives you legal permission to copy,
58 distribute and/or modify the software.
59
60 Also, for each author's protection and ours, we want to make certain
61 that everyone understands that there is no warranty for this free
62 software. If the software is modified by someone else and passed on, we
63 want its recipients to know that what they have is not the original, so
64 that any problems introduced by others will not reflect on the original
65 authors' reputations.
66
67 The precise terms and conditions for copying, distribution and
68 modification follow.
69
70 GNU GENERAL PUBLIC LICENSE
71 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
72
73 0. This License Agreement applies to any program or other work which
74 contains a notice placed by the copyright holder saying it may be
75 distributed under the terms of this General Public License. The
76 "Program", below, refers to any such program or work, and a "work based
77 on the Program" means either the Program or any work containing the
78 Program or a portion of it, either verbatim or with modifications. Each
79 licensee is addressed as "you".
80
81 1. You may copy and distribute verbatim copies of the Program's source
82 code as you receive it, in any medium, provided that you conspicuously and
83 appropriately publish on each copy an appropriate copyright notice and
84 disclaimer of warranty; keep intact all the notices that refer to this
85 General Public License and to the absence of any warranty; and give any
86 other recipients of the Program a copy of this General Public License
87 along with the Program. You may charge a fee for the physical act of
88 transferring a copy.
89
90 2. You may modify your copy or copies of the Program or any portion of
91 it, and copy and distribute such modifications under the terms of Paragraph
92 1 above, provided that you also do the following:
93
94 a) cause the modified files to carry prominent notices stating that
95 you changed the files and the date of any change; and
96
97 b) cause the whole of any work that you distribute or publish, that
98 in whole or in part contains the Program or any part thereof, either
99 with or without modifications, to be licensed at no charge to all
100 third parties under the terms of this General Public License (except
101 that you may choose to grant warranty protection to some or all
102 third parties, at your option).
103
104 c) If the modified program normally reads commands interactively when
105 run, you must cause it, when started running for such interactive use
106 in the simplest and most usual way, to print or display an
107 announcement including an appropriate copyright notice and a notice
108 that there is no warranty (or else, saying that you provide a
109 warranty) and that users may redistribute the program under these
110 conditions, and telling the user how to view a copy of this General
111 Public License.
112
113 d) You may charge a fee for the physical act of transferring a
114 copy, and you may at your option offer warranty protection in
115 exchange for a fee.
116
117 Mere aggregation of another independent work with the Program (or its
118 derivative) on a volume of a storage or distribution medium does not bring
119 the other work under the scope of these terms.
120
121 3. You may copy and distribute the Program (or a portion or derivative of
122 it, under Paragraph 2) in object code or executable form under the terms of
123 Paragraphs 1 and 2 above provided that you also do one of the following:
124
125 a) accompany it with the complete corresponding machine-readable
126 source code, which must be distributed under the terms of
127 Paragraphs 1 and 2 above; or,
128
129 b) accompany it with a written offer, valid for at least three
130 years, to give any third party free (except for a nominal charge
131 for the cost of distribution) a complete machine-readable copy of the
132 corresponding source code, to be distributed under the terms of
133 Paragraphs 1 and 2 above; or,
134
135 c) accompany it with the information you received as to where the
136 corresponding source code may be obtained. (This alternative is
137 allowed only for noncommercial distribution and only if you
138 received the program in object code or executable form alone.)
139
140 Source code for a work means the preferred form of the work for making
141 modifications to it. For an executable file, complete source code means
142 all the source code for all modules it contains; but, as a special
143 exception, it need not include source code for modules which are standard
144 libraries that accompany the operating system on which the executable
145 file runs, or for standard header files or definitions files that
146 accompany that operating system.
147
148 4. You may not copy, modify, sublicense, distribute or transfer the
149 Program except as expressly provided under this General Public License.
150 Any attempt otherwise to copy, modify, sublicense, distribute or transfer
151 the Program is void, and will automatically terminate your rights to use
152 the Program under this License. However, parties who have received
153 copies, or rights to use copies, from you under this General Public
154 License will not have their licenses terminated so long as such parties
155 remain in full compliance.
156
157 5. By copying, distributing or modifying the Program (or any work based
158 on the Program) you indicate your acceptance of this license to do so,
159 and all its terms and conditions.
160
161 6. Each time you redistribute the Program (or any work based on the
162 Program), the recipient automatically receives a license from the original
163 licensor to copy, distribute or modify the Program subject to these
164 terms and conditions. You may not impose any further restrictions on the
165 recipients' exercise of the rights granted herein.
166
167 7. The Free Software Foundation may publish revised and/or new versions
168 of the General Public License from time to time. Such new versions will
169 be similar in spirit to the present version, but may differ in detail to
170 address new problems or concerns.
171
172 Each version is given a distinguishing version number. If the Program
173 specifies a version number of the license which applies to it and "any
174 later version", you have the option of following the terms and conditions
175 either of that version or of any later version published by the Free
176 Software Foundation. If the Program does not specify a version number of
177 the license, you may choose any version ever published by the Free Software
178 Foundation.
179
180 8. If you wish to incorporate parts of the Program into other free
181 programs whose distribution conditions are different, write to the author
182 to ask for permission. For software which is copyrighted by the Free
183 Software Foundation, write to the Free Software Foundation; we sometimes
184 make exceptions for this. Our decision will be guided by the two goals
185 of preserving the free status of all derivatives of our free software and
186 of promoting the sharing and reuse of software generally.
187
188 NO WARRANTY
189
190 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
191 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
192 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
193 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
194 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
195 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
196 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
197 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
198 REPAIR OR CORRECTION.
199
200 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
201 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
202 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
203 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
204 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
205 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
206 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
207 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
208 POSSIBILITY OF SUCH DAMAGES.
209
210 END OF TERMS AND CONDITIONS
211
212 Appendix: How to Apply These Terms to Your New Programs
213
214 If you develop a new program, and you want it to be of the greatest
215 possible use to humanity, the best way to achieve this is to make it
216 free software which everyone can redistribute and change under these
217 terms.
218
219 To do so, attach the following notices to the program. It is safest to
220 attach them to the start of each source file to most effectively convey
221 the exclusion of warranty; and each file should have at least the
222 "copyright" line and a pointer to where the full notice is found.
223
224 <one line to give the program's name and a brief idea of what it does.>
225 Copyright (C) 19yy <name of author>
226
227 This program is free software; you can redistribute it and/or modify
228 it under the terms of the GNU General Public License as published by
229 the Free Software Foundation; either version 1, or (at your option)
230 any later version.
231
232 This program is distributed in the hope that it will be useful,
233 but WITHOUT ANY WARRANTY; without even the implied warranty of
234 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
235 GNU General Public License for more details.
236
237 You should have received a copy of the GNU General Public License
238 along with this program; if not, write to the Free Software
239 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
240
241
242 Also add information on how to contact you by electronic and paper mail.
243
244 If the program is interactive, make it output a short notice like this
245 when it starts in an interactive mode:
246
247 Gnomovision version 69, Copyright (C) 19xx name of author
248 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
249 This is free software, and you are welcome to redistribute it
250 under certain conditions; type `show c' for details.
251
252 The hypothetical commands `show w' and `show c' should show the
253 appropriate parts of the General Public License. Of course, the
254 commands you use may be called something other than `show w' and `show
255 c'; they could even be mouse-clicks or menu items--whatever suits your
256 program.
257
258 You should also get your employer (if you work as a programmer) or your
259 school, if any, to sign a "copyright disclaimer" for the program, if
260 necessary. Here a sample; alter the names:
261
262 Yoyodyne, Inc., hereby disclaims all copyright interest in the
263 program `Gnomovision' (a program to direct compilers to make passes
264 at assemblers) written by James Hacker.
265
266 <signature of Ty Coon>, 1 April 1989
267 Ty Coon, President of Vice
268
269 That's all there is to it!
270
271
272 --- The Artistic License 1.0 ---
273
274 This software is Copyright (c) 2013 by Karen Etheridge.
275
276 This is free software, licensed under:
277
278 The Artistic License 1.0
279
280 The Artistic License
281
282 Preamble
283
284 The intent of this document is to state the conditions under which a Package
285 may be copied, such that the Copyright Holder maintains some semblance of
286 artistic control over the development of the package, while giving the users of
287 the package the right to use and distribute the Package in a more-or-less
288 customary fashion, plus the right to make reasonable modifications.
289
290 Definitions:
291
292 - "Package" refers to the collection of files distributed by the Copyright
293 Holder, and derivatives of that collection of files created through
294 textual modification.
295 - "Standard Version" refers to such a Package if it has not been modified,
296 or has been modified in accordance with the wishes of the Copyright
297 Holder.
298 - "Copyright Holder" is whoever is named in the copyright or copyrights for
299 the package.
300 - "You" is you, if you're thinking about copying or distributing this Package.
301 - "Reasonable copying fee" is whatever you can justify on the basis of media
302 cost, duplication charges, time of people involved, and so on. (You will
303 not be required to justify it to the Copyright Holder, but only to the
304 computing community at large as a market that must bear the fee.)
305 - "Freely Available" means that no fee is charged for the item itself, though
306 there may be fees involved in handling the item. It also means that
307 recipients of the item may redistribute it under the same conditions they
308 received it.
309
310 1. You may make and give away verbatim copies of the source form of the
311 Standard Version of this Package without restriction, provided that you
312 duplicate all of the original copyright notices and associated disclaimers.
313
314 2. You may apply bug fixes, portability fixes and other modifications derived
315 from the Public Domain or from the Copyright Holder. A Package modified in such
316 a way shall still be considered the Standard Version.
317
318 3. You may otherwise modify your copy of this Package in any way, provided that
319 you insert a prominent notice in each changed file stating how and when you
320 changed that file, and provided that you do at least ONE of the following:
321
322 a) place your modifications in the Public Domain or otherwise make them
323 Freely Available, such as by posting said modifications to Usenet or an
324 equivalent medium, or placing the modifications on a major archive site
325 such as ftp.uu.net, or by allowing the Copyright Holder to include your
326 modifications in the Standard Version of the Package.
327
328 b) use the modified Package only within your corporation or organization.
329
330 c) rename any non-standard executables so the names do not conflict with
331 standard executables, which must also be provided, and provide a separate
332 manual page for each non-standard executable that clearly documents how it
333 differs from the Standard Version.
334
335 d) make other distribution arrangements with the Copyright Holder.
336
337 4. You may distribute the programs of this Package in object code or executable
338 form, provided that you do at least ONE of the following:
339
340 a) distribute a Standard Version of the executables and library files,
341 together with instructions (in the manual page or equivalent) on where to
342 get the Standard Version.
343
344 b) accompany the distribution with the machine-readable source of the Package
345 with your modifications.
346
347 c) accompany any non-standard executables with their corresponding Standard
348 Version executables, giving the non-standard executables non-standard
349 names, and clearly documenting the differences in manual pages (or
350 equivalent), together with instructions on where to get the Standard
351 Version.
352
353 d) make other distribution arrangements with the Copyright Holder.
354
355 5. You may charge a reasonable copying fee for any distribution of this
356 Package. You may charge any fee you choose for support of this Package. You
357 may not charge a fee for this Package itself. However, you may distribute this
358 Package in aggregate with other (possibly commercial) programs as part of a
359 larger (possibly commercial) software distribution provided that you do not
360 advertise this Package as a product of your own.
361
362 6. The scripts and library files supplied as input to or produced as output
363 from the programs of this Package do not automatically fall under the copyright
364 of this Package, but belong to whomever generated them, and may be sold
365 commercially, and may be aggregated with this Package.
366
367 7. C or perl subroutines supplied by you and linked into this Package shall not
368 be considered part of this Package.
369
370 8. The name of the Copyright Holder may not be used to endorse or promote
371 products derived from this software without specific prior written permission.
372
373 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
374 WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
375 MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
376
377 The End
378
0 # This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.010.
1 CONTRIBUTING
2 Changes
3 INSTALL
4 LICENCE
5 MANIFEST
6 META.json
7 META.yml
8 Makefile.PL
9 README
10 dist.ini
11 examples/synopsis.pl
12 lib/Object/ForkAware.pm
13 t/00-report-prereqs.dd
14 t/00-report-prereqs.t
15 t/01-basic.t
16 t/02-onfork.t
17 t/03-lazy.t
18 t/04-class-methods.t
19 t/lib/PidTracker.pm
20 xt/author/00-compile.t
21 xt/author/clean-namespaces.t
22 xt/author/eol.t
23 xt/author/kwalitee.t
24 xt/author/mojibake.t
25 xt/author/no-tabs.t
26 xt/author/pod-coverage.t
27 xt/author/pod-no404s.t
28 xt/author/pod-spell.t
29 xt/author/pod-syntax.t
30 xt/author/portability.t
31 xt/release/changes_has_content.t
32 xt/release/cpan-changes.t
33 xt/release/distmeta.t
34 xt/release/minimum-version.t
0 {
1 "abstract" : "Make an object aware of process forks and threads, recreating itself as needed",
2 "author" : [
3 "Karen Etheridge <ether@cpan.org>"
4 ],
5 "dynamic_config" : 0,
6 "generated_by" : "Dist::Zilla version 6.010, CPAN::Meta::Converter version 2.150010",
7 "keywords" : [
8 "process",
9 "thread",
10 "fork",
11 "multiprocessing",
12 "multithreading",
13 "clone"
14 ],
15 "license" : [
16 "perl_5"
17 ],
18 "meta-spec" : {
19 "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
20 "version" : 2
21 },
22 "name" : "Object-ForkAware",
23 "no_index" : {
24 "directory" : [
25 "examples",
26 "t",
27 "xt"
28 ]
29 },
30 "prereqs" : {
31 "configure" : {
32 "requires" : {
33 "ExtUtils::MakeMaker" : "0",
34 "perl" : "5.006"
35 }
36 },
37 "develop" : {
38 "recommends" : {
39 "Dist::Zilla::PluginBundle::Author::ETHER" : "0.131"
40 },
41 "requires" : {
42 "File::Spec" : "0",
43 "IO::Handle" : "0",
44 "IPC::Open3" : "0",
45 "Pod::Coverage::TrustPod" : "0",
46 "Pod::Wordlist" : "0",
47 "Test::CPAN::Changes" : "0.19",
48 "Test::CPAN::Meta" : "0",
49 "Test::CleanNamespaces" : "0.15",
50 "Test::EOL" : "0",
51 "Test::Kwalitee" : "1.21",
52 "Test::MinimumVersion" : "0",
53 "Test::Mojibake" : "0",
54 "Test::More" : "0.96",
55 "Test::NoTabs" : "0",
56 "Test::Pod" : "1.41",
57 "Test::Pod::Coverage" : "1.08",
58 "Test::Pod::No404s" : "0",
59 "Test::Portability::Files" : "0",
60 "Test::Spelling" : "0.12",
61 "perl" : "5.006"
62 },
63 "suggests" : {
64 "Dist::Zilla" : "5",
65 "Dist::Zilla::Plugin::Authority" : "1.009",
66 "Dist::Zilla::Plugin::AutoMetaResources" : "0",
67 "Dist::Zilla::Plugin::AutoPrereqs" : "5.038",
68 "Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional" : "0.004",
69 "Dist::Zilla::Plugin::CheckIssues" : "0",
70 "Dist::Zilla::Plugin::CheckMetaResources" : "0",
71 "Dist::Zilla::Plugin::CheckPrereqsIndexed" : "0.019",
72 "Dist::Zilla::Plugin::CheckSelfDependency" : "0",
73 "Dist::Zilla::Plugin::CheckStrictVersion" : "0",
74 "Dist::Zilla::Plugin::ConfirmRelease" : "0",
75 "Dist::Zilla::Plugin::CopyFilesFromRelease" : "0",
76 "Dist::Zilla::Plugin::EnsureLatestPerl" : "0",
77 "Dist::Zilla::Plugin::FileFinder::ByName" : "0",
78 "Dist::Zilla::Plugin::GenerateFile::FromShareDir" : "0",
79 "Dist::Zilla::Plugin::Git::Check" : "0",
80 "Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch" : "0.004",
81 "Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts" : "0",
82 "Dist::Zilla::Plugin::Git::Commit" : "2.020",
83 "Dist::Zilla::Plugin::Git::Contributors" : "0.029",
84 "Dist::Zilla::Plugin::Git::Describe" : "0.004",
85 "Dist::Zilla::Plugin::Git::GatherDir" : "2.016",
86 "Dist::Zilla::Plugin::Git::Push" : "0",
87 "Dist::Zilla::Plugin::Git::Remote::Check" : "0",
88 "Dist::Zilla::Plugin::Git::Tag" : "0",
89 "Dist::Zilla::Plugin::GitHub::Update" : "0.40",
90 "Dist::Zilla::Plugin::GithubMeta" : "0.54",
91 "Dist::Zilla::Plugin::InstallGuide" : "1.200005",
92 "Dist::Zilla::Plugin::Keywords" : "0.004",
93 "Dist::Zilla::Plugin::License" : "5.038",
94 "Dist::Zilla::Plugin::MakeMaker" : "0",
95 "Dist::Zilla::Plugin::Manifest" : "0",
96 "Dist::Zilla::Plugin::MetaConfig" : "0",
97 "Dist::Zilla::Plugin::MetaJSON" : "0",
98 "Dist::Zilla::Plugin::MetaNoIndex" : "0",
99 "Dist::Zilla::Plugin::MetaProvides::Package" : "1.15000002",
100 "Dist::Zilla::Plugin::MetaTests" : "0",
101 "Dist::Zilla::Plugin::MetaYAML" : "0",
102 "Dist::Zilla::Plugin::MinimumPerl" : "1.006",
103 "Dist::Zilla::Plugin::MojibakeTests" : "0.8",
104 "Dist::Zilla::Plugin::NextRelease" : "5.033",
105 "Dist::Zilla::Plugin::OnlyCorePrereqs" : "0.007",
106 "Dist::Zilla::Plugin::PodCoverageTests" : "5.040",
107 "Dist::Zilla::Plugin::PodSyntaxTests" : "5.040",
108 "Dist::Zilla::Plugin::PodWeaver" : "4.005",
109 "Dist::Zilla::Plugin::Prereqs" : "0",
110 "Dist::Zilla::Plugin::Prereqs::AuthorDeps" : "0.006",
111 "Dist::Zilla::Plugin::PromptIfStale" : "0",
112 "Dist::Zilla::Plugin::Readme" : "0",
113 "Dist::Zilla::Plugin::ReadmeAnyFromPod" : "0.142180",
114 "Dist::Zilla::Plugin::RewriteVersion::Transitional" : "0.004",
115 "Dist::Zilla::Plugin::Run::AfterBuild" : "0.041",
116 "Dist::Zilla::Plugin::Run::AfterRelease" : "0.038",
117 "Dist::Zilla::Plugin::RunExtraTests" : "0.024",
118 "Dist::Zilla::Plugin::StaticInstall" : "0.005",
119 "Dist::Zilla::Plugin::Test::CPAN::Changes" : "0.012",
120 "Dist::Zilla::Plugin::Test::ChangesHasContent" : "0",
121 "Dist::Zilla::Plugin::Test::CleanNamespaces" : "0.006",
122 "Dist::Zilla::Plugin::Test::Compile" : "2.039",
123 "Dist::Zilla::Plugin::Test::EOL" : "0.17",
124 "Dist::Zilla::Plugin::Test::Kwalitee" : "2.10",
125 "Dist::Zilla::Plugin::Test::MinimumVersion" : "2.000003",
126 "Dist::Zilla::Plugin::Test::NoTabs" : "0.08",
127 "Dist::Zilla::Plugin::Test::Pod::No404s" : "1.003",
128 "Dist::Zilla::Plugin::Test::PodSpelling" : "2.006003",
129 "Dist::Zilla::Plugin::Test::Portability" : "2.000007",
130 "Dist::Zilla::Plugin::Test::ReportPrereqs" : "0.022",
131 "Dist::Zilla::Plugin::TestRelease" : "0",
132 "Dist::Zilla::Plugin::UploadToCPAN" : "0",
133 "Dist::Zilla::Plugin::UseUnsafeInc" : "0",
134 "Dist::Zilla::PluginBundle::Author::ETHER" : "0.119",
135 "Dist::Zilla::PluginBundle::Git::VersionManager" : "0",
136 "Software::License::Perl_5" : "0"
137 }
138 },
139 "runtime" : {
140 "requires" : {
141 "Scalar::Util" : "0",
142 "perl" : "5.006",
143 "strict" : "0",
144 "warnings" : "0"
145 }
146 },
147 "test" : {
148 "recommends" : {
149 "CPAN::Meta" : "2.120900"
150 },
151 "requires" : {
152 "ExtUtils::MakeMaker" : "0",
153 "File::Spec" : "0",
154 "Test::Fatal" : "0",
155 "Test::More" : "0.88",
156 "Test::Warnings" : "0.009",
157 "if" : "0",
158 "lib" : "0",
159 "perl" : "5.006"
160 }
161 }
162 },
163 "provides" : {
164 "Object::ForkAware" : {
165 "file" : "lib/Object/ForkAware.pm",
166 "version" : "0.005"
167 }
168 },
169 "release_status" : "stable",
170 "resources" : {
171 "bugtracker" : {
172 "mailto" : "bug-Object-ForkAware@rt.cpan.org",
173 "web" : "https://rt.cpan.org/Public/Dist/Display.html?Name=Object-ForkAware"
174 },
175 "homepage" : "https://github.com/karenetheridge/Object-ForkAware",
176 "repository" : {
177 "type" : "git",
178 "url" : "https://github.com/karenetheridge/Object-ForkAware.git",
179 "web" : "https://github.com/karenetheridge/Object-ForkAware"
180 }
181 },
182 "version" : "0.005",
183 "x_Dist_Zilla" : {
184 "perl" : {
185 "version" : "5.027004"
186 },
187 "plugins" : [
188 {
189 "class" : "Dist::Zilla::Plugin::PromptIfStale",
190 "config" : {
191 "Dist::Zilla::Plugin::PromptIfStale" : {
192 "check_all_plugins" : 0,
193 "check_all_prereqs" : 0,
194 "modules" : [
195 "Dist::Zilla::PluginBundle::Author::ETHER"
196 ],
197 "phase" : "build",
198 "run_under_travis" : 0,
199 "skip" : []
200 }
201 },
202 "name" : "@Author::ETHER/stale modules, build",
203 "version" : "0.054"
204 },
205 {
206 "class" : "Dist::Zilla::Plugin::PromptIfStale",
207 "config" : {
208 "Dist::Zilla::Plugin::PromptIfStale" : {
209 "check_all_plugins" : 1,
210 "check_all_prereqs" : 1,
211 "modules" : [],
212 "phase" : "release",
213 "run_under_travis" : 0,
214 "skip" : []
215 }
216 },
217 "name" : "@Author::ETHER/stale modules, release",
218 "version" : "0.054"
219 },
220 {
221 "class" : "Dist::Zilla::Plugin::FileFinder::ByName",
222 "name" : "@Author::ETHER/Examples",
223 "version" : "6.010"
224 },
225 {
226 "class" : "Dist::Zilla::Plugin::Git::GatherDir",
227 "config" : {
228 "Dist::Zilla::Plugin::GatherDir" : {
229 "exclude_filename" : [
230 "CONTRIBUTING",
231 "INSTALL",
232 "LICENCE",
233 "README.pod"
234 ],
235 "exclude_match" : [],
236 "follow_symlinks" : 0,
237 "include_dotfiles" : 0,
238 "prefix" : "",
239 "prune_directory" : [],
240 "root" : "."
241 },
242 "Dist::Zilla::Plugin::Git::GatherDir" : {
243 "include_untracked" : 0
244 }
245 },
246 "name" : "@Author::ETHER/Git::GatherDir",
247 "version" : "2.042"
248 },
249 {
250 "class" : "Dist::Zilla::Plugin::MetaYAML",
251 "name" : "@Author::ETHER/MetaYAML",
252 "version" : "6.010"
253 },
254 {
255 "class" : "Dist::Zilla::Plugin::MetaJSON",
256 "name" : "@Author::ETHER/MetaJSON",
257 "version" : "6.010"
258 },
259 {
260 "class" : "Dist::Zilla::Plugin::Readme",
261 "name" : "@Author::ETHER/Readme",
262 "version" : "6.010"
263 },
264 {
265 "class" : "Dist::Zilla::Plugin::Manifest",
266 "name" : "@Author::ETHER/Manifest",
267 "version" : "6.010"
268 },
269 {
270 "class" : "Dist::Zilla::Plugin::License",
271 "name" : "@Author::ETHER/License",
272 "version" : "6.010"
273 },
274 {
275 "class" : "Dist::Zilla::Plugin::GenerateFile::FromShareDir",
276 "config" : {
277 "Dist::Zilla::Plugin::GenerateFile::FromShareDir" : {
278 "destination_filename" : "CONTRIBUTING",
279 "dist" : "Dist-Zilla-PluginBundle-Author-ETHER",
280 "encoding" : "UTF-8",
281 "has_xs" : 0,
282 "location" : "build",
283 "source_filename" : "CONTRIBUTING"
284 },
285 "Dist::Zilla::Role::RepoFileInjector" : {
286 "allow_overwrite" : 1,
287 "repo_root" : ".",
288 "version" : "0.007"
289 }
290 },
291 "name" : "@Author::ETHER/generate CONTRIBUTING",
292 "version" : "0.013"
293 },
294 {
295 "class" : "Dist::Zilla::Plugin::InstallGuide",
296 "name" : "@Author::ETHER/InstallGuide",
297 "version" : "1.200007"
298 },
299 {
300 "class" : "Dist::Zilla::Plugin::Test::Compile",
301 "config" : {
302 "Dist::Zilla::Plugin::Test::Compile" : {
303 "bail_out_on_fail" : 1,
304 "fail_on_warning" : "author",
305 "fake_home" : 0,
306 "filename" : "xt/author/00-compile.t",
307 "module_finder" : [
308 ":InstallModules"
309 ],
310 "needs_display" : 0,
311 "phase" : "develop",
312 "script_finder" : [
313 ":PerlExecFiles",
314 "@Author::ETHER/Examples"
315 ],
316 "skips" : [],
317 "switch" : []
318 }
319 },
320 "name" : "@Author::ETHER/Test::Compile",
321 "version" : "2.057"
322 },
323 {
324 "class" : "Dist::Zilla::Plugin::Test::NoTabs",
325 "config" : {
326 "Dist::Zilla::Plugin::Test::NoTabs" : {
327 "filename" : "xt/author/no-tabs.t",
328 "finder" : [
329 ":InstallModules",
330 ":ExecFiles",
331 "@Author::ETHER/Examples",
332 ":TestFiles",
333 ":ExtraTestFiles"
334 ]
335 }
336 },
337 "name" : "@Author::ETHER/Test::NoTabs",
338 "version" : "0.15"
339 },
340 {
341 "class" : "Dist::Zilla::Plugin::Test::EOL",
342 "config" : {
343 "Dist::Zilla::Plugin::Test::EOL" : {
344 "filename" : "xt/author/eol.t",
345 "finder" : [
346 ":ExecFiles",
347 ":ExtraTestFiles",
348 ":InstallModules",
349 ":TestFiles",
350 "@Author::ETHER/Examples"
351 ],
352 "trailing_whitespace" : 1
353 }
354 },
355 "name" : "@Author::ETHER/Test::EOL",
356 "version" : "0.19"
357 },
358 {
359 "class" : "Dist::Zilla::Plugin::MetaTests",
360 "name" : "@Author::ETHER/MetaTests",
361 "version" : "6.010"
362 },
363 {
364 "class" : "Dist::Zilla::Plugin::Test::CPAN::Changes",
365 "config" : {
366 "Dist::Zilla::Plugin::Test::CPAN::Changes" : {
367 "changelog" : "Changes"
368 }
369 },
370 "name" : "@Author::ETHER/Test::CPAN::Changes",
371 "version" : "0.012"
372 },
373 {
374 "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
375 "name" : "@Author::ETHER/Test::ChangesHasContent",
376 "version" : "0.010"
377 },
378 {
379 "class" : "Dist::Zilla::Plugin::Test::MinimumVersion",
380 "name" : "@Author::ETHER/Test::MinimumVersion",
381 "version" : "2.000007"
382 },
383 {
384 "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
385 "name" : "@Author::ETHER/PodSyntaxTests",
386 "version" : "6.010"
387 },
388 {
389 "class" : "Dist::Zilla::Plugin::PodCoverageTests",
390 "name" : "@Author::ETHER/PodCoverageTests",
391 "version" : "6.010"
392 },
393 {
394 "class" : "Dist::Zilla::Plugin::Test::PodSpelling",
395 "config" : {
396 "Dist::Zilla::Plugin::Test::PodSpelling" : {
397 "directories" : [
398 "examples",
399 "lib",
400 "script",
401 "t",
402 "xt"
403 ],
404 "spell_cmd" : "",
405 "stopwords" : [
406 "irc"
407 ],
408 "wordlist" : "Pod::Wordlist"
409 }
410 },
411 "name" : "@Author::ETHER/Test::PodSpelling",
412 "version" : "2.007004"
413 },
414 {
415 "class" : "Dist::Zilla::Plugin::Test::Pod::No404s",
416 "name" : "@Author::ETHER/Test::Pod::No404s",
417 "version" : "1.004"
418 },
419 {
420 "class" : "Dist::Zilla::Plugin::Test::Kwalitee",
421 "config" : {
422 "Dist::Zilla::Plugin::Test::Kwalitee" : {
423 "filename" : "xt/author/kwalitee.t",
424 "skiptest" : []
425 }
426 },
427 "name" : "@Author::ETHER/Test::Kwalitee",
428 "version" : "2.12"
429 },
430 {
431 "class" : "Dist::Zilla::Plugin::MojibakeTests",
432 "name" : "@Author::ETHER/MojibakeTests",
433 "version" : "0.8"
434 },
435 {
436 "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
437 "name" : "@Author::ETHER/Test::ReportPrereqs",
438 "version" : "0.027"
439 },
440 {
441 "class" : "Dist::Zilla::Plugin::Test::Portability",
442 "config" : {
443 "Dist::Zilla::Plugin::Test::Portability" : {
444 "options" : ""
445 }
446 },
447 "name" : "@Author::ETHER/Test::Portability",
448 "version" : "2.001000"
449 },
450 {
451 "class" : "Dist::Zilla::Plugin::Test::CleanNamespaces",
452 "config" : {
453 "Dist::Zilla::Plugin::Test::CleanNamespaces" : {
454 "filename" : "xt/author/clean-namespaces.t",
455 "skips" : []
456 }
457 },
458 "name" : "@Author::ETHER/Test::CleanNamespaces",
459 "version" : "0.006"
460 },
461 {
462 "class" : "Dist::Zilla::Plugin::Git::Describe",
463 "name" : "@Author::ETHER/Git::Describe",
464 "version" : "0.007"
465 },
466 {
467 "class" : "Dist::Zilla::Plugin::PodWeaver",
468 "config" : {
469 "Dist::Zilla::Plugin::PodWeaver" : {
470 "config_plugins" : [
471 "@Author::ETHER"
472 ],
473 "finder" : [
474 ":InstallModules",
475 ":ExecFiles"
476 ],
477 "plugins" : [
478 {
479 "class" : "Pod::Weaver::Plugin::EnsurePod5",
480 "name" : "@Author::ETHER/EnsurePod5",
481 "version" : "4.015"
482 },
483 {
484 "class" : "Pod::Weaver::Plugin::H1Nester",
485 "name" : "@Author::ETHER/H1Nester",
486 "version" : "4.015"
487 },
488 {
489 "class" : "Pod::Weaver::Plugin::SingleEncoding",
490 "name" : "@Author::ETHER/SingleEncoding",
491 "version" : "4.015"
492 },
493 {
494 "class" : "Pod::Weaver::Plugin::Transformer",
495 "name" : "@Author::ETHER/List",
496 "version" : "4.015"
497 },
498 {
499 "class" : "Pod::Weaver::Plugin::Transformer",
500 "name" : "@Author::ETHER/Verbatim",
501 "version" : "4.015"
502 },
503 {
504 "class" : "Pod::Weaver::Section::Region",
505 "name" : "@Author::ETHER/header",
506 "version" : "4.015"
507 },
508 {
509 "class" : "Pod::Weaver::Section::Name",
510 "name" : "@Author::ETHER/Name",
511 "version" : "4.015"
512 },
513 {
514 "class" : "Pod::Weaver::Section::Version",
515 "name" : "@Author::ETHER/Version",
516 "version" : "4.015"
517 },
518 {
519 "class" : "Pod::Weaver::Section::Region",
520 "name" : "@Author::ETHER/prelude",
521 "version" : "4.015"
522 },
523 {
524 "class" : "Pod::Weaver::Section::Generic",
525 "name" : "SYNOPSIS",
526 "version" : "4.015"
527 },
528 {
529 "class" : "Pod::Weaver::Section::Generic",
530 "name" : "DESCRIPTION",
531 "version" : "4.015"
532 },
533 {
534 "class" : "Pod::Weaver::Section::Generic",
535 "name" : "OVERVIEW",
536 "version" : "4.015"
537 },
538 {
539 "class" : "Pod::Weaver::Section::Collect",
540 "name" : "ATTRIBUTES",
541 "version" : "4.015"
542 },
543 {
544 "class" : "Pod::Weaver::Section::Collect",
545 "name" : "METHODS",
546 "version" : "4.015"
547 },
548 {
549 "class" : "Pod::Weaver::Section::Collect",
550 "name" : "FUNCTIONS",
551 "version" : "4.015"
552 },
553 {
554 "class" : "Pod::Weaver::Section::Collect",
555 "name" : "TYPES",
556 "version" : "4.015"
557 },
558 {
559 "class" : "Pod::Weaver::Section::Leftovers",
560 "name" : "@Author::ETHER/Leftovers",
561 "version" : "4.015"
562 },
563 {
564 "class" : "Pod::Weaver::Section::Region",
565 "name" : "@Author::ETHER/postlude",
566 "version" : "4.015"
567 },
568 {
569 "class" : "Pod::Weaver::Section::GenerateSection",
570 "name" : "@Author::ETHER/generate SUPPORT",
571 "version" : "1.06"
572 },
573 {
574 "class" : "Pod::Weaver::Section::AllowOverride",
575 "name" : "@Author::ETHER/allow override SUPPORT",
576 "version" : "0.05"
577 },
578 {
579 "class" : "Pod::Weaver::Section::Authors",
580 "name" : "@Author::ETHER/Authors",
581 "version" : "4.015"
582 },
583 {
584 "class" : "Pod::Weaver::Section::Contributors",
585 "name" : "@Author::ETHER/Contributors",
586 "version" : "0.009"
587 },
588 {
589 "class" : "Pod::Weaver::Section::Legal",
590 "name" : "@Author::ETHER/Legal",
591 "version" : "4.015"
592 },
593 {
594 "class" : "Pod::Weaver::Section::Region",
595 "name" : "@Author::ETHER/footer",
596 "version" : "4.015"
597 }
598 ]
599 }
600 },
601 "name" : "@Author::ETHER/PodWeaver",
602 "version" : "4.008"
603 },
604 {
605 "class" : "Dist::Zilla::Plugin::GithubMeta",
606 "name" : "@Author::ETHER/GithubMeta",
607 "version" : "0.54"
608 },
609 {
610 "class" : "Dist::Zilla::Plugin::AutoMetaResources",
611 "name" : "@Author::ETHER/AutoMetaResources",
612 "version" : "1.21"
613 },
614 {
615 "class" : "Dist::Zilla::Plugin::Authority",
616 "name" : "@Author::ETHER/Authority",
617 "version" : "1.009"
618 },
619 {
620 "class" : "Dist::Zilla::Plugin::MetaNoIndex",
621 "name" : "@Author::ETHER/MetaNoIndex",
622 "version" : "6.010"
623 },
624 {
625 "class" : "Dist::Zilla::Plugin::MetaProvides::Package",
626 "config" : {
627 "Dist::Zilla::Plugin::MetaProvides::Package" : {
628 "finder" : [
629 ":InstallModules"
630 ],
631 "finder_objects" : [
632 {
633 "class" : "Dist::Zilla::Plugin::FinderCode",
634 "name" : ":InstallModules",
635 "version" : "6.010"
636 }
637 ],
638 "include_underscores" : 0
639 },
640 "Dist::Zilla::Role::MetaProvider::Provider" : {
641 "$Dist::Zilla::Role::MetaProvider::Provider::VERSION" : "2.002004",
642 "inherit_missing" : 0,
643 "inherit_version" : 0,
644 "meta_noindex" : 1
645 },
646 "Dist::Zilla::Role::ModuleMetadata" : {
647 "Module::Metadata" : "1.000033",
648 "version" : "0.004"
649 }
650 },
651 "name" : "@Author::ETHER/MetaProvides::Package",
652 "version" : "2.004003"
653 },
654 {
655 "class" : "Dist::Zilla::Plugin::MetaConfig",
656 "name" : "@Author::ETHER/MetaConfig",
657 "version" : "6.010"
658 },
659 {
660 "class" : "Dist::Zilla::Plugin::Keywords",
661 "config" : {
662 "Dist::Zilla::Plugin::Keywords" : {
663 "keywords" : [
664 "process",
665 "thread",
666 "fork",
667 "multiprocessing",
668 "multithreading",
669 "clone"
670 ]
671 }
672 },
673 "name" : "@Author::ETHER/Keywords",
674 "version" : "0.007"
675 },
676 {
677 "class" : "Dist::Zilla::Plugin::UseUnsafeInc",
678 "config" : {
679 "Dist::Zilla::Plugin::UseUnsafeInc" : {
680 "dot_in_INC" : 0
681 }
682 },
683 "name" : "@Author::ETHER/UseUnsafeInc",
684 "version" : "0.001"
685 },
686 {
687 "class" : "Dist::Zilla::Plugin::AutoPrereqs",
688 "name" : "@Author::ETHER/AutoPrereqs",
689 "version" : "6.010"
690 },
691 {
692 "class" : "Dist::Zilla::Plugin::Prereqs::AuthorDeps",
693 "name" : "@Author::ETHER/Prereqs::AuthorDeps",
694 "version" : "0.006"
695 },
696 {
697 "class" : "Dist::Zilla::Plugin::MinimumPerl",
698 "name" : "@Author::ETHER/MinimumPerl",
699 "version" : "1.006"
700 },
701 {
702 "class" : "Dist::Zilla::Plugin::Prereqs",
703 "config" : {
704 "Dist::Zilla::Plugin::Prereqs" : {
705 "phase" : "develop",
706 "type" : "recommends"
707 }
708 },
709 "name" : "@Author::ETHER/pluginbundle_version",
710 "version" : "6.010"
711 },
712 {
713 "class" : "Dist::Zilla::Plugin::MakeMaker",
714 "config" : {
715 "Dist::Zilla::Role::TestRunner" : {
716 "default_jobs" : 9
717 }
718 },
719 "name" : "@Author::ETHER/MakeMaker",
720 "version" : "6.010"
721 },
722 {
723 "class" : "Dist::Zilla::Plugin::Git::Contributors",
724 "config" : {
725 "Dist::Zilla::Plugin::Git::Contributors" : {
726 "git_version" : "2.14.2",
727 "include_authors" : 0,
728 "include_releaser" : 1,
729 "order_by" : "commits",
730 "paths" : []
731 }
732 },
733 "name" : "@Author::ETHER/Git::Contributors",
734 "version" : "0.030"
735 },
736 {
737 "class" : "Dist::Zilla::Plugin::StaticInstall",
738 "config" : {
739 "Dist::Zilla::Plugin::StaticInstall" : {
740 "dry_run" : 0,
741 "mode" : "auto"
742 }
743 },
744 "name" : "@Author::ETHER/StaticInstall",
745 "version" : "0.011"
746 },
747 {
748 "class" : "Dist::Zilla::Plugin::RunExtraTests",
749 "config" : {
750 "Dist::Zilla::Role::TestRunner" : {
751 "default_jobs" : 9
752 }
753 },
754 "name" : "@Author::ETHER/RunExtraTests",
755 "version" : "0.029"
756 },
757 {
758 "class" : "Dist::Zilla::Plugin::CheckSelfDependency",
759 "config" : {
760 "Dist::Zilla::Plugin::CheckSelfDependency" : {
761 "finder" : [
762 ":InstallModules"
763 ]
764 },
765 "Dist::Zilla::Role::ModuleMetadata" : {
766 "Module::Metadata" : "1.000033",
767 "version" : "0.004"
768 }
769 },
770 "name" : "@Author::ETHER/CheckSelfDependency",
771 "version" : "0.011"
772 },
773 {
774 "class" : "Dist::Zilla::Plugin::Run::AfterBuild",
775 "config" : {
776 "Dist::Zilla::Plugin::Run::Role::Runner" : {
777 "fatal_errors" : 1,
778 "quiet" : 1,
779 "run" : [
780 "bash -c \"test -e .ackrc && grep -q -- '--ignore-dir=.latest' .ackrc || echo '--ignore-dir=.latest' >> .ackrc; if [[ `dirname '%d'` != .build ]]; then test -e .ackrc && grep -q -- '--ignore-dir=%d' .ackrc || echo '--ignore-dir=%d' >> .ackrc; fi\""
781 ],
782 "version" : "0.046"
783 }
784 },
785 "name" : "@Author::ETHER/.ackrc",
786 "version" : "0.046"
787 },
788 {
789 "class" : "Dist::Zilla::Plugin::Run::AfterBuild",
790 "config" : {
791 "Dist::Zilla::Plugin::Run::Role::Runner" : {
792 "eval" : [
793 "if ('%d' =~ /^%n-[.[:xdigit:]]+$/) { unlink '.latest'; symlink '%d', '.latest'; }"
794 ],
795 "fatal_errors" : 0,
796 "quiet" : 1,
797 "version" : "0.046"
798 }
799 },
800 "name" : "@Author::ETHER/.latest",
801 "version" : "0.046"
802 },
803 {
804 "class" : "Dist::Zilla::Plugin::CheckStrictVersion",
805 "name" : "@Author::ETHER/CheckStrictVersion",
806 "version" : "0.001"
807 },
808 {
809 "class" : "Dist::Zilla::Plugin::CheckMetaResources",
810 "name" : "@Author::ETHER/CheckMetaResources",
811 "version" : "0.001"
812 },
813 {
814 "class" : "Dist::Zilla::Plugin::EnsureLatestPerl",
815 "config" : {
816 "Dist::Zilla::Plugin::EnsureLatestPerl" : {
817 "Module::CoreList" : "5.20170923"
818 }
819 },
820 "name" : "@Author::ETHER/EnsureLatestPerl",
821 "version" : "0.006"
822 },
823 {
824 "class" : "Dist::Zilla::Plugin::Git::Check",
825 "config" : {
826 "Dist::Zilla::Plugin::Git::Check" : {
827 "untracked_files" : "die"
828 },
829 "Dist::Zilla::Role::Git::DirtyFiles" : {
830 "allow_dirty" : [],
831 "allow_dirty_match" : [],
832 "changelog" : "Changes"
833 },
834 "Dist::Zilla::Role::Git::Repo" : {
835 "git_version" : "2.14.2",
836 "repo_root" : "."
837 }
838 },
839 "name" : "@Author::ETHER/initial check",
840 "version" : "2.042"
841 },
842 {
843 "class" : "Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts",
844 "config" : {
845 "Dist::Zilla::Role::Git::Repo" : {
846 "git_version" : "2.14.2",
847 "repo_root" : "."
848 }
849 },
850 "name" : "@Author::ETHER/Git::CheckFor::MergeConflicts",
851 "version" : "0.014"
852 },
853 {
854 "class" : "Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch",
855 "config" : {
856 "Dist::Zilla::Role::Git::Repo" : {
857 "git_version" : "2.14.2",
858 "repo_root" : "."
859 }
860 },
861 "name" : "@Author::ETHER/Git::CheckFor::CorrectBranch",
862 "version" : "0.014"
863 },
864 {
865 "class" : "Dist::Zilla::Plugin::Git::Remote::Check",
866 "name" : "@Author::ETHER/Git::Remote::Check",
867 "version" : "0.2.0"
868 },
869 {
870 "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
871 "name" : "@Author::ETHER/CheckPrereqsIndexed",
872 "version" : "0.020"
873 },
874 {
875 "class" : "Dist::Zilla::Plugin::TestRelease",
876 "name" : "@Author::ETHER/TestRelease",
877 "version" : "6.010"
878 },
879 {
880 "class" : "Dist::Zilla::Plugin::Git::Check",
881 "config" : {
882 "Dist::Zilla::Plugin::Git::Check" : {
883 "untracked_files" : "die"
884 },
885 "Dist::Zilla::Role::Git::DirtyFiles" : {
886 "allow_dirty" : [],
887 "allow_dirty_match" : [],
888 "changelog" : "Changes"
889 },
890 "Dist::Zilla::Role::Git::Repo" : {
891 "git_version" : "2.14.2",
892 "repo_root" : "."
893 }
894 },
895 "name" : "@Author::ETHER/after tests",
896 "version" : "2.042"
897 },
898 {
899 "class" : "Dist::Zilla::Plugin::CheckIssues",
900 "name" : "@Author::ETHER/CheckIssues",
901 "version" : "0.010"
902 },
903 {
904 "class" : "Dist::Zilla::Plugin::UploadToCPAN",
905 "name" : "@Author::ETHER/UploadToCPAN",
906 "version" : "6.010"
907 },
908 {
909 "class" : "Dist::Zilla::Plugin::CopyFilesFromRelease",
910 "config" : {
911 "Dist::Zilla::Plugin::CopyFilesFromRelease" : {
912 "filename" : [
913 "CONTRIBUTING",
914 "INSTALL",
915 "LICENCE",
916 "LICENSE",
917 "ppport.h"
918 ],
919 "match" : []
920 }
921 },
922 "name" : "@Author::ETHER/copy generated files",
923 "version" : "0.006"
924 },
925 {
926 "class" : "Dist::Zilla::Plugin::ReadmeAnyFromPod",
927 "config" : {
928 "Dist::Zilla::Role::FileWatcher" : {
929 "version" : "0.006"
930 }
931 },
932 "name" : "@Author::ETHER/ReadmeAnyFromPod",
933 "version" : "0.163250"
934 },
935 {
936 "class" : "Dist::Zilla::Plugin::RewriteVersion::Transitional",
937 "config" : {
938 "Dist::Zilla::Plugin::RewriteVersion" : {
939 "add_tarball_name" : 0,
940 "finders" : [
941 ":ExecFiles",
942 ":InstallModules"
943 ],
944 "global" : 1,
945 "skip_version_provider" : 0
946 },
947 "Dist::Zilla::Plugin::RewriteVersion::Transitional" : {}
948 },
949 "name" : "@Author::ETHER/@Git::VersionManager/RewriteVersion::Transitional",
950 "version" : "0.008"
951 },
952 {
953 "class" : "Dist::Zilla::Plugin::MetaProvides::Update",
954 "name" : "@Author::ETHER/@Git::VersionManager/MetaProvides::Update",
955 "version" : "0.002"
956 },
957 {
958 "class" : "Dist::Zilla::Plugin::CopyFilesFromRelease",
959 "config" : {
960 "Dist::Zilla::Plugin::CopyFilesFromRelease" : {
961 "filename" : [
962 "Changes"
963 ],
964 "match" : []
965 }
966 },
967 "name" : "@Author::ETHER/@Git::VersionManager/CopyFilesFromRelease",
968 "version" : "0.006"
969 },
970 {
971 "class" : "Dist::Zilla::Plugin::Git::Commit",
972 "config" : {
973 "Dist::Zilla::Plugin::Git::Commit" : {
974 "add_files_in" : [
975 "."
976 ],
977 "commit_msg" : "%N-%v%t%n%n%c"
978 },
979 "Dist::Zilla::Role::Git::DirtyFiles" : {
980 "allow_dirty" : [
981 "CONTRIBUTING",
982 "Changes",
983 "INSTALL",
984 "LICENCE",
985 "README.pod"
986 ],
987 "allow_dirty_match" : [],
988 "changelog" : "Changes"
989 },
990 "Dist::Zilla::Role::Git::Repo" : {
991 "git_version" : "2.14.2",
992 "repo_root" : "."
993 },
994 "Dist::Zilla::Role::Git::StringFormatter" : {
995 "time_zone" : "local"
996 }
997 },
998 "name" : "@Author::ETHER/@Git::VersionManager/release snapshot",
999 "version" : "2.042"
1000 },
1001 {
1002 "class" : "Dist::Zilla::Plugin::Git::Tag",
1003 "config" : {
1004 "Dist::Zilla::Plugin::Git::Tag" : {
1005 "branch" : null,
1006 "changelog" : "Changes",
1007 "signed" : 0,
1008 "tag" : "v0.005",
1009 "tag_format" : "v%v",
1010 "tag_message" : "v%v%t"
1011 },
1012 "Dist::Zilla::Role::Git::Repo" : {
1013 "git_version" : "2.14.2",
1014 "repo_root" : "."
1015 },
1016 "Dist::Zilla::Role::Git::StringFormatter" : {
1017 "time_zone" : "local"
1018 }
1019 },
1020 "name" : "@Author::ETHER/@Git::VersionManager/Git::Tag",
1021 "version" : "2.042"
1022 },
1023 {
1024 "class" : "Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional",
1025 "config" : {
1026 "Dist::Zilla::Plugin::BumpVersionAfterRelease" : {
1027 "finders" : [
1028 ":ExecFiles",
1029 ":InstallModules"
1030 ],
1031 "global" : 1,
1032 "munge_makefile_pl" : 1
1033 },
1034 "Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional" : {}
1035 },
1036 "name" : "@Author::ETHER/@Git::VersionManager/BumpVersionAfterRelease::Transitional",
1037 "version" : "0.008"
1038 },
1039 {
1040 "class" : "Dist::Zilla::Plugin::NextRelease",
1041 "name" : "@Author::ETHER/@Git::VersionManager/NextRelease",
1042 "version" : "6.010"
1043 },
1044 {
1045 "class" : "Dist::Zilla::Plugin::Git::Commit",
1046 "config" : {
1047 "Dist::Zilla::Plugin::Git::Commit" : {
1048 "add_files_in" : [],
1049 "commit_msg" : "increment $VERSION after %v release"
1050 },
1051 "Dist::Zilla::Role::Git::DirtyFiles" : {
1052 "allow_dirty" : [
1053 "Changes"
1054 ],
1055 "allow_dirty_match" : [
1056 "(?^:^lib/.*\\.pm$)"
1057 ],
1058 "changelog" : "Changes"
1059 },
1060 "Dist::Zilla::Role::Git::Repo" : {
1061 "git_version" : "2.14.2",
1062 "repo_root" : "."
1063 },
1064 "Dist::Zilla::Role::Git::StringFormatter" : {
1065 "time_zone" : "local"
1066 }
1067 },
1068 "name" : "@Author::ETHER/@Git::VersionManager/post-release commit",
1069 "version" : "2.042"
1070 },
1071 {
1072 "class" : "Dist::Zilla::Plugin::Prereqs",
1073 "config" : {
1074 "Dist::Zilla::Plugin::Prereqs" : {
1075 "phase" : "develop",
1076 "type" : "suggests"
1077 }
1078 },
1079 "name" : "@Author::ETHER/@Git::VersionManager/prereqs for @Git::VersionManager",
1080 "version" : "6.010"
1081 },
1082 {
1083 "class" : "Dist::Zilla::Plugin::Git::Push",
1084 "config" : {
1085 "Dist::Zilla::Plugin::Git::Push" : {
1086 "push_to" : [
1087 "origin"
1088 ],
1089 "remotes_must_exist" : 1
1090 },
1091 "Dist::Zilla::Role::Git::Repo" : {
1092 "git_version" : "2.14.2",
1093 "repo_root" : "."
1094 }
1095 },
1096 "name" : "@Author::ETHER/Git::Push",
1097 "version" : "2.042"
1098 },
1099 {
1100 "class" : "Dist::Zilla::Plugin::GitHub::Update",
1101 "config" : {
1102 "Dist::Zilla::Plugin::GitHub::Update" : {
1103 "metacpan" : 1
1104 }
1105 },
1106 "name" : "@Author::ETHER/GitHub::Update",
1107 "version" : "0.44"
1108 },
1109 {
1110 "class" : "Dist::Zilla::Plugin::Run::AfterRelease",
1111 "config" : {
1112 "Dist::Zilla::Plugin::Run::Role::Runner" : {
1113 "fatal_errors" : 0,
1114 "quiet" : 0,
1115 "run" : [
1116 "REDACTED"
1117 ],
1118 "version" : "0.046"
1119 }
1120 },
1121 "name" : "@Author::ETHER/install release",
1122 "version" : "0.046"
1123 },
1124 {
1125 "class" : "Dist::Zilla::Plugin::Run::AfterRelease",
1126 "config" : {
1127 "Dist::Zilla::Plugin::Run::Role::Runner" : {
1128 "eval" : [
1129 "print \"release complete!\\xa\""
1130 ],
1131 "fatal_errors" : 1,
1132 "quiet" : 1,
1133 "version" : "0.046"
1134 }
1135 },
1136 "name" : "@Author::ETHER/release complete",
1137 "version" : "0.046"
1138 },
1139 {
1140 "class" : "Dist::Zilla::Plugin::ConfirmRelease",
1141 "name" : "@Author::ETHER/ConfirmRelease",
1142 "version" : "6.010"
1143 },
1144 {
1145 "class" : "Dist::Zilla::Plugin::Prereqs",
1146 "config" : {
1147 "Dist::Zilla::Plugin::Prereqs" : {
1148 "phase" : "develop",
1149 "type" : "suggests"
1150 }
1151 },
1152 "name" : "@Author::ETHER/prereqs for @Author::ETHER",
1153 "version" : "6.010"
1154 },
1155 {
1156 "class" : "Dist::Zilla::Plugin::OnlyCorePrereqs",
1157 "config" : {
1158 "Dist::Zilla::Plugin::OnlyCorePrereqs" : {
1159 "also_disallow" : [],
1160 "check_dual_life_versions" : "1",
1161 "deprecated_ok" : 0,
1162 "phases" : [
1163 "runtime"
1164 ],
1165 "skips" : [],
1166 "starting_version" : "5.007003"
1167 }
1168 },
1169 "name" : "OnlyCorePrereqs",
1170 "version" : "0.024"
1171 },
1172 {
1173 "class" : "Dist::Zilla::Plugin::FinderCode",
1174 "name" : ":InstallModules",
1175 "version" : "6.010"
1176 },
1177 {
1178 "class" : "Dist::Zilla::Plugin::FinderCode",
1179 "name" : ":IncModules",
1180 "version" : "6.010"
1181 },
1182 {
1183 "class" : "Dist::Zilla::Plugin::FinderCode",
1184 "name" : ":TestFiles",
1185 "version" : "6.010"
1186 },
1187 {
1188 "class" : "Dist::Zilla::Plugin::FinderCode",
1189 "name" : ":ExtraTestFiles",
1190 "version" : "6.010"
1191 },
1192 {
1193 "class" : "Dist::Zilla::Plugin::FinderCode",
1194 "name" : ":ExecFiles",
1195 "version" : "6.010"
1196 },
1197 {
1198 "class" : "Dist::Zilla::Plugin::FinderCode",
1199 "name" : ":PerlExecFiles",
1200 "version" : "6.010"
1201 },
1202 {
1203 "class" : "Dist::Zilla::Plugin::FinderCode",
1204 "name" : ":ShareFiles",
1205 "version" : "6.010"
1206 },
1207 {
1208 "class" : "Dist::Zilla::Plugin::FinderCode",
1209 "name" : ":MainModule",
1210 "version" : "6.010"
1211 },
1212 {
1213 "class" : "Dist::Zilla::Plugin::FinderCode",
1214 "name" : ":AllFiles",
1215 "version" : "6.010"
1216 },
1217 {
1218 "class" : "Dist::Zilla::Plugin::FinderCode",
1219 "name" : ":NoFiles",
1220 "version" : "6.010"
1221 },
1222 {
1223 "class" : "Dist::Zilla::Plugin::VerifyPhases",
1224 "name" : "@Author::ETHER/PHASE VERIFICATION",
1225 "version" : "0.016"
1226 }
1227 ],
1228 "zilla" : {
1229 "class" : "Dist::Zilla::Dist::Builder",
1230 "config" : {
1231 "is_trial" : 0
1232 },
1233 "version" : "6.010"
1234 }
1235 },
1236 "x_authority" : "cpan:ETHER",
1237 "x_contributors" : [
1238 "Graham Knop <haarg@haarg.org>"
1239 ],
1240 "x_serialization_backend" : "Cpanel::JSON::XS version 3.0239",
1241 "x_static_install" : 1,
1242 "x_use_unsafe_inc" : 0
1243 }
1244
0 ---
1 abstract: 'Make an object aware of process forks and threads, recreating itself as needed'
2 author:
3 - 'Karen Etheridge <ether@cpan.org>'
4 build_requires:
5 ExtUtils::MakeMaker: '0'
6 File::Spec: '0'
7 Test::Fatal: '0'
8 Test::More: '0.88'
9 Test::Warnings: '0.009'
10 if: '0'
11 lib: '0'
12 perl: '5.006'
13 configure_requires:
14 ExtUtils::MakeMaker: '0'
15 perl: '5.006'
16 dynamic_config: 0
17 generated_by: 'Dist::Zilla version 6.010, CPAN::Meta::Converter version 2.150010'
18 keywords:
19 - process
20 - thread
21 - fork
22 - multiprocessing
23 - multithreading
24 - clone
25 license: perl
26 meta-spec:
27 url: http://module-build.sourceforge.net/META-spec-v1.4.html
28 version: '1.4'
29 name: Object-ForkAware
30 no_index:
31 directory:
32 - examples
33 - t
34 - xt
35 provides:
36 Object::ForkAware:
37 file: lib/Object/ForkAware.pm
38 version: '0.005'
39 requires:
40 Scalar::Util: '0'
41 perl: '5.006'
42 strict: '0'
43 warnings: '0'
44 resources:
45 bugtracker: https://rt.cpan.org/Public/Dist/Display.html?Name=Object-ForkAware
46 homepage: https://github.com/karenetheridge/Object-ForkAware
47 repository: https://github.com/karenetheridge/Object-ForkAware.git
48 version: '0.005'
49 x_Dist_Zilla:
50 perl:
51 version: '5.027004'
52 plugins:
53 -
54 class: Dist::Zilla::Plugin::PromptIfStale
55 config:
56 Dist::Zilla::Plugin::PromptIfStale:
57 check_all_plugins: 0
58 check_all_prereqs: 0
59 modules:
60 - Dist::Zilla::PluginBundle::Author::ETHER
61 phase: build
62 run_under_travis: 0
63 skip: []
64 name: '@Author::ETHER/stale modules, build'
65 version: '0.054'
66 -
67 class: Dist::Zilla::Plugin::PromptIfStale
68 config:
69 Dist::Zilla::Plugin::PromptIfStale:
70 check_all_plugins: 1
71 check_all_prereqs: 1
72 modules: []
73 phase: release
74 run_under_travis: 0
75 skip: []
76 name: '@Author::ETHER/stale modules, release'
77 version: '0.054'
78 -
79 class: Dist::Zilla::Plugin::FileFinder::ByName
80 name: '@Author::ETHER/Examples'
81 version: '6.010'
82 -
83 class: Dist::Zilla::Plugin::Git::GatherDir
84 config:
85 Dist::Zilla::Plugin::GatherDir:
86 exclude_filename:
87 - CONTRIBUTING
88 - INSTALL
89 - LICENCE
90 - README.pod
91 exclude_match: []
92 follow_symlinks: 0
93 include_dotfiles: 0
94 prefix: ''
95 prune_directory: []
96 root: .
97 Dist::Zilla::Plugin::Git::GatherDir:
98 include_untracked: 0
99 name: '@Author::ETHER/Git::GatherDir'
100 version: '2.042'
101 -
102 class: Dist::Zilla::Plugin::MetaYAML
103 name: '@Author::ETHER/MetaYAML'
104 version: '6.010'
105 -
106 class: Dist::Zilla::Plugin::MetaJSON
107 name: '@Author::ETHER/MetaJSON'
108 version: '6.010'
109 -
110 class: Dist::Zilla::Plugin::Readme
111 name: '@Author::ETHER/Readme'
112 version: '6.010'
113 -
114 class: Dist::Zilla::Plugin::Manifest
115 name: '@Author::ETHER/Manifest'
116 version: '6.010'
117 -
118 class: Dist::Zilla::Plugin::License
119 name: '@Author::ETHER/License'
120 version: '6.010'
121 -
122 class: Dist::Zilla::Plugin::GenerateFile::FromShareDir
123 config:
124 Dist::Zilla::Plugin::GenerateFile::FromShareDir:
125 destination_filename: CONTRIBUTING
126 dist: Dist-Zilla-PluginBundle-Author-ETHER
127 encoding: UTF-8
128 has_xs: 0
129 location: build
130 source_filename: CONTRIBUTING
131 Dist::Zilla::Role::RepoFileInjector:
132 allow_overwrite: 1
133 repo_root: .
134 version: '0.007'
135 name: '@Author::ETHER/generate CONTRIBUTING'
136 version: '0.013'
137 -
138 class: Dist::Zilla::Plugin::InstallGuide
139 name: '@Author::ETHER/InstallGuide'
140 version: '1.200007'
141 -
142 class: Dist::Zilla::Plugin::Test::Compile
143 config:
144 Dist::Zilla::Plugin::Test::Compile:
145 bail_out_on_fail: '1'
146 fail_on_warning: author
147 fake_home: 0
148 filename: xt/author/00-compile.t
149 module_finder:
150 - ':InstallModules'
151 needs_display: 0
152 phase: develop
153 script_finder:
154 - ':PerlExecFiles'
155 - '@Author::ETHER/Examples'
156 skips: []
157 switch: []
158 name: '@Author::ETHER/Test::Compile'
159 version: '2.057'
160 -
161 class: Dist::Zilla::Plugin::Test::NoTabs
162 config:
163 Dist::Zilla::Plugin::Test::NoTabs:
164 filename: xt/author/no-tabs.t
165 finder:
166 - ':InstallModules'
167 - ':ExecFiles'
168 - '@Author::ETHER/Examples'
169 - ':TestFiles'
170 - ':ExtraTestFiles'
171 name: '@Author::ETHER/Test::NoTabs'
172 version: '0.15'
173 -
174 class: Dist::Zilla::Plugin::Test::EOL
175 config:
176 Dist::Zilla::Plugin::Test::EOL:
177 filename: xt/author/eol.t
178 finder:
179 - ':ExecFiles'
180 - ':ExtraTestFiles'
181 - ':InstallModules'
182 - ':TestFiles'
183 - '@Author::ETHER/Examples'
184 trailing_whitespace: 1
185 name: '@Author::ETHER/Test::EOL'
186 version: '0.19'
187 -
188 class: Dist::Zilla::Plugin::MetaTests
189 name: '@Author::ETHER/MetaTests'
190 version: '6.010'
191 -
192 class: Dist::Zilla::Plugin::Test::CPAN::Changes
193 config:
194 Dist::Zilla::Plugin::Test::CPAN::Changes:
195 changelog: Changes
196 name: '@Author::ETHER/Test::CPAN::Changes'
197 version: '0.012'
198 -
199 class: Dist::Zilla::Plugin::Test::ChangesHasContent
200 name: '@Author::ETHER/Test::ChangesHasContent'
201 version: '0.010'
202 -
203 class: Dist::Zilla::Plugin::Test::MinimumVersion
204 name: '@Author::ETHER/Test::MinimumVersion'
205 version: '2.000007'
206 -
207 class: Dist::Zilla::Plugin::PodSyntaxTests
208 name: '@Author::ETHER/PodSyntaxTests'
209 version: '6.010'
210 -
211 class: Dist::Zilla::Plugin::PodCoverageTests
212 name: '@Author::ETHER/PodCoverageTests'
213 version: '6.010'
214 -
215 class: Dist::Zilla::Plugin::Test::PodSpelling
216 config:
217 Dist::Zilla::Plugin::Test::PodSpelling:
218 directories:
219 - examples
220 - lib
221 - script
222 - t
223 - xt
224 spell_cmd: ''
225 stopwords:
226 - irc
227 wordlist: Pod::Wordlist
228 name: '@Author::ETHER/Test::PodSpelling'
229 version: '2.007004'
230 -
231 class: Dist::Zilla::Plugin::Test::Pod::No404s
232 name: '@Author::ETHER/Test::Pod::No404s'
233 version: '1.004'
234 -
235 class: Dist::Zilla::Plugin::Test::Kwalitee
236 config:
237 Dist::Zilla::Plugin::Test::Kwalitee:
238 filename: xt/author/kwalitee.t
239 skiptest: []
240 name: '@Author::ETHER/Test::Kwalitee'
241 version: '2.12'
242 -
243 class: Dist::Zilla::Plugin::MojibakeTests
244 name: '@Author::ETHER/MojibakeTests'
245 version: '0.8'
246 -
247 class: Dist::Zilla::Plugin::Test::ReportPrereqs
248 name: '@Author::ETHER/Test::ReportPrereqs'
249 version: '0.027'
250 -
251 class: Dist::Zilla::Plugin::Test::Portability
252 config:
253 Dist::Zilla::Plugin::Test::Portability:
254 options: ''
255 name: '@Author::ETHER/Test::Portability'
256 version: '2.001000'
257 -
258 class: Dist::Zilla::Plugin::Test::CleanNamespaces
259 config:
260 Dist::Zilla::Plugin::Test::CleanNamespaces:
261 filename: xt/author/clean-namespaces.t
262 skips: []
263 name: '@Author::ETHER/Test::CleanNamespaces'
264 version: '0.006'
265 -
266 class: Dist::Zilla::Plugin::Git::Describe
267 name: '@Author::ETHER/Git::Describe'
268 version: '0.007'
269 -
270 class: Dist::Zilla::Plugin::PodWeaver
271 config:
272 Dist::Zilla::Plugin::PodWeaver:
273 config_plugins:
274 - '@Author::ETHER'
275 finder:
276 - ':InstallModules'
277 - ':ExecFiles'
278 plugins:
279 -
280 class: Pod::Weaver::Plugin::EnsurePod5
281 name: '@Author::ETHER/EnsurePod5'
282 version: '4.015'
283 -
284 class: Pod::Weaver::Plugin::H1Nester
285 name: '@Author::ETHER/H1Nester'
286 version: '4.015'
287 -
288 class: Pod::Weaver::Plugin::SingleEncoding
289 name: '@Author::ETHER/SingleEncoding'
290 version: '4.015'
291 -
292 class: Pod::Weaver::Plugin::Transformer
293 name: '@Author::ETHER/List'
294 version: '4.015'
295 -
296 class: Pod::Weaver::Plugin::Transformer
297 name: '@Author::ETHER/Verbatim'
298 version: '4.015'
299 -
300 class: Pod::Weaver::Section::Region
301 name: '@Author::ETHER/header'
302 version: '4.015'
303 -
304 class: Pod::Weaver::Section::Name
305 name: '@Author::ETHER/Name'
306 version: '4.015'
307 -
308 class: Pod::Weaver::Section::Version
309 name: '@Author::ETHER/Version'
310 version: '4.015'
311 -
312 class: Pod::Weaver::Section::Region
313 name: '@Author::ETHER/prelude'
314 version: '4.015'
315 -
316 class: Pod::Weaver::Section::Generic
317 name: SYNOPSIS
318 version: '4.015'
319 -
320 class: Pod::Weaver::Section::Generic
321 name: DESCRIPTION
322 version: '4.015'
323 -
324 class: Pod::Weaver::Section::Generic
325 name: OVERVIEW
326 version: '4.015'
327 -
328 class: Pod::Weaver::Section::Collect
329 name: ATTRIBUTES
330 version: '4.015'
331 -
332 class: Pod::Weaver::Section::Collect
333 name: METHODS
334 version: '4.015'
335 -
336 class: Pod::Weaver::Section::Collect
337 name: FUNCTIONS
338 version: '4.015'
339 -
340 class: Pod::Weaver::Section::Collect
341 name: TYPES
342 version: '4.015'
343 -
344 class: Pod::Weaver::Section::Leftovers
345 name: '@Author::ETHER/Leftovers'
346 version: '4.015'
347 -
348 class: Pod::Weaver::Section::Region
349 name: '@Author::ETHER/postlude'
350 version: '4.015'
351 -
352 class: Pod::Weaver::Section::GenerateSection
353 name: '@Author::ETHER/generate SUPPORT'
354 version: '1.06'
355 -
356 class: Pod::Weaver::Section::AllowOverride
357 name: '@Author::ETHER/allow override SUPPORT'
358 version: '0.05'
359 -
360 class: Pod::Weaver::Section::Authors
361 name: '@Author::ETHER/Authors'
362 version: '4.015'
363 -
364 class: Pod::Weaver::Section::Contributors
365 name: '@Author::ETHER/Contributors'
366 version: '0.009'
367 -
368 class: Pod::Weaver::Section::Legal
369 name: '@Author::ETHER/Legal'
370 version: '4.015'
371 -
372 class: Pod::Weaver::Section::Region
373 name: '@Author::ETHER/footer'
374 version: '4.015'
375 name: '@Author::ETHER/PodWeaver'
376 version: '4.008'
377 -
378 class: Dist::Zilla::Plugin::GithubMeta
379 name: '@Author::ETHER/GithubMeta'
380 version: '0.54'
381 -
382 class: Dist::Zilla::Plugin::AutoMetaResources
383 name: '@Author::ETHER/AutoMetaResources'
384 version: '1.21'
385 -
386 class: Dist::Zilla::Plugin::Authority
387 name: '@Author::ETHER/Authority'
388 version: '1.009'
389 -
390 class: Dist::Zilla::Plugin::MetaNoIndex
391 name: '@Author::ETHER/MetaNoIndex'
392 version: '6.010'
393 -
394 class: Dist::Zilla::Plugin::MetaProvides::Package
395 config:
396 Dist::Zilla::Plugin::MetaProvides::Package:
397 finder:
398 - ':InstallModules'
399 finder_objects:
400 -
401 class: Dist::Zilla::Plugin::FinderCode
402 name: ':InstallModules'
403 version: '6.010'
404 include_underscores: 0
405 Dist::Zilla::Role::MetaProvider::Provider:
406 $Dist::Zilla::Role::MetaProvider::Provider::VERSION: '2.002004'
407 inherit_missing: '0'
408 inherit_version: '0'
409 meta_noindex: '1'
410 Dist::Zilla::Role::ModuleMetadata:
411 Module::Metadata: '1.000033'
412 version: '0.004'
413 name: '@Author::ETHER/MetaProvides::Package'
414 version: '2.004003'
415 -
416 class: Dist::Zilla::Plugin::MetaConfig
417 name: '@Author::ETHER/MetaConfig'
418 version: '6.010'
419 -
420 class: Dist::Zilla::Plugin::Keywords
421 config:
422 Dist::Zilla::Plugin::Keywords:
423 keywords:
424 - process
425 - thread
426 - fork
427 - multiprocessing
428 - multithreading
429 - clone
430 name: '@Author::ETHER/Keywords'
431 version: '0.007'
432 -
433 class: Dist::Zilla::Plugin::UseUnsafeInc
434 config:
435 Dist::Zilla::Plugin::UseUnsafeInc:
436 dot_in_INC: 0
437 name: '@Author::ETHER/UseUnsafeInc'
438 version: '0.001'
439 -
440 class: Dist::Zilla::Plugin::AutoPrereqs
441 name: '@Author::ETHER/AutoPrereqs'
442 version: '6.010'
443 -
444 class: Dist::Zilla::Plugin::Prereqs::AuthorDeps
445 name: '@Author::ETHER/Prereqs::AuthorDeps'
446 version: '0.006'
447 -
448 class: Dist::Zilla::Plugin::MinimumPerl
449 name: '@Author::ETHER/MinimumPerl'
450 version: '1.006'
451 -
452 class: Dist::Zilla::Plugin::Prereqs
453 config:
454 Dist::Zilla::Plugin::Prereqs:
455 phase: develop
456 type: recommends
457 name: '@Author::ETHER/pluginbundle_version'
458 version: '6.010'
459 -
460 class: Dist::Zilla::Plugin::MakeMaker
461 config:
462 Dist::Zilla::Role::TestRunner:
463 default_jobs: 9
464 name: '@Author::ETHER/MakeMaker'
465 version: '6.010'
466 -
467 class: Dist::Zilla::Plugin::Git::Contributors
468 config:
469 Dist::Zilla::Plugin::Git::Contributors:
470 git_version: 2.14.2
471 include_authors: 0
472 include_releaser: 1
473 order_by: commits
474 paths: []
475 name: '@Author::ETHER/Git::Contributors'
476 version: '0.030'
477 -
478 class: Dist::Zilla::Plugin::StaticInstall
479 config:
480 Dist::Zilla::Plugin::StaticInstall:
481 dry_run: 0
482 mode: auto
483 name: '@Author::ETHER/StaticInstall'
484 version: '0.011'
485 -
486 class: Dist::Zilla::Plugin::RunExtraTests
487 config:
488 Dist::Zilla::Role::TestRunner:
489 default_jobs: 9
490 name: '@Author::ETHER/RunExtraTests'
491 version: '0.029'
492 -
493 class: Dist::Zilla::Plugin::CheckSelfDependency
494 config:
495 Dist::Zilla::Plugin::CheckSelfDependency:
496 finder:
497 - ':InstallModules'
498 Dist::Zilla::Role::ModuleMetadata:
499 Module::Metadata: '1.000033'
500 version: '0.004'
501 name: '@Author::ETHER/CheckSelfDependency'
502 version: '0.011'
503 -
504 class: Dist::Zilla::Plugin::Run::AfterBuild
505 config:
506 Dist::Zilla::Plugin::Run::Role::Runner:
507 fatal_errors: 1
508 quiet: 1
509 run:
510 - "bash -c \"test -e .ackrc && grep -q -- '--ignore-dir=.latest' .ackrc || echo '--ignore-dir=.latest' >> .ackrc; if [[ `dirname '%d'` != .build ]]; then test -e .ackrc && grep -q -- '--ignore-dir=%d' .ackrc || echo '--ignore-dir=%d' >> .ackrc; fi\""
511 version: '0.046'
512 name: '@Author::ETHER/.ackrc'
513 version: '0.046'
514 -
515 class: Dist::Zilla::Plugin::Run::AfterBuild
516 config:
517 Dist::Zilla::Plugin::Run::Role::Runner:
518 eval:
519 - "if ('%d' =~ /^%n-[.[:xdigit:]]+$/) { unlink '.latest'; symlink '%d', '.latest'; }"
520 fatal_errors: 0
521 quiet: 1
522 version: '0.046'
523 name: '@Author::ETHER/.latest'
524 version: '0.046'
525 -
526 class: Dist::Zilla::Plugin::CheckStrictVersion
527 name: '@Author::ETHER/CheckStrictVersion'
528 version: '0.001'
529 -
530 class: Dist::Zilla::Plugin::CheckMetaResources
531 name: '@Author::ETHER/CheckMetaResources'
532 version: '0.001'
533 -
534 class: Dist::Zilla::Plugin::EnsureLatestPerl
535 config:
536 Dist::Zilla::Plugin::EnsureLatestPerl:
537 Module::CoreList: '5.20170923'
538 name: '@Author::ETHER/EnsureLatestPerl'
539 version: '0.006'
540 -
541 class: Dist::Zilla::Plugin::Git::Check
542 config:
543 Dist::Zilla::Plugin::Git::Check:
544 untracked_files: die
545 Dist::Zilla::Role::Git::DirtyFiles:
546 allow_dirty: []
547 allow_dirty_match: []
548 changelog: Changes
549 Dist::Zilla::Role::Git::Repo:
550 git_version: 2.14.2
551 repo_root: .
552 name: '@Author::ETHER/initial check'
553 version: '2.042'
554 -
555 class: Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts
556 config:
557 Dist::Zilla::Role::Git::Repo:
558 git_version: 2.14.2
559 repo_root: .
560 name: '@Author::ETHER/Git::CheckFor::MergeConflicts'
561 version: '0.014'
562 -
563 class: Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch
564 config:
565 Dist::Zilla::Role::Git::Repo:
566 git_version: 2.14.2
567 repo_root: .
568 name: '@Author::ETHER/Git::CheckFor::CorrectBranch'
569 version: '0.014'
570 -
571 class: Dist::Zilla::Plugin::Git::Remote::Check
572 name: '@Author::ETHER/Git::Remote::Check'
573 version: 0.2.0
574 -
575 class: Dist::Zilla::Plugin::CheckPrereqsIndexed
576 name: '@Author::ETHER/CheckPrereqsIndexed'
577 version: '0.020'
578 -
579 class: Dist::Zilla::Plugin::TestRelease
580 name: '@Author::ETHER/TestRelease'
581 version: '6.010'
582 -
583 class: Dist::Zilla::Plugin::Git::Check
584 config:
585 Dist::Zilla::Plugin::Git::Check:
586 untracked_files: die
587 Dist::Zilla::Role::Git::DirtyFiles:
588 allow_dirty: []
589 allow_dirty_match: []
590 changelog: Changes
591 Dist::Zilla::Role::Git::Repo:
592 git_version: 2.14.2
593 repo_root: .
594 name: '@Author::ETHER/after tests'
595 version: '2.042'
596 -
597 class: Dist::Zilla::Plugin::CheckIssues
598 name: '@Author::ETHER/CheckIssues'
599 version: '0.010'
600 -
601 class: Dist::Zilla::Plugin::UploadToCPAN
602 name: '@Author::ETHER/UploadToCPAN'
603 version: '6.010'
604 -
605 class: Dist::Zilla::Plugin::CopyFilesFromRelease
606 config:
607 Dist::Zilla::Plugin::CopyFilesFromRelease:
608 filename:
609 - CONTRIBUTING
610 - INSTALL
611 - LICENCE
612 - LICENSE
613 - ppport.h
614 match: []
615 name: '@Author::ETHER/copy generated files'
616 version: '0.006'
617 -
618 class: Dist::Zilla::Plugin::ReadmeAnyFromPod
619 config:
620 Dist::Zilla::Role::FileWatcher:
621 version: '0.006'
622 name: '@Author::ETHER/ReadmeAnyFromPod'
623 version: '0.163250'
624 -
625 class: Dist::Zilla::Plugin::RewriteVersion::Transitional
626 config:
627 Dist::Zilla::Plugin::RewriteVersion:
628 add_tarball_name: 0
629 finders:
630 - ':ExecFiles'
631 - ':InstallModules'
632 global: 1
633 skip_version_provider: 0
634 Dist::Zilla::Plugin::RewriteVersion::Transitional: {}
635 name: '@Author::ETHER/@Git::VersionManager/RewriteVersion::Transitional'
636 version: '0.008'
637 -
638 class: Dist::Zilla::Plugin::MetaProvides::Update
639 name: '@Author::ETHER/@Git::VersionManager/MetaProvides::Update'
640 version: '0.002'
641 -
642 class: Dist::Zilla::Plugin::CopyFilesFromRelease
643 config:
644 Dist::Zilla::Plugin::CopyFilesFromRelease:
645 filename:
646 - Changes
647 match: []
648 name: '@Author::ETHER/@Git::VersionManager/CopyFilesFromRelease'
649 version: '0.006'
650 -
651 class: Dist::Zilla::Plugin::Git::Commit
652 config:
653 Dist::Zilla::Plugin::Git::Commit:
654 add_files_in:
655 - .
656 commit_msg: '%N-%v%t%n%n%c'
657 Dist::Zilla::Role::Git::DirtyFiles:
658 allow_dirty:
659 - CONTRIBUTING
660 - Changes
661 - INSTALL
662 - LICENCE
663 - README.pod
664 allow_dirty_match: []
665 changelog: Changes
666 Dist::Zilla::Role::Git::Repo:
667 git_version: 2.14.2
668 repo_root: .
669 Dist::Zilla::Role::Git::StringFormatter:
670 time_zone: local
671 name: '@Author::ETHER/@Git::VersionManager/release snapshot'
672 version: '2.042'
673 -
674 class: Dist::Zilla::Plugin::Git::Tag
675 config:
676 Dist::Zilla::Plugin::Git::Tag:
677 branch: ~
678 changelog: Changes
679 signed: 0
680 tag: v0.005
681 tag_format: v%v
682 tag_message: v%v%t
683 Dist::Zilla::Role::Git::Repo:
684 git_version: 2.14.2
685 repo_root: .
686 Dist::Zilla::Role::Git::StringFormatter:
687 time_zone: local
688 name: '@Author::ETHER/@Git::VersionManager/Git::Tag'
689 version: '2.042'
690 -
691 class: Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional
692 config:
693 Dist::Zilla::Plugin::BumpVersionAfterRelease:
694 finders:
695 - ':ExecFiles'
696 - ':InstallModules'
697 global: 1
698 munge_makefile_pl: 1
699 Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional: {}
700 name: '@Author::ETHER/@Git::VersionManager/BumpVersionAfterRelease::Transitional'
701 version: '0.008'
702 -
703 class: Dist::Zilla::Plugin::NextRelease
704 name: '@Author::ETHER/@Git::VersionManager/NextRelease'
705 version: '6.010'
706 -
707 class: Dist::Zilla::Plugin::Git::Commit
708 config:
709 Dist::Zilla::Plugin::Git::Commit:
710 add_files_in: []
711 commit_msg: 'increment $VERSION after %v release'
712 Dist::Zilla::Role::Git::DirtyFiles:
713 allow_dirty:
714 - Changes
715 allow_dirty_match:
716 - (?^:^lib/.*\.pm$)
717 changelog: Changes
718 Dist::Zilla::Role::Git::Repo:
719 git_version: 2.14.2
720 repo_root: .
721 Dist::Zilla::Role::Git::StringFormatter:
722 time_zone: local
723 name: '@Author::ETHER/@Git::VersionManager/post-release commit'
724 version: '2.042'
725 -
726 class: Dist::Zilla::Plugin::Prereqs
727 config:
728 Dist::Zilla::Plugin::Prereqs:
729 phase: develop
730 type: suggests
731 name: '@Author::ETHER/@Git::VersionManager/prereqs for @Git::VersionManager'
732 version: '6.010'
733 -
734 class: Dist::Zilla::Plugin::Git::Push
735 config:
736 Dist::Zilla::Plugin::Git::Push:
737 push_to:
738 - origin
739 remotes_must_exist: 1
740 Dist::Zilla::Role::Git::Repo:
741 git_version: 2.14.2
742 repo_root: .
743 name: '@Author::ETHER/Git::Push'
744 version: '2.042'
745 -
746 class: Dist::Zilla::Plugin::GitHub::Update
747 config:
748 Dist::Zilla::Plugin::GitHub::Update:
749 metacpan: 1
750 name: '@Author::ETHER/GitHub::Update'
751 version: '0.44'
752 -
753 class: Dist::Zilla::Plugin::Run::AfterRelease
754 config:
755 Dist::Zilla::Plugin::Run::Role::Runner:
756 fatal_errors: 0
757 quiet: 0
758 run:
759 - REDACTED
760 version: '0.046'
761 name: '@Author::ETHER/install release'
762 version: '0.046'
763 -
764 class: Dist::Zilla::Plugin::Run::AfterRelease
765 config:
766 Dist::Zilla::Plugin::Run::Role::Runner:
767 eval:
768 - 'print "release complete!\xa"'
769 fatal_errors: 1
770 quiet: 1
771 version: '0.046'
772 name: '@Author::ETHER/release complete'
773 version: '0.046'
774 -
775 class: Dist::Zilla::Plugin::ConfirmRelease
776 name: '@Author::ETHER/ConfirmRelease'
777 version: '6.010'
778 -
779 class: Dist::Zilla::Plugin::Prereqs
780 config:
781 Dist::Zilla::Plugin::Prereqs:
782 phase: develop
783 type: suggests
784 name: '@Author::ETHER/prereqs for @Author::ETHER'
785 version: '6.010'
786 -
787 class: Dist::Zilla::Plugin::OnlyCorePrereqs
788 config:
789 Dist::Zilla::Plugin::OnlyCorePrereqs:
790 also_disallow: []
791 check_dual_life_versions: '1'
792 deprecated_ok: '0'
793 phases:
794 - runtime
795 skips: []
796 starting_version: '5.007003'
797 name: OnlyCorePrereqs
798 version: '0.024'
799 -
800 class: Dist::Zilla::Plugin::FinderCode
801 name: ':InstallModules'
802 version: '6.010'
803 -
804 class: Dist::Zilla::Plugin::FinderCode
805 name: ':IncModules'
806 version: '6.010'
807 -
808 class: Dist::Zilla::Plugin::FinderCode
809 name: ':TestFiles'
810 version: '6.010'
811 -
812 class: Dist::Zilla::Plugin::FinderCode
813 name: ':ExtraTestFiles'
814 version: '6.010'
815 -
816 class: Dist::Zilla::Plugin::FinderCode
817 name: ':ExecFiles'
818 version: '6.010'
819 -
820 class: Dist::Zilla::Plugin::FinderCode
821 name: ':PerlExecFiles'
822 version: '6.010'
823 -
824 class: Dist::Zilla::Plugin::FinderCode
825 name: ':ShareFiles'
826 version: '6.010'
827 -
828 class: Dist::Zilla::Plugin::FinderCode
829 name: ':MainModule'
830 version: '6.010'
831 -
832 class: Dist::Zilla::Plugin::FinderCode
833 name: ':AllFiles'
834 version: '6.010'
835 -
836 class: Dist::Zilla::Plugin::FinderCode
837 name: ':NoFiles'
838 version: '6.010'
839 -
840 class: Dist::Zilla::Plugin::VerifyPhases
841 name: '@Author::ETHER/PHASE VERIFICATION'
842 version: '0.016'
843 zilla:
844 class: Dist::Zilla::Dist::Builder
845 config:
846 is_trial: '0'
847 version: '6.010'
848 x_authority: cpan:ETHER
849 x_contributors:
850 - 'Graham Knop <haarg@haarg.org>'
851 x_serialization_backend: 'YAML::Tiny version 1.72'
852 x_static_install: 1
853 x_use_unsafe_inc: 0
0 # This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.010.
1 use strict;
2 use warnings;
3
4 use 5.006;
5
6 use ExtUtils::MakeMaker;
7
8 my %WriteMakefileArgs = (
9 "ABSTRACT" => "Make an object aware of process forks and threads, recreating itself as needed",
10 "AUTHOR" => "Karen Etheridge <ether\@cpan.org>",
11 "CONFIGURE_REQUIRES" => {
12 "ExtUtils::MakeMaker" => 0
13 },
14 "DISTNAME" => "Object-ForkAware",
15 "LICENSE" => "perl",
16 "MIN_PERL_VERSION" => "5.006",
17 "NAME" => "Object::ForkAware",
18 "PREREQ_PM" => {
19 "Scalar::Util" => 0,
20 "strict" => 0,
21 "warnings" => 0
22 },
23 "TEST_REQUIRES" => {
24 "ExtUtils::MakeMaker" => 0,
25 "File::Spec" => 0,
26 "Test::Fatal" => 0,
27 "Test::More" => "0.88",
28 "Test::Warnings" => "0.009",
29 "if" => 0,
30 "lib" => 0
31 },
32 "VERSION" => "0.005",
33 "test" => {
34 "TESTS" => "t/*.t"
35 }
36 );
37
38
39 my %FallbackPrereqs = (
40 "ExtUtils::MakeMaker" => 0,
41 "File::Spec" => 0,
42 "Scalar::Util" => 0,
43 "Test::Fatal" => 0,
44 "Test::More" => "0.88",
45 "Test::Warnings" => "0.009",
46 "if" => 0,
47 "lib" => 0,
48 "strict" => 0,
49 "warnings" => 0
50 );
51
52
53 unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
54 delete $WriteMakefileArgs{TEST_REQUIRES};
55 delete $WriteMakefileArgs{BUILD_REQUIRES};
56 $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
57 }
58
59 delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
60 unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
61
62 WriteMakefile(%WriteMakefileArgs);
0
1
2 This archive contains the distribution Object-ForkAware,
3 version 0.005:
4
5 Make an object aware of process forks and threads, recreating itself as needed
6
7 This software is copyright (c) 2013 by Karen Etheridge.
8
9 This is free software; you can redistribute it and/or modify it under
10 the same terms as the Perl 5 programming language system itself.
11
12
13 This README file was generated by Dist::Zilla::Plugin::Readme v6.010.
14
0 name = Object-ForkAware
1 author = Karen Etheridge <ether@cpan.org>
2 copyright_holder = Karen Etheridge
3 copyright_year = 2013
4 license = Perl_5
5
6 [@Author::ETHER]
7 :version = 0.119
8 installer = MakeMaker
9
10 [OnlyCorePrereqs]
11 :version = 0.007
12 phase = runtime
13 check_dual_life_versions = 1
14 starting_version = 5.007003 ; Scalar::Util
0 use strict;
1 use warnings;
2 use 5.014;
3
4 package MyClient {
5 sub new {
6 say "MyClient created using pid $$";
7 return bless { pid => $$ }, shift;
8 }
9 sub send {
10 say 'sending message with object created under pid ', shift->{pid};
11 }
12 }
13
14 use Object::ForkAware;
15 my $client = Object::ForkAware->new(
16 create => sub { MyClient->new(server => 'foo.com', port => '1234') },
17 );
18
19 # do things with object as normal...
20 $client->send('stuff');
21
22 # later, we fork for some reason
23 if (!fork) {
24 # child process
25
26 # look, client was recreated!
27 $client->send('stuff');
28 }
29
0 use strict;
1 use warnings;
2 package Object::ForkAware; # git description: v0.004-4-g2bf9955
3 # vim: set ts=8 sts=4 sw=4 tw=115 et :
4 # ABSTRACT: Make an object aware of process forks and threads, recreating itself as needed
5 # KEYWORDS: process thread fork multiprocessing multithreading clone
6
7 our $VERSION = '0.005';
8
9 use Scalar::Util ();
10
11 sub new
12 {
13 my ($class, %opts) = @_;
14
15 my $self = {};
16 $self->{_create} = $opts{create} or die 'missing required option: create';
17 $self->{_on_fork} = $opts{on_fork} if exists $opts{on_fork};
18
19 $self = bless($self, $class);
20
21 $self->_create_obj($self->{_create}) if not $opts{lazy};
22
23 return $self;
24 }
25
26 sub _create_obj
27 {
28 my ($self, $sub) = @_;
29
30 my $obj = $sub->( defined $self->{_obj} ? $self->{_obj} : () );
31 $self->{_pid} = $$;
32 $self->{_tid} = threads->tid if $INC{'threads.pm'};
33 $self->{_obj} = $obj;
34 }
35
36 sub _get_obj
37 {
38 my $self = shift;
39
40 return if not Scalar::Util::blessed($self);
41 if (not defined $self->{_pid}
42 or $$ != $self->{_pid}
43 or $INC{'threads.pm'} and ($self->{_tid} || 0) != threads->tid)
44 {
45 $self->_create_obj($self->{_on_fork} || $self->{_create});
46 }
47
48 return $self->{_obj};
49 }
50
51 sub isa
52 {
53 my ($self, $class) = @_;
54 $self->SUPER::isa($class) || do {
55 my $obj = $self->_get_obj;
56 $obj && $obj->isa($class);
57 };
58 }
59
60 sub can
61 {
62 my ($self, $method) = @_;
63 $self->SUPER::can($method) || do {
64 my $obj = $self->_get_obj;
65 $obj && $obj->can($method);
66 };
67 }
68
69 sub VERSION
70 {
71 my ($self, @args) = @_;
72
73 my $obj = $self->_get_obj;
74 return $obj
75 ? $obj->VERSION(@args)
76 : $self->SUPER::VERSION(@args);
77 }
78
79 our $AUTOLOAD;
80 sub AUTOLOAD
81 {
82 my $self = shift;
83
84 # Remove qualifier from original method name...
85 (my $called = $AUTOLOAD) =~ s/.*:://;
86 return $self->_get_obj->$called(@_);
87 }
88
89 sub DESTROY {} # avoid calling AUTOLOAD at destruction time
90
91 1;
92
93 __END__
94
95 =pod
96
97 =encoding UTF-8
98
99 =head1 NAME
100
101 Object::ForkAware - Make an object aware of process forks and threads, recreating itself as needed
102
103 =head1 VERSION
104
105 version 0.005
106
107 =head1 SYNOPSIS
108
109 use Object::ForkAware;
110 my $client = Object::ForkAware->new(
111 create => sub { MyClient->new(server => 'foo.com', port => '1234') },
112 );
113
114 # do things with object as normal...
115 $client->send(...);
116
117 # later, we fork for some reason
118 if (fork == 0) {
119 # child process
120 $client->send(...);
121 }
122
123 # no boom happens! fork is detected and client object is regenerated
124
125 =head1 DESCRIPTION
126
127 If you've ever had an object representing a network connection to some server,
128 or something else containing a socket, a filehandle, etc, and used it in a
129 program that forks, and then forgot to close and reopen your socket/handle
130 etc in the new process, you'll know what chaos can ensue. Depending on the type of connection,
131 you can have multiple processes trying to write to the same resource at once,
132 or simultaneous reads getting each other's data, dogs and cats living together... It's horrible, and
133 it's an easy problem to run into.
134
135 This module invisibly wraps your object and makes it fork-aware, automatically
136 checking C<$$> on every access and recreating the object if the process id
137 changes. (The object is also thread-aware; if the thread id changes, the
138 object is recreated in the same manner.)
139
140 The object can be safely used with type checks and various type constraint
141 mechanisms, as C<isa> and C<can> respond as if they were being called against
142 the contained object itself.
143
144 You can also ensure that a fork never happens, by making use of the optional
145 C<on_fork> handler:
146
147 my $client = Object::ForkAware->new(
148 create => sub { MyClient->new(server => 'foo.com', port => '1234') },
149 on_fork => sub { die 'fork detected!' },
150 );
151
152 Or, if regenerating the object needs to be done differently than the initial
153 creation:
154
155 my $client = Object::ForkAware->new(
156 create => sub { MyClient->new(server => 'foo.com', port => '1234') },
157 on_fork => sub { MyClient->new(server => 'other.foo.com' },
158 );
159
160 =for stopwords other's prefork
161
162 =head1 METHODS
163
164 =head2 C<< new(option => val, option => val...) >>
165
166 Provides an instance of this class. Available options are:
167
168 =over 4
169
170 =item * C<create> (mandatory) - a sub reference containing the code to be run
171 when the object is initially created (as well as recreated, if there is no
172 C<on_fork> sub provided), returning the
173 object instance.
174 If the object previously existed, it is passed as an argument to this method,
175 allowing you to copy any state from the old object to the new one.
176
177 =item * C<on_fork> - a sub reference containing the code to be run when a fork
178 is detected. It should either generate an exception or return the new object
179 instance.
180 If the object previously existed, it is passed as an argument to this method,
181 allowing you to copy any state from the old object to the new one.
182
183 =item * C<lazy> - a boolean (defaults to false) - when true, the C<create> sub
184 is not called immediately, but instead deferred until the first time the
185 object is used. This prevents useless object creation if it is not likely to be used
186 until after the first fork.
187
188 =back
189
190 There are no other public methods. All method calls on the object will be
191 passed through to the containing object, after checking C<$$> (or C<< threads->tid >>) and possibly
192 recreating the object via the provided C<create> (or C<on_fork>) sub.
193
194 =for Pod::Coverage::TrustPod isa can VERSION
195
196 =head1 LIMITATIONS
197
198 Using the L<Object::ForkAware> object with an operator that the containing
199 object has overloaded will not work; behaviour is as if there was no operator
200 overloading. Partial support is possible, but is not yet implemented.
201
202 =head1 ACKNOWLEDGEMENTS
203
204 The concept for this module came about through a conversation with Matt S.
205 Trout (C<mst@shadowcat.co.uk>) after experiencing the issue described in the
206 synopsis on a prefork job-processing daemon.
207
208 Some of the pid detection logic was inspired by the wonderful L<DBIx::Connector>.
209
210 =head1 SEE ALSO
211
212 =over 4
213
214 =item *
215
216 L<Object::Wrapper>
217
218 =item *
219
220 L<Object::Wrapper::Fork>
221
222 =item *
223
224 L<POSIX::AtFork>
225
226 =back
227
228 =head1 SUPPORT
229
230 Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=Object-ForkAware>
231 (or L<bug-Object-ForkAware@rt.cpan.org|mailto:bug-Object-ForkAware@rt.cpan.org>).
232
233 I am also usually active on irc, as 'ether' at C<irc.perl.org>.
234
235 =head1 AUTHOR
236
237 Karen Etheridge <ether@cpan.org>
238
239 =head1 CONTRIBUTOR
240
241 =for stopwords Graham Knop
242
243 Graham Knop <haarg@haarg.org>
244
245 =head1 COPYRIGHT AND LICENCE
246
247 This software is copyright (c) 2013 by Karen Etheridge.
248
249 This is free software; you can redistribute it and/or modify it under
250 the same terms as the Perl 5 programming language system itself.
251
252 =cut
0 do { my $x = {
1 'configure' => {
2 'requires' => {
3 'ExtUtils::MakeMaker' => '0',
4 'perl' => '5.006'
5 }
6 },
7 'develop' => {
8 'recommends' => {
9 'Dist::Zilla::PluginBundle::Author::ETHER' => '0.131'
10 },
11 'requires' => {
12 'File::Spec' => '0',
13 'IO::Handle' => '0',
14 'IPC::Open3' => '0',
15 'Pod::Coverage::TrustPod' => '0',
16 'Pod::Wordlist' => '0',
17 'Test::CPAN::Changes' => '0.19',
18 'Test::CPAN::Meta' => '0',
19 'Test::CleanNamespaces' => '0.15',
20 'Test::EOL' => '0',
21 'Test::Kwalitee' => '1.21',
22 'Test::MinimumVersion' => '0',
23 'Test::Mojibake' => '0',
24 'Test::More' => '0.96',
25 'Test::NoTabs' => '0',
26 'Test::Pod' => '1.41',
27 'Test::Pod::Coverage' => '1.08',
28 'Test::Pod::No404s' => '0',
29 'Test::Portability::Files' => '0',
30 'Test::Spelling' => '0.12',
31 'perl' => '5.006'
32 },
33 'suggests' => {
34 'Dist::Zilla' => '5',
35 'Dist::Zilla::Plugin::Authority' => '1.009',
36 'Dist::Zilla::Plugin::AutoMetaResources' => '0',
37 'Dist::Zilla::Plugin::AutoPrereqs' => '5.038',
38 'Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional' => '0.004',
39 'Dist::Zilla::Plugin::CheckIssues' => '0',
40 'Dist::Zilla::Plugin::CheckMetaResources' => '0',
41 'Dist::Zilla::Plugin::CheckPrereqsIndexed' => '0.019',
42 'Dist::Zilla::Plugin::CheckSelfDependency' => '0',
43 'Dist::Zilla::Plugin::CheckStrictVersion' => '0',
44 'Dist::Zilla::Plugin::ConfirmRelease' => '0',
45 'Dist::Zilla::Plugin::CopyFilesFromRelease' => '0',
46 'Dist::Zilla::Plugin::EnsureLatestPerl' => '0',
47 'Dist::Zilla::Plugin::FileFinder::ByName' => '0',
48 'Dist::Zilla::Plugin::GenerateFile::FromShareDir' => '0',
49 'Dist::Zilla::Plugin::Git::Check' => '0',
50 'Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch' => '0.004',
51 'Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts' => '0',
52 'Dist::Zilla::Plugin::Git::Commit' => '2.020',
53 'Dist::Zilla::Plugin::Git::Contributors' => '0.029',
54 'Dist::Zilla::Plugin::Git::Describe' => '0.004',
55 'Dist::Zilla::Plugin::Git::GatherDir' => '2.016',
56 'Dist::Zilla::Plugin::Git::Push' => '0',
57 'Dist::Zilla::Plugin::Git::Remote::Check' => '0',
58 'Dist::Zilla::Plugin::Git::Tag' => '0',
59 'Dist::Zilla::Plugin::GitHub::Update' => '0.40',
60 'Dist::Zilla::Plugin::GithubMeta' => '0.54',
61 'Dist::Zilla::Plugin::InstallGuide' => '1.200005',
62 'Dist::Zilla::Plugin::Keywords' => '0.004',
63 'Dist::Zilla::Plugin::License' => '5.038',
64 'Dist::Zilla::Plugin::MakeMaker' => '0',
65 'Dist::Zilla::Plugin::Manifest' => '0',
66 'Dist::Zilla::Plugin::MetaConfig' => '0',
67 'Dist::Zilla::Plugin::MetaJSON' => '0',
68 'Dist::Zilla::Plugin::MetaNoIndex' => '0',
69 'Dist::Zilla::Plugin::MetaProvides::Package' => '1.15000002',
70 'Dist::Zilla::Plugin::MetaTests' => '0',
71 'Dist::Zilla::Plugin::MetaYAML' => '0',
72 'Dist::Zilla::Plugin::MinimumPerl' => '1.006',
73 'Dist::Zilla::Plugin::MojibakeTests' => '0.8',
74 'Dist::Zilla::Plugin::NextRelease' => '5.033',
75 'Dist::Zilla::Plugin::OnlyCorePrereqs' => '0.007',
76 'Dist::Zilla::Plugin::PodCoverageTests' => '5.040',
77 'Dist::Zilla::Plugin::PodSyntaxTests' => '5.040',
78 'Dist::Zilla::Plugin::PodWeaver' => '4.005',
79 'Dist::Zilla::Plugin::Prereqs' => '0',
80 'Dist::Zilla::Plugin::Prereqs::AuthorDeps' => '0.006',
81 'Dist::Zilla::Plugin::PromptIfStale' => '0',
82 'Dist::Zilla::Plugin::Readme' => '0',
83 'Dist::Zilla::Plugin::ReadmeAnyFromPod' => '0.142180',
84 'Dist::Zilla::Plugin::RewriteVersion::Transitional' => '0.004',
85 'Dist::Zilla::Plugin::Run::AfterBuild' => '0.041',
86 'Dist::Zilla::Plugin::Run::AfterRelease' => '0.038',
87 'Dist::Zilla::Plugin::RunExtraTests' => '0.024',
88 'Dist::Zilla::Plugin::StaticInstall' => '0.005',
89 'Dist::Zilla::Plugin::Test::CPAN::Changes' => '0.012',
90 'Dist::Zilla::Plugin::Test::ChangesHasContent' => '0',
91 'Dist::Zilla::Plugin::Test::CleanNamespaces' => '0.006',
92 'Dist::Zilla::Plugin::Test::Compile' => '2.039',
93 'Dist::Zilla::Plugin::Test::EOL' => '0.17',
94 'Dist::Zilla::Plugin::Test::Kwalitee' => '2.10',
95 'Dist::Zilla::Plugin::Test::MinimumVersion' => '2.000003',
96 'Dist::Zilla::Plugin::Test::NoTabs' => '0.08',
97 'Dist::Zilla::Plugin::Test::Pod::No404s' => '1.003',
98 'Dist::Zilla::Plugin::Test::PodSpelling' => '2.006003',
99 'Dist::Zilla::Plugin::Test::Portability' => '2.000007',
100 'Dist::Zilla::Plugin::Test::ReportPrereqs' => '0.022',
101 'Dist::Zilla::Plugin::TestRelease' => '0',
102 'Dist::Zilla::Plugin::UploadToCPAN' => '0',
103 'Dist::Zilla::Plugin::UseUnsafeInc' => '0',
104 'Dist::Zilla::PluginBundle::Author::ETHER' => '0.119',
105 'Dist::Zilla::PluginBundle::Git::VersionManager' => '0',
106 'Software::License::Perl_5' => '0'
107 }
108 },
109 'runtime' => {
110 'requires' => {
111 'Scalar::Util' => '0',
112 'perl' => '5.006',
113 'strict' => '0',
114 'warnings' => '0'
115 }
116 },
117 'test' => {
118 'recommends' => {
119 'CPAN::Meta' => '2.120900'
120 },
121 'requires' => {
122 'ExtUtils::MakeMaker' => '0',
123 'File::Spec' => '0',
124 'Test::Fatal' => '0',
125 'Test::More' => '0.88',
126 'Test::Warnings' => '0.009',
127 'if' => '0',
128 'lib' => '0',
129 'perl' => '5.006'
130 }
131 }
132 };
133 $x;
134 }
0 #!perl
1
2 use strict;
3 use warnings;
4
5 # This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.027
6
7 use Test::More tests => 1;
8
9 use ExtUtils::MakeMaker;
10 use File::Spec;
11
12 # from $version::LAX
13 my $lax_version_re =
14 qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
15 |
16 (?:\.[0-9]+) (?:_[0-9]+)?
17 ) | (?:
18 v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
19 |
20 (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
21 )
22 )/x;
23
24 # hide optional CPAN::Meta modules from prereq scanner
25 # and check if they are available
26 my $cpan_meta = "CPAN::Meta";
27 my $cpan_meta_pre = "CPAN::Meta::Prereqs";
28 my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic
29
30 # Verify requirements?
31 my $DO_VERIFY_PREREQS = 1;
32
33 sub _max {
34 my $max = shift;
35 $max = ( $_ > $max ) ? $_ : $max for @_;
36 return $max;
37 }
38
39 sub _merge_prereqs {
40 my ($collector, $prereqs) = @_;
41
42 # CPAN::Meta::Prereqs object
43 if (ref $collector eq $cpan_meta_pre) {
44 return $collector->with_merged_prereqs(
45 CPAN::Meta::Prereqs->new( $prereqs )
46 );
47 }
48
49 # Raw hashrefs
50 for my $phase ( keys %$prereqs ) {
51 for my $type ( keys %{ $prereqs->{$phase} } ) {
52 for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
53 $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module};
54 }
55 }
56 }
57
58 return $collector;
59 }
60
61 my @include = qw(
62 JSON::PP
63 Pod::Coverage
64 Sub::Name
65 YAML
66 autodie
67 );
68
69 my @exclude = qw(
70
71 );
72
73 # Add static prereqs to the included modules list
74 my $static_prereqs = do './t/00-report-prereqs.dd';
75
76 # Merge all prereqs (either with ::Prereqs or a hashref)
77 my $full_prereqs = _merge_prereqs(
78 ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
79 $static_prereqs
80 );
81
82 # Add dynamic prereqs to the included modules list (if we can)
83 my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
84 my $cpan_meta_error;
85 if ( $source && $HAS_CPAN_META
86 && (my $meta = eval { CPAN::Meta->load_file($source) } )
87 ) {
88 $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
89 }
90 else {
91 $cpan_meta_error = $@; # capture error from CPAN::Meta->load_file($source)
92 $source = 'static metadata';
93 }
94
95 my @full_reports;
96 my @dep_errors;
97 my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
98
99 # Add static includes into a fake section
100 for my $mod (@include) {
101 $req_hash->{other}{modules}{$mod} = 0;
102 }
103
104 for my $phase ( qw(configure build test runtime develop other) ) {
105 next unless $req_hash->{$phase};
106 next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
107
108 for my $type ( qw(requires recommends suggests conflicts modules) ) {
109 next unless $req_hash->{$phase}{$type};
110
111 my $title = ucfirst($phase).' '.ucfirst($type);
112 my @reports = [qw/Module Want Have/];
113
114 for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
115 next if $mod eq 'perl';
116 next if grep { $_ eq $mod } @exclude;
117
118 my $file = $mod;
119 $file =~ s{::}{/}g;
120 $file .= ".pm";
121 my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
122
123 my $want = $req_hash->{$phase}{$type}{$mod};
124 $want = "undef" unless defined $want;
125 $want = "any" if !$want && $want == 0;
126
127 my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required";
128
129 if ($prefix) {
130 my $have = MM->parse_version( File::Spec->catfile($prefix, $file) );
131 $have = "undef" unless defined $have;
132 push @reports, [$mod, $want, $have];
133
134 if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) {
135 if ( $have !~ /\A$lax_version_re\z/ ) {
136 push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)";
137 }
138 elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) {
139 push @dep_errors, "$mod version '$have' is not in required range '$want'";
140 }
141 }
142 }
143 else {
144 push @reports, [$mod, $want, "missing"];
145
146 if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
147 push @dep_errors, "$mod is not installed ($req_string)";
148 }
149 }
150 }
151
152 if ( @reports ) {
153 push @full_reports, "=== $title ===\n\n";
154
155 my $ml = _max( map { length $_->[0] } @reports );
156 my $wl = _max( map { length $_->[1] } @reports );
157 my $hl = _max( map { length $_->[2] } @reports );
158
159 if ($type eq 'modules') {
160 splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl];
161 push @full_reports, map { sprintf(" %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports;
162 }
163 else {
164 splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
165 push @full_reports, map { sprintf(" %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
166 }
167
168 push @full_reports, "\n";
169 }
170 }
171 }
172
173 if ( @full_reports ) {
174 diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports;
175 }
176
177 if ( $cpan_meta_error || @dep_errors ) {
178 diag "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n";
179 }
180
181 if ( $cpan_meta_error ) {
182 my ($orig_source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
183 diag "\nCPAN::Meta->load_file('$orig_source') failed with: $cpan_meta_error\n";
184 }
185
186 if ( @dep_errors ) {
187 diag join("\n",
188 "\nThe following REQUIRED prerequisites were not satisfied:\n",
189 @dep_errors,
190 "\n"
191 );
192 }
193
194 pass;
195
196 # vim: ts=4 sts=4 sw=4 et:
0 use strict;
1 use warnings;
2
3 use Test::More 'no_plan'; # the test count is different in each process
4 use Test::Warnings 0.009 qw(:all :no_end_test);
5 use Test::Fatal;
6
7 use Object::ForkAware;
8
9 use lib 't/lib';
10 use PidTracker;
11
12 my $Test = Test::Builder->new;
13
14 # give ourselves a predictable version
15 $Object::ForkAware::VERSION = '999';
16
17 {
18 # the failure case...
19
20 my $obj = PidTracker->new;
21 is($obj->pid, $$, 'object was created in the current process');
22 is($obj->instance, 0, 'this is instance #0');
23
24 looks_like_a_pidtracker($obj);
25
26 my $parent_pid = $$;
27 my $child_pid = fork;
28
29 if (not defined $child_pid)
30 {
31 die 'cannot fork: ', $!;
32 }
33 elsif ($child_pid == 0)
34 {
35 # child
36
37 isnt($obj->pid, $$, 'object no longer has the right pid');
38 is($obj->instance, 0, 'object is still instance #0');
39 had_no_warnings;
40 exit;
41 }
42
43 $Test->current_test($Test->current_test + 3);
44
45 # make sure we do not continue until after the child process exits
46 isnt(waitpid($child_pid, 0), '-1', 'waited for child to exit');
47 }
48
49 $PidTracker::instance = -1;
50 {
51 # now wrap in a ForkAware object and watch the magic!
52
53 my $obj = Object::ForkAware->new(create => sub { PidTracker->new });
54
55 is($PidTracker::instance, 0, 'an object has been instantiated already');
56
57 looks_like_a_pidtracker($obj);
58
59 is($obj->pid, $$, 'object was created in the current process');
60 is($obj->instance, 0, 'this is instance #0');
61
62 # now fork and see what happens
63
64 my $parent_pid = $$;
65 my $child_pid = fork;
66
67 if (not defined $child_pid)
68 {
69 die 'cannot fork: ', $!;
70 }
71 elsif ($child_pid == 0)
72 {
73 # child
74
75 isnt($$, $parent_pid, 'we are no longer the same process');
76
77 ok($obj->isa('Object::ForkAware'), 'object is ForkAware');
78 SKIP: {
79 skip 'perl 5.9.4 required for ->DOES', 1 if "$]" < '5.009004';
80 ok($obj->DOES('Object::ForkAware'), 'object does the ForkAware role')
81 }
82
83 looks_like_a_pidtracker($obj);
84 is($obj->pid, $$, 'object was created in the current process');
85 is($obj->instance, 1, 'this is now instance #1');
86
87 had_no_warnings;
88 exit;
89 }
90
91 $Test->current_test($Test->current_test + 13);
92
93 # make sure we do not continue until after the child process exits
94 isnt(waitpid($child_pid, 0), '-1', 'waited for child to exit');
95 }
96
97 {
98 like(
99 exception { Object::ForkAware->new },
100 qr/missing required option: create/,
101 'create is required',
102 );
103
104 is(Object::ForkAware->VERSION, '999', 'got the right version');
105 ok(eval { Object::ForkAware->VERSION('998'); 1 }, 'VERSION with args also works');
106 }
107
108 sub looks_like_a_pidtracker
109 {
110 my $obj = shift;
111 local $Test::Builder::Level = $Test::Builder::Level + 1;
112 # somehow, Test::More loses its marbles here during subtests and emits an
113 # extra plan in the middle!
114 #subtest 'object quacks like a PidTracker' => sub {
115 ok($obj->isa('PidTracker'), '->isa works as if we called it on the target object');
116 SKIP: {
117 skip 'perl 5.9.4 required for UNIVERSAL::DOES', 1 if "$]" < '5.009004';
118 ok($obj->DOES('PidTracker'), '->DOES works as if we called it on the target object')
119 }
120 ok($obj->can('foo'), '->can works as if we called it on the target object');
121 is($obj->can('foo'), \&PidTracker::foo, '...and returns the correct reference');
122 is($obj->foo, 'a sub that returns foo', 'method responds properly');
123 is($obj->VERSION, '1.234', "got the object's version, not Object::ForkAware's");
124 ok(!eval { $obj->VERSION('10'); 1 }, 'VERSION with args also propagates');
125 #};
126 }
127
128 had_no_warnings;
0 use strict;
1 use warnings;
2
3 use Test::More tests => 16;
4 use Test::Warnings;
5 use Test::Fatal;
6
7 use Object::ForkAware;
8
9 use lib 't/lib';
10 use PidTracker;
11
12 my $Test = Test::Builder->new;
13
14 {
15 # on_fork handler that dies
16
17 my $obj = Object::ForkAware->new(
18 create => sub { PidTracker->new },
19 on_fork => sub { die 'we forked with instance #' . shift->instance },
20 );
21
22 is($obj->pid, $$, 'object was created in the current process');
23 is($obj->instance, 0, 'this is instance #0');
24
25 my $parent_pid = $$;
26 my $child_pid = fork;
27
28 if (not defined $child_pid)
29 {
30 die 'cannot fork: ', $!;
31 }
32 elsif ($child_pid == 0)
33 {
34 # child
35
36 isnt($$, $parent_pid, 'we are no longer the same process');
37
38 like(
39 exception { $obj->foo },
40 qr/we forked with instance #0/,
41 'on_fork sub called when used after a fork',
42 );
43
44 is($obj->{_obj}->instance, 0, 'on_fork sub died, so we did not regenerate object');
45 isnt($obj->{_pid}, $$, 'on_fork sub died, so we did not update pid');
46 exit;
47 }
48
49 # make sure we do not continue until after the child process exits
50 waitpid($child_pid, 0);
51 $Test->current_test($Test->current_test + 5);
52 }
53
54 $PidTracker::instance = -1;
55 {
56 # on_fork handler that returns a new object
57
58 my $obj = Object::ForkAware->new(
59 create => sub { PidTracker->new },
60 on_fork => sub { PidTracker->new(recreated_from => shift) },
61 );
62
63 is($obj->pid, $$, 'object was created in the current process');
64 is($obj->instance, 0, 'this is instance #0');
65
66 my $parent_pid = $$;
67 my $child_pid = fork;
68
69 if (not defined $child_pid)
70 {
71 die 'cannot fork: ', $!;
72 }
73 elsif ($child_pid == 0)
74 {
75 # child
76
77 isnt($$, $parent_pid, 'we are no longer the same process');
78
79 ok($obj->isa('PidTracker'), 'object type is still correct');
80
81 is($obj->pid, $$, 'object was created in the current process');
82 is($obj->instance, 1, 'this is now instance #1');
83 is($obj->recreated_from->instance, 0, 'on_fork handler was passed the old object');
84 exit;
85 }
86
87 # make sure we do not continue until after the child process exits
88 waitpid($child_pid, 0);
89 $Test->current_test($Test->current_test + 6);
90 }
91
0 use strict;
1 use warnings;
2
3 use Test::More tests => 14;
4 use Test::Warnings;
5
6 use Object::ForkAware;
7
8 use lib 't/lib';
9 use PidTracker;
10
11 my $Test = Test::Builder->new;
12
13 {
14 # lazy, access before fork
15
16 my $obj = Object::ForkAware->new(
17 create => sub { PidTracker->new },
18 lazy => 1,
19 );
20
21 is($PidTracker::instance, -1, 'no instances have been created yet');
22 is($obj->instance, 0, 'this is instance #0');
23
24 my $parent_pid = $$;
25 my $child_pid = fork;
26
27 if (not defined $child_pid)
28 {
29 die 'cannot fork: ', $!;
30 }
31 elsif ($child_pid == 0)
32 {
33 # child
34
35 isnt($$, $parent_pid, 'we are no longer the same process');
36
37 ok($obj->isa('Object::ForkAware'), 'object is ForkAware');
38
39 is($obj->pid, $$, 'object was created in the current process');
40 is($obj->instance, 1, 'this is now instance #1');
41 exit;
42 }
43
44 # make sure we do not continue until after the child process exits
45 waitpid($child_pid, 0);
46 $Test->current_test($Test->current_test + 5);
47 }
48
49 $PidTracker::instance = -1;
50
51 {
52 # lazy, no access before fork
53
54 my $obj = Object::ForkAware->new(
55 create => sub { PidTracker->new },
56 lazy => 1,
57 );
58
59 is($PidTracker::instance, -1, 'no instances have been created yet');
60
61 my $parent_pid = $$;
62 my $child_pid = fork;
63
64 if (not defined $child_pid)
65 {
66 die 'cannot fork: ', $!;
67 }
68 elsif ($child_pid == 0)
69 {
70 # child
71
72 isnt($$, $parent_pid, 'we are no longer the same process');
73
74 ok($obj->isa('Object::ForkAware'), 'object is ForkAware');
75 is($obj->pid, $$, 'object was created in the current process');
76 is($obj->instance, 0, 'this is now instance #0');
77 exit;
78 }
79
80 # make sure we do not continue until after the child process exits
81 waitpid($child_pid, 0);
82 $Test->current_test($Test->current_test + 5);
83 }
84
0 use strict;
1 use warnings;
2
3 use Test::More 0.88;
4 use if $ENV{AUTHOR_TESTING}, 'Test::Warnings';
5 use Test::Fatal;
6 use Object::ForkAware;
7
8 is(
9 exception {
10 ok(Object::ForkAware->isa('Object::ForkAware'), 'isa as a class method checks isa of class');
11
12 ok(!Object::ForkAware->isa('Warble'), '..and correctly returns false');
13 },
14 undef,
15 "isa as a class method doesn't crash",
16 );
17
18 SKIP: {
19 skip 'perl 5.9.4 required for UNIVERSAL::DOES', 3 if "$]" < '5.009004';
20 is(
21 exception {
22 ok(Object::ForkAware->DOES('Object::ForkAware'), 'DOES as a class method checks DOES of class');
23
24 ok(!Object::ForkAware->DOES('Warble'), '..and correctly returns false');
25 },
26 undef,
27 "DOES as a class method doesn't crash",
28 );
29 }
30
31 is(
32 exception {
33 is(
34 Object::ForkAware->can('can'),
35 \&Object::ForkAware::can,
36 'can as a class method returns correct sub',
37 );
38
39 ok(!Object::ForkAware->can('nomethod'), '..or undef');
40 },
41 undef,
42 "can as a class method doesn't crash",
43 );
44
45 done_testing;
0 use strict;
1 use warnings;
2 package PidTracker;
3
4 our $instance = -1;
5 our $VERSION = '1.234';
6
7 sub new
8 {
9 my ($class, %opts) = @_;
10 return bless {
11 pid => $$,
12 instance => ++$instance,
13 $opts{recreated_from} ? ( recreated_from => $opts{recreated_from} ) : (),
14 }, $class;
15 }
16
17 sub pid { shift->{pid} }
18
19 sub instance { shift->{instance} }
20
21 sub recreated_from { shift->{recreated_from} }
22
23 sub foo { 'a sub that returns foo' }
24
25 1;
0 use 5.006;
1 use strict;
2 use warnings;
3
4 # this test was generated with Dist::Zilla::Plugin::Test::Compile 2.057
5
6 use Test::More 0.94;
7
8 plan tests => 3;
9
10 my @module_files = (
11 'Object/ForkAware.pm'
12 );
13
14 my @scripts = (
15 'examples/synopsis.pl'
16 );
17
18 # no fake home requested
19
20 my @switches = (
21 -d 'blib' ? '-Mblib' : '-Ilib',
22 );
23
24 use File::Spec;
25 use IPC::Open3;
26 use IO::Handle;
27
28 open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
29
30 my @warnings;
31 for my $lib (@module_files)
32 {
33 # see L<perlfaq8/How can I capture STDERR from an external command?>
34 my $stderr = IO::Handle->new;
35
36 diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
37 $^X, @switches, '-e', "require q[$lib]"))
38 if $ENV{PERL_COMPILE_TEST_DEBUG};
39
40 my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]");
41 binmode $stderr, ':crlf' if $^O eq 'MSWin32';
42 my @_warnings = <$stderr>;
43 waitpid($pid, 0);
44 is($?, 0, "$lib loaded ok");
45
46 shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
47 and not eval { +require blib; blib->VERSION('1.01') };
48
49 if (@_warnings)
50 {
51 warn @_warnings;
52 push @warnings, @_warnings;
53 }
54 }
55
56 foreach my $file (@scripts)
57 { SKIP: {
58 open my $fh, '<', $file or warn("Unable to open $file: $!"), next;
59 my $line = <$fh>;
60
61 close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!\s*(?:\S*perl\S*)((?:\s+-\w*)*)(?:\s*#.*)?$/;
62 @switches = (@switches, split(' ', $1)) if $1;
63
64 my $stderr = IO::Handle->new;
65
66 diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
67 $^X, @switches, '-c', $file))
68 if $ENV{PERL_COMPILE_TEST_DEBUG};
69
70 my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-c', $file);
71 binmode $stderr, ':crlf' if $^O eq 'MSWin32';
72 my @_warnings = <$stderr>;
73 waitpid($pid, 0);
74 is($?, 0, "$file compiled ok");
75
76 shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
77 and not eval { +require blib; blib->VERSION('1.01') };
78
79 # in older perls, -c output is simply the file portion of the path being tested
80 if (@_warnings = grep { !/\bsyntax OK$/ }
81 grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
82 {
83 warn @_warnings;
84 push @warnings, @_warnings;
85 }
86 } }
87
88
89
90 is(scalar(@warnings), 0, 'no warnings found')
91 or diag 'got warnings: ', explain(\@warnings);
92
93 BAIL_OUT("Compilation problems") if !Test::More->builder->is_passing;
0 use strict;
1 use warnings;
2
3 # this test was generated with Dist::Zilla::Plugin::Test::CleanNamespaces 0.006
4
5 use Test::More 0.94;
6 use Test::CleanNamespaces 0.15;
7
8 subtest all_namespaces_clean => sub { all_namespaces_clean() };
9
10 done_testing;
0 use strict;
1 use warnings;
2
3 # this test was generated with Dist::Zilla::Plugin::Test::EOL 0.19
4
5 use Test::More 0.88;
6 use Test::EOL;
7
8 my @files = (
9 'examples/synopsis.pl',
10 'lib/Object/ForkAware.pm',
11 't/00-report-prereqs.dd',
12 't/00-report-prereqs.t',
13 't/01-basic.t',
14 't/02-onfork.t',
15 't/03-lazy.t',
16 't/04-class-methods.t',
17 't/lib/PidTracker.pm',
18 'xt/author/00-compile.t',
19 'xt/author/clean-namespaces.t',
20 'xt/author/eol.t',
21 'xt/author/kwalitee.t',
22 'xt/author/mojibake.t',
23 'xt/author/no-tabs.t',
24 'xt/author/pod-coverage.t',
25 'xt/author/pod-no404s.t',
26 'xt/author/pod-spell.t',
27 'xt/author/pod-syntax.t',
28 'xt/author/portability.t',
29 'xt/release/changes_has_content.t',
30 'xt/release/cpan-changes.t',
31 'xt/release/distmeta.t',
32 'xt/release/minimum-version.t'
33 );
34
35 eol_unix_ok($_, { trailing_whitespace => 1 }) foreach @files;
36 done_testing;
0 # this test was generated with Dist::Zilla::Plugin::Test::Kwalitee 2.12
1 use strict;
2 use warnings;
3 use Test::More 0.88;
4 use Test::Kwalitee 1.21 'kwalitee_ok';
5
6 kwalitee_ok();
7
8 done_testing;
0 #!perl
1
2 use strict;
3 use warnings qw(all);
4
5 use Test::More;
6 use Test::Mojibake;
7
8 all_files_encoding_ok();
0 use strict;
1 use warnings;
2
3 # this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.15
4
5 use Test::More 0.88;
6 use Test::NoTabs;
7
8 my @files = (
9 'examples/synopsis.pl',
10 'lib/Object/ForkAware.pm',
11 't/00-report-prereqs.dd',
12 't/00-report-prereqs.t',
13 't/01-basic.t',
14 't/02-onfork.t',
15 't/03-lazy.t',
16 't/04-class-methods.t',
17 't/lib/PidTracker.pm',
18 'xt/author/00-compile.t',
19 'xt/author/clean-namespaces.t',
20 'xt/author/eol.t',
21 'xt/author/kwalitee.t',
22 'xt/author/mojibake.t',
23 'xt/author/no-tabs.t',
24 'xt/author/pod-coverage.t',
25 'xt/author/pod-no404s.t',
26 'xt/author/pod-spell.t',
27 'xt/author/pod-syntax.t',
28 'xt/author/portability.t',
29 'xt/release/changes_has_content.t',
30 'xt/release/cpan-changes.t',
31 'xt/release/distmeta.t',
32 'xt/release/minimum-version.t'
33 );
34
35 notabs_ok($_) foreach @files;
36 done_testing;
0 #!perl
1 # This file was automatically generated by Dist::Zilla::Plugin::PodCoverageTests.
2
3 use Test::Pod::Coverage 1.08;
4 use Pod::Coverage::TrustPod;
5
6 all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' });
0 #!perl
1
2 use strict;
3 use warnings;
4 use Test::More;
5
6 foreach my $env_skip ( qw(
7 SKIP_POD_NO404S
8 AUTOMATED_TESTING
9 ) ){
10 plan skip_all => "\$ENV{$env_skip} is set, skipping"
11 if $ENV{$env_skip};
12 }
13
14 eval "use Test::Pod::No404s";
15 if ( $@ ) {
16 plan skip_all => 'Test::Pod::No404s required for testing POD';
17 }
18 else {
19 all_pod_files_ok();
20 }
0 use strict;
1 use warnings;
2 use Test::More;
3
4 # generated by Dist::Zilla::Plugin::Test::PodSpelling 2.007004
5 use Test::Spelling 0.12;
6 use Pod::Wordlist;
7
8
9 add_stopwords(<DATA>);
10 all_pod_files_spelling_ok( qw( examples lib script t xt ) );
11 __DATA__
12 Etheridge
13 ForkAware
14 Graham
15 Karen
16 Knop
17 Object
18 ether
19 haarg
20 irc
21 lib
0 #!perl
1 # This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
2 use strict; use warnings;
3 use Test::More;
4 use Test::Pod 1.41;
5
6 all_pod_files_ok();
0 use strict;
1 use warnings;
2
3 use Test::More;
4
5 eval 'use Test::Portability::Files';
6 plan skip_all => 'Test::Portability::Files required for testing portability'
7 if $@;
8
9 run_tests();
0 #!perl
1
2 use Test::More tests => 2;
3
4 note 'Checking Changes';
5 my $changes_file = 'Changes';
6 my $newver = '0.005';
7 my $trial_token = '-TRIAL';
8
9 SKIP: {
10 ok(-e $changes_file, "$changes_file file exists")
11 or skip 'Changes is missing', 1;
12
13 ok(_get_changes($newver), "$changes_file has content for $newver");
14 }
15
16 done_testing;
17
18 # _get_changes copied and adapted from Dist::Zilla::Plugin::Git::Commit
19 # by Jerome Quelin
20 sub _get_changes
21 {
22 my $newver = shift;
23
24 # parse changelog to find commit message
25 open(my $fh, '<', $changes_file) or die "cannot open $changes_file: $!";
26 my $changelog = join('', <$fh>);
27 close $fh;
28
29 my @content =
30 grep { /^$newver(?:$trial_token)?(?:\s+|$)/ ... /^\S/ } # from newver to un-indented
31 split /\n/, $changelog;
32 shift @content; # drop the version line
33
34 # drop unindented last line and trailing blank lines
35 pop @content while ( @content && $content[-1] =~ /^(?:\S|\s*$)/ );
36
37 # return number of non-blank lines
38 return scalar @content;
39 }
40
0 use strict;
1 use warnings;
2
3 # this test was generated with Dist::Zilla::Plugin::Test::CPAN::Changes 0.012
4
5 use Test::More 0.96 tests => 1;
6 use Test::CPAN::Changes;
7 subtest 'changes_ok' => sub {
8 changes_file_ok('Changes');
9 };
0 #!perl
1 # This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
2
3 use Test::CPAN::Meta;
4
5 meta_yaml_ok();
0 #!perl
1
2 use Test::More;
3
4 eval "use Test::MinimumVersion";
5 plan skip_all => "Test::MinimumVersion required for testing minimum versions"
6 if $@;
7 all_minimum_version_ok( qq{5.006} );