root/lang/perl/misc/pmsetup/typester-pmsetup @ 10797

Revision 10797, 25.3 kB (checked in by typester, 5 years ago)

upgrade my pmsetup git friendly

  • Property svn:executable set to *
Line 
1#!/usr/bin/perl
2use strict;
3use warnings;
4use ExtUtils::MakeMaker qw(prompt);
5use File::Basename;
6use File::Path;
7use File::Spec;
8use Template;
9use YAML;
10
11my $path   = File::Spec->catfile($ENV{HOME}, "/.pmsetuprc");
12my $config = eval { YAML::LoadFile($path) } || {};
13
14my $save;
15while (! $config->{author}) {
16    $config->{author} = prompt("Your name: ", '');
17    $save++;
18}
19
20while (! $config->{email}) {
21    $config->{email} = prompt("Your email: ", '');
22    $save++;
23}
24
25my $modname = shift @ARGV or die "Usage: $0 module\n";
26   $modname =~ s/-/::/g;
27
28write_plugin_files($modname, $config);
29
30END {
31    YAML::DumpFile($path, $config) if $save;
32}
33
34sub write_plugin_files {
35    my($module, $config) = @_;
36
37    # $module = "Foo::Bar"
38    # $dist   = "Foo-Bar"
39    # $path   = "Foo/Bar.pm"
40    my @pkg  = split /::/, $module;
41    my $dist = join "-", @pkg;
42    my $path = join("/", @pkg) . ".pm";
43
44    mkdir $dist, 0777;
45    chdir $dist;
46
47    my @template = YAML::Load(join '', <DATA>);
48    my $vars = { module => $module, dist => $dist, path => $path,
49                 config => $config, localtime => scalar localtime };
50
51    for my $tmpl (@template) {
52        my $file = $tmpl->{file};
53           $file =~ s/(\$\w+)/$1/eeg;
54        write_file($file, $tmpl->{template}, $vars);
55    }
56
57    !system "perl Makefile.PL" or die $?;
58    !system 'make test' or die $?;
59    !system 'make manifest' or die $?;
60    !system 'make distclean' or die $?;
61}
62
63sub write_file {
64    my($path, $template, $vars) = @_;
65
66    if (-e $path) {
67        my $ans = prompt("$path exists. Override? [yN] ", 'n');
68        return if $ans !~ /[Yy]/;
69    }
70
71    my $dir = File::Basename::dirname($path);
72    unless (-e $dir) {
73        warn "Creating directory $dir\n";
74        File::Path::mkpath($dir, 1, 0777);
75    }
76
77    my $tt = Template->new;
78    $tt->process(\$template, $vars, \my $content);
79
80    warn "Creating $path\n";
81    open my $out, ">", $path or die "$path: $!";
82    print $out $content;
83    close $out;
84}
85
86__DATA__
87---
88file: Makefile.PL
89template: |
90  use inc::Module::Install;
91  name '[% dist %]';
92  all_from 'lib/[% path %]';
93
94  build_requires 'Test::More';
95  use_test_base;
96  auto_include;
97  WriteAll;
98
99---
100file: t/00_compile.t
101template: |
102  use strict;
103  use Test::More tests => 1;
104
105  BEGIN { use_ok '[% module %]' }
106---
107file: t/pod.t
108template: |
109  use Test::More;
110  eval "use Test::Pod 1.00";
111  plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
112  all_pod_files_ok();
113---
114file: t/pod_coverage.t
115template: |
116  use Test::More;
117  eval "use Test::Pod::Coverage 1.04";
118  plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage"
119      if $@;
120  all_pod_coverage_ok();
121---
122file: Changes
123template: |
124  Revision history for Perl extension [% module %]
125
126    0.01  [% localtime %]
127          - original version
128---
129file: lib/$path
130template: |
131  package [% module %];
132  use strict;
133  use warnings;
134 
135  our $VERSION = '0.01';
136 
137  =head1 NAME
138 
139  [% module %] - Module abstract (<= 44 characters) goes here
140 
141  =head1 SYNOPSIS
142 
143    use [% module %];
144    blah blah blah
145 
146  =head1 DESCRIPTION
147 
148  Stub documentation for this module was created by ExtUtils::ModuleMaker.
149  It looks like the author of the extension was negligent enough
150  to leave the stub unedited.
151 
152  Blah blah blah.
153 
154  =head1 AUTHOR
155 
156  [% config.author %] <[% config.email %]>
157 
158  =head1 COPYRIGHT
159 
160  This program is free software; you can redistribute
161  it and/or modify it under the same terms as Perl itself.
162 
163  The full text of the license can be found in the
164  LICENSE file included with this module.
165 
166  =cut
167 
168  1;
169---
170file: MANIFEST.SKIP
171template: |
172  \bRCS\b
173  \bCVS\b
174  ^MANIFEST\.
175  ^Makefile$
176  ~$
177  \.old$
178  ^blib/
179  ^pm_to_blib
180  ^MakeMaker-\d
181  \.gz$
182  \.cvsignore
183  ^9\d_.*\.t
184  ^\.git/
185  ^\.shipit$
186---
187file: .shipit
188  template: |
189  steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN
190 
191  git.tagpattern = release-%v
192  git.push_to    = origin
193 
194---
195file: README
196template: |
197  This is Perl module [% module %].
198
199  INSTALLATION
200
201  [% module %] installation is straightforward. If your CPAN shell is set up,
202  you should just be able to do
203
204      % cpan [% module %]
205
206  Download it, unpack it, then build it as per the usual:
207
208      % perl Makefile.PL
209      % make && make test
210
211  Then install it:
212
213      % make install
214
215  DOCUMENTATION
216
217  [% module %] documentation is available as in POD. So you can do:
218
219      % perldoc [% module %]
220
221  to read the documentation online with your favorite pager.
222
223  [% config.author %]
224---
225file: LICENSE
226template: |
227  Terms of Perl itself
228 
229  a) the GNU General Public License as published by the Free
230     Software Foundation; either version 1, or (at your option) any
231     later version, or
232  b) the "Artistic License"
233 
234  ---------------------------------------------------------------------------
235 
236  The General Public License (GPL)
237  Version 2, June 1991
238 
239  Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
240  Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
241  verbatim copies of this license document, but changing it is not allowed.
242 
243  Preamble
244 
245  The licenses for most software are designed to take away your freedom to share
246  and change it. By contrast, the GNU General Public License is intended to
247  guarantee your freedom to share and change free software--to make sure the
248  software is free for all its users. This General Public License applies to most of
249  the Free Software Foundation's software and to any other program whose
250  authors commit to using it. (Some other Free Software Foundation software is
251  covered by the GNU Library General Public License instead.) You can apply it to
252  your programs, too.
253 
254  When we speak of free software, we are referring to freedom, not price. Our
255  General Public Licenses are designed to make sure that you have the freedom
256  to distribute copies of free software (and charge for this service if you wish), that
257  you receive source code or can get it if you want it, that you can change the
258  software or use pieces of it in new free programs; and that you know you can do
259  these things.
260 
261  To protect your rights, we need to make restrictions that forbid anyone to deny
262  you these rights or to ask you to surrender the rights. These restrictions
263  translate to certain responsibilities for you if you distribute copies of the
264  software, or if you modify it.
265 
266  For example, if you distribute copies of such a program, whether gratis or for a
267  fee, you must give the recipients all the rights that you have. You must make
268  sure that they, too, receive or can get the source code. And you must show
269  them these terms so they know their rights.
270 
271  We protect your rights with two steps: (1) copyright the software, and (2) offer
272  you this license which gives you legal permission to copy, distribute and/or
273  modify the software.
274 
275  Also, for each author's protection and ours, we want to make certain that
276  everyone understands that there is no warranty for this free software. If the
277  software is modified by someone else and passed on, we want its recipients to
278  know that what they have is not the original, so that any problems introduced by
279  others will not reflect on the original authors' reputations.
280 
281  Finally, any free program is threatened constantly by software patents. We wish
282  to avoid the danger that redistributors of a free program will individually obtain
283  patent licenses, in effect making the program proprietary. To prevent this, we
284  have made it clear that any patent must be licensed for everyone's free use or
285  not licensed at all.
286 
287  The precise terms and conditions for copying, distribution and modification
288  follow.
289 
290  GNU GENERAL PUBLIC LICENSE
291  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
292  MODIFICATION
293 
294  0. This License applies to any program or other work which contains a notice
295  placed by the copyright holder saying it may be distributed under the terms of
296  this General Public License. The "Program", below, refers to any such program
297  or work, and a "work based on the Program" means either the Program or any
298  derivative work under copyright law: that is to say, a work containing the
299  Program or a portion of it, either verbatim or with modifications and/or translated
300  into another language. (Hereinafter, translation is included without limitation in
301  the term "modification".) Each licensee is addressed as "you".
302 
303  Activities other than copying, distribution and modification are not covered by
304  this License; they are outside its scope. The act of running the Program is not
305  restricted, and the output from the Program is covered only if its contents
306  constitute a work based on the Program (independent of having been made by
307  running the Program). Whether that is true depends on what the Program does.
308 
309  1. You may copy and distribute verbatim copies of the Program's source code as
310  you receive it, in any medium, provided that you conspicuously and appropriately
311  publish on each copy an appropriate copyright notice and disclaimer of warranty;
312  keep intact all the notices that refer to this License and to the absence of any
313  warranty; and give any other recipients of the Program a copy of this License
314  along with the Program.
315 
316  You may charge a fee for the physical act of transferring a copy, and you may at
317  your option offer warranty protection in exchange for a fee.
318 
319  2. You may modify your copy or copies of the Program or any portion of it, thus
320  forming a work based on the Program, and copy and distribute such
321  modifications or work under the terms of Section 1 above, provided that you also
322  meet all of these conditions:
323 
324  a) You must cause the modified files to carry prominent notices stating that you
325  changed the files and the date of any change.
326 
327  b) You must cause any work that you distribute or publish, that in whole or in
328  part contains or is derived from the Program or any part thereof, to be licensed
329  as a whole at no charge to all third parties under the terms of this License.
330 
331  c) If the modified program normally reads commands interactively when run, you
332  must cause it, when started running for such interactive use in the most ordinary
333  way, to print or display an announcement including an appropriate copyright
334  notice and a notice that there is no warranty (or else, saying that you provide a
335  warranty) and that users may redistribute the program under these conditions,
336  and telling the user how to view a copy of this License. (Exception: if the
337  Program itself is interactive but does not normally print such an announcement,
338  your work based on the Program is not required to print an announcement.)
339 
340  These requirements apply to the modified work as a whole. If identifiable
341  sections of that work are not derived from the Program, and can be reasonably
342  considered independent and separate works in themselves, then this License,
343  and its terms, do not apply to those sections when you distribute them as
344  separate works. But when you distribute the same sections as part of a whole
345  which is a work based on the Program, the distribution of the whole must be on
346  the terms of this License, whose permissions for other licensees extend to the
347  entire whole, and thus to each and every part regardless of who wrote it.
348 
349  Thus, it is not the intent of this section to claim rights or contest your rights to
350  work written entirely by you; rather, the intent is to exercise the right to control
351  the distribution of derivative or collective works based on the Program.
352 
353  In addition, mere aggregation of another work not based on the Program with the
354  Program (or with a work based on the Program) on a volume of a storage or
355  distribution medium does not bring the other work under the scope of this
356  License.
357 
358  3. You may copy and distribute the Program (or a work based on it, under
359  Section 2) in object code or executable form under the terms of Sections 1 and 2
360  above provided that you also do one of the following:
361 
362  a) Accompany it with the complete corresponding machine-readable source
363  code, which must be distributed under the terms of Sections 1 and 2 above on a
364  medium customarily used for software interchange; or,
365 
366  b) Accompany it with a written offer, valid for at least three years, to give any
367  third party, for a charge no more than your cost of physically performing source
368  distribution, a complete machine-readable copy of the corresponding source
369  code, to be distributed under the terms of Sections 1 and 2 above on a medium
370  customarily used for software interchange; or,
371 
372  c) Accompany it with the information you received as to the offer to distribute
373  corresponding source code. (This alternative is allowed only for noncommercial
374  distribution and only if you received the program in object code or executable
375  form with such an offer, in accord with Subsection b above.)
376 
377  The source code for a work means the preferred form of the work for making
378  modifications to it. For an executable work, complete source code means all the
379  source code for all modules it contains, plus any associated interface definition
380  files, plus the scripts used to control compilation and installation of the
381  executable. However, as a special exception, the source code distributed need
382  not include anything that is normally distributed (in either source or binary form)
383  with the major components (compiler, kernel, and so on) of the operating system
384  on which the executable runs, unless that component itself accompanies the
385  executable.
386 
387  If distribution of executable or object code is made by offering access to copy
388  from a designated place, then offering equivalent access to copy the source
389  code from the same place counts as distribution of the source code, even though
390  third parties are not compelled to copy the source along with the object code.
391 
392  4. You may not copy, modify, sublicense, or distribute the Program except as
393  expressly provided under this License. Any attempt otherwise to copy, modify,
394  sublicense or distribute the Program is void, and will automatically terminate
395  your rights under this License. However, parties who have received copies, or
396  rights, from you under this License will not have their licenses terminated so long
397  as such parties remain in full compliance.
398 
399  5. You are not required to accept this License, since you have not signed it.
400  However, nothing else grants you permission to modify or distribute the Program
401  or its derivative works. These actions are prohibited by law if you do not accept
402  this License. Therefore, by modifying or distributing the Program (or any work
403  based on the Program), you indicate your acceptance of this License to do so,
404  and all its terms and conditions for copying, distributing or modifying the
405  Program or works based on it.
406 
407  6. Each time you redistribute the Program (or any work based on the Program),
408  the recipient automatically receives a license from the original licensor to copy,
409  distribute or modify the Program subject to these terms and conditions. You
410  may not impose any further restrictions on the recipients' exercise of the rights
411  granted herein. You are not responsible for enforcing compliance by third parties
412  to this License.
413 
414  7. If, as a consequence of a court judgment or allegation of patent infringement
415  or for any other reason (not limited to patent issues), conditions are imposed on
416  you (whether by court order, agreement or otherwise) that contradict the
417  conditions of this License, they do not excuse you from the conditions of this
418  License. If you cannot distribute so as to satisfy simultaneously your obligations
419  under this License and any other pertinent obligations, then as a consequence
420  you may not distribute the Program at all. For example, if a patent license would
421  not permit royalty-free redistribution of the Program by all those who receive
422  copies directly or indirectly through you, then the only way you could satisfy
423  both it and this License would be to refrain entirely from distribution of the
424  Program.
425 
426  If any portion of this section is held invalid or unenforceable under any particular
427  circumstance, the balance of the section is intended to apply and the section as
428  a whole is intended to apply in other circumstances.
429 
430  It is not the purpose of this section to induce you to infringe any patents or other
431  property right claims or to contest validity of any such claims; this section has
432  the sole purpose of protecting the integrity of the free software distribution
433  system, which is implemented by public license practices. Many people have
434  made generous contributions to the wide range of software distributed through
435  that system in reliance on consistent application of that system; it is up to the
436  author/donor to decide if he or she is willing to distribute software through any
437  other system and a licensee cannot impose that choice.
438 
439  This section is intended to make thoroughly clear what is believed to be a
440  consequence of the rest of this License.
441 
442  8. If the distribution and/or use of the Program is restricted in certain countries
443  either by patents or by copyrighted interfaces, the original copyright holder who
444  places the Program under this License may add an explicit geographical
445  distribution limitation excluding those countries, so that distribution is permitted
446  only in or among countries not thus excluded. In such case, this License
447  incorporates the limitation as if written in the body of this License.
448 
449  9. The Free Software Foundation may publish revised and/or new versions of the
450  General Public License from time to time. Such new versions will be similar in
451  spirit to the present version, but may differ in detail to address new problems or
452  concerns.
453 
454  Each version is given a distinguishing version number. If the Program specifies a
455  version number of this License which applies to it and "any later version", you
456  have the option of following the terms and conditions either of that version or of
457  any later version published by the Free Software Foundation. If the Program does
458  not specify a version number of this License, you may choose any version ever
459  published by the Free Software Foundation.
460 
461  10. If you wish to incorporate parts of the Program into other free programs
462  whose distribution conditions are different, write to the author to ask for
463  permission. For software which is copyrighted by the Free Software Foundation,
464  write to the Free Software Foundation; we sometimes make exceptions for this.
465  Our decision will be guided by the two goals of preserving the free status of all
466  derivatives of our free software and of promoting the sharing and reuse of
467  software generally.
468 
469  NO WARRANTY
470 
471  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS
472  NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
473  APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
474  COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
475  "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
476  IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
477  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
478  ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
479  PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
480  YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
481  CORRECTION.
482 
483  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
484  TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
485  WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS
486  PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
487  GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
488  ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
489  (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
490  RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
491  PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
492  OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS
493  BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
494 
495  END OF TERMS AND CONDITIONS
496 
497 
498  ---------------------------------------------------------------------------
499 
500  The Artistic License
501 
502  Preamble
503 
504  The intent of this document is to state the conditions under which a Package
505  may be copied, such that the Copyright Holder maintains some semblance of
506  artistic control over the development of the package, while giving the users of the
507  package the right to use and distribute the Package in a more-or-less customary
508  fashion, plus the right to make reasonable modifications.
509 
510  Definitions:
511 
512  -    "Package" refers to the collection of files distributed by the Copyright
513       Holder, and derivatives of that collection of files created through textual
514       modification.
515  -    "Standard Version" refers to such a Package if it has not been modified,
516       or has been modified in accordance with the wishes of the Copyright
517       Holder.
518  -    "Copyright Holder" is whoever is named in the copyright or copyrights for
519       the package.
520  -    "You" is you, if you're thinking about copying or distributing this Package.
521  -    "Reasonable copying fee" is whatever you can justify on the basis of
522       media cost, duplication charges, time of people involved, and so on. (You
523       will not be required to justify it to the Copyright Holder, but only to the
524       computing community at large as a market that must bear the fee.)
525  -    "Freely Available" means that no fee is charged for the item itself, though
526       there may be fees involved in handling the item. It also means that
527       recipients of the item may redistribute it under the same conditions they
528       received it.
529 
530  1. You may make and give away verbatim copies of the source form of the
531  Standard Version of this Package without restriction, provided that you duplicate
532  all of the original copyright notices and associated disclaimers.
533 
534  2. You may apply bug fixes, portability fixes and other modifications derived from
535  the Public Domain or from the Copyright Holder. A Package modified in such a
536  way shall still be considered the Standard Version.
537 
538  3. You may otherwise modify your copy of this Package in any way, provided
539  that you insert a prominent notice in each changed file stating how and when
540  you changed that file, and provided that you do at least ONE of the following:
541 
542       a) place your modifications in the Public Domain or otherwise
543       make them Freely Available, such as by posting said modifications
544       to Usenet or an equivalent medium, or placing the modifications on
545       a major archive site such as ftp.uu.net, or by allowing the
546       Copyright Holder to include your modifications in the Standard
547       Version of the Package.
548 
549       b) use the modified Package only within your corporation or
550       organization.
551 
552       c) rename any non-standard executables so the names do not
553       conflict with standard executables, which must also be provided,
554       and provide a separate manual page for each non-standard
555       executable that clearly documents how it differs from the Standard
556       Version.
557 
558       d) make other distribution arrangements with the Copyright Holder.
559 
560  4. You may distribute the programs of this Package in object code or executable
561  form, provided that you do at least ONE of the following:
562 
563       a) distribute a Standard Version of the executables and library
564       files, together with instructions (in the manual page or equivalent)
565       on where to get the Standard Version.
566 
567       b) accompany the distribution with the machine-readable source of
568       the Package with your modifications.
569 
570       c) accompany any non-standard executables with their
571       corresponding Standard Version executables, giving the
572       non-standard executables non-standard names, and clearly
573       documenting the differences in manual pages (or equivalent),
574       together with instructions on where to get the Standard Version.
575 
576       d) make other distribution arrangements with the Copyright Holder.
577 
578  5. You may charge a reasonable copying fee for any distribution of this Package.
579  You may charge any fee you choose for support of this Package. You may not
580  charge a fee for this Package itself. However, you may distribute this Package in
581  aggregate with other (possibly commercial) programs as part of a larger
582  (possibly commercial) software distribution provided that you do not advertise
583  this Package as a product of your own.
584 
585  6. The scripts and library files supplied as input to or produced as output from
586  the programs of this Package do not automatically fall under the copyright of this
587  Package, but belong to whomever generated them, and may be sold
588  commercially, and may be aggregated with this Package.
589 
590  7. C or perl subroutines supplied by you and linked into this Package shall not
591  be considered part of this Package.
592 
593  8. Aggregation of this Package with a commercial distribution is always permitted
594  provided that the use of this Package is embedded; that is, when no overt attempt
595  is made to make this Package's interfaces visible to the end user of the
596  commercial distribution. Such use shall not be construed as a distribution of
597  this Package.
598 
599  9. The name of the Copyright Holder may not be used to endorse or promote
600  products derived from this software without specific prior written permission.
601 
602  10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
603  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
604  WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
605  PURPOSE.
606 
607  The End
Note: See TracBrowser for help on using the browser.