Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / rt / devel / tools / license_tag
1 #!/usr/bin/env perl
2
3
4 # BEGIN BPS TAGGED BLOCK {{{
5 #
6 # COPYRIGHT:
7 #
8 # This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
9 #                                          <sales@bestpractical.com>
10 #
11 # (Except where explicitly superseded by other copyright notices)
12 #
13 #
14 # LICENSE:
15 #
16 # This work is made available to you under the terms of Version 2 of
17 # the GNU General Public License. A copy of that license should have
18 # been provided with this software, but in any event can be snarfed
19 # from www.gnu.org.
20 #
21 # This work is distributed in the hope that it will be useful, but
22 # WITHOUT ANY WARRANTY; without even the implied warranty of
23 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24 # General Public License for more details.
25 #
26 # You should have received a copy of the GNU General Public License
27 # along with this program; if not, write to the Free Software
28 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
29 # 02110-1301 or visit their web page on the internet at
30 # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
31 #
32 #
33 # CONTRIBUTION SUBMISSION POLICY:
34 #
35 # (The following paragraph is not intended to limit the rights granted
36 # to you to modify and distribute this software under the terms of
37 # the GNU General Public License and is only of importance to you if
38 # you choose to contribute your changes and enhancements to the
39 # community by submitting them to Best Practical Solutions, LLC.)
40 #
41 # By intentionally submitting any modifications, corrections or
42 # derivatives to this work, or any other work intended for use with
43 # Request Tracker, to Best Practical Solutions, LLC, you confirm that
44 # you are the copyright holder for those contributions and you grant
45 # Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
46 # royalty-free, perpetual, license to use, copy, create derivative
47 # works based on those contributions, and sublicense and distribute
48 # those contributions and any derivatives thereof.
49 #
50 # END BPS TAGGED BLOCK }}}
51 my $LICENSE  = <<'EOL';
52
53 COPYRIGHT:
54
55 This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
56                                          <sales@bestpractical.com>
57
58 (Except where explicitly superseded by other copyright notices)
59
60
61 LICENSE:
62
63 This work is made available to you under the terms of Version 2 of
64 the GNU General Public License. A copy of that license should have
65 been provided with this software, but in any event can be snarfed
66 from www.gnu.org.
67
68 This work is distributed in the hope that it will be useful, but
69 WITHOUT ANY WARRANTY; without even the implied warranty of
70 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
71 General Public License for more details.
72
73 You should have received a copy of the GNU General Public License
74 along with this program; if not, write to the Free Software
75 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
76 02110-1301 or visit their web page on the internet at
77 http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
78
79
80 CONTRIBUTION SUBMISSION POLICY:
81
82 (The following paragraph is not intended to limit the rights granted
83 to you to modify and distribute this software under the terms of
84 the GNU General Public License and is only of importance to you if
85 you choose to contribute your changes and enhancements to the
86 community by submitting them to Best Practical Solutions, LLC.)
87
88 By intentionally submitting any modifications, corrections or
89 derivatives to this work, or any other work intended for use with
90 Request Tracker, to Best Practical Solutions, LLC, you confirm that
91 you are the copyright holder for those contributions and you grant
92 Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
93 royalty-free, perpetual, license to use, copy, create derivative
94 works based on those contributions, and sublicense and distribute
95 those contributions and any derivatives thereof.
96
97 EOL
98
99 use File::Find;
100
101 my @MAKE = qw(Makefile);
102
103 File::Find::find({ no_chdir => 1, wanted => \&tag_pm}, 'lib');
104 File::Find::find({ no_chdir => 1, wanted => \&tag_mason}, 'share/html');
105 File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'sbin');
106 File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'bin');
107 File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'etc/upgrade');
108 File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'devel/tools');
109 tag_makefile ('Makefile.in');
110 tag_makefile ('README');
111
112
113 sub tag_mason {
114         my $pm = $_;
115         return unless (-f $pm);
116         return if $pm =~ /images/ || $pm =~ /\.(?:png|jpe?g|gif)$/;
117         open( FILE, '<', $pm ) or die "Failed to open $pm";
118         my $file = (join "", <FILE>);
119         close (FILE);
120         print "$pm - ";
121         return if another_license($pm => $file) && print "has different license\n";
122
123         my $pmlic = $LICENSE;
124         $pmlic =~ s/^/%# /mg;
125         $pmlic =~ s/\s*$//mg;
126         if ($file =~ /^%# BEGIN BPS TAGGED BLOCK {{{/ms) {
127                 print "has license section";
128              $file =~ s/^%# BEGIN BPS TAGGED BLOCK {{{(.*?)%# END BPS TAGGED BLOCK }}}/%# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n%# END BPS TAGGED BLOCK }}}/ms;
129
130
131         } else {
132                 print "no license section";
133              $file ="%# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n%# END BPS TAGGED BLOCK }}}\n". $file;
134         }
135         $file =~ s/%# END BPS TAGGED BLOCK }}}(\n+)/%# END BPS TAGGED BLOCK }}}\n/mg;
136         print "\n";
137
138
139
140
141         open( FILE, '>', $pm ) or die "couldn't write new file";
142         print FILE $file;
143         close FILE;
144
145 }
146
147
148 sub tag_makefile {
149         my $pm = shift;
150         open( FILE, '<', $pm ) or die "Failed to open $pm";
151         my $file = (join "", <FILE>);
152         close (FILE);
153         print "$pm - ";
154         return if another_license($pm => $file) && print "has different license\n";
155
156         my $pmlic = $LICENSE;
157         $pmlic =~ s/^/# /mg;
158         $pmlic =~ s/\s*$//mg;
159         if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) {
160                 print "has license section";
161              $file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n# END BPS TAGGED BLOCK }}}/ms;
162
163
164         } else {
165                 print "no license section";
166              $file ="# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n# END BPS TAGGED BLOCK }}}\n". $file;
167         }
168         $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n/mg;
169         print "\n";
170
171
172
173
174         open( FILE, '>', $pm ) or die "couldn't write new file";
175         print FILE $file;
176         close FILE;
177
178 }
179
180
181 sub tag_pm {
182         my $pm = $_;
183         next unless $pm =~ /\.pm/s;
184         open( FILE, '<', $pm ) or die "Failed to open $pm";
185         my $file = (join "", <FILE>);
186         close (FILE);
187         print "$pm - ";
188         return if another_license($pm => $file) && print "has different license\n";
189
190         my $pmlic = $LICENSE;
191         $pmlic =~ s/^/# /mg;
192         $pmlic =~ s/\s*$//mg;
193         if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) {
194                 print "has license section";
195              $file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n# END BPS TAGGED BLOCK }}}/ms;
196
197
198         } else {
199                 print "no license section";
200              $file ="# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n# END BPS TAGGED BLOCK }}}\n". $file;
201         }
202         $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n\n/mg;
203         print "\n";
204
205
206
207
208         open( FILE, '>', $pm ) or die "couldn't write new file $pm";
209         print FILE $file;
210         close FILE;
211
212 }
213
214
215 sub tag_script {
216         my $pm = $_;
217         return unless (-f $pm);
218         open( FILE, '<', $pm ) or die "Failed to open $pm";
219         my $file = (join "", <FILE>);
220         close (FILE);
221         print "$pm - ";
222         return if another_license($pm => $file) && print "has different license\n";
223
224         my $pmlic = $LICENSE;
225         $pmlic =~ s/^/# /msg;
226         $pmlic =~ s/\s*$//mg;
227         if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) {
228                 print "has license section";
229              $file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n# END BPS TAGGED BLOCK }}}/ms;
230
231
232         } else {
233                 print "no license section";
234                 if ($file =~ /^(#!.*?)\n/) {
235
236             my  $lic ="# BEGIN BPS TAGGED BLOCK {{{\n$pmlic\n# END BPS TAGGED BLOCK }}}\n";
237                 $file =~ s/^(#!.*?)\n/$1\n$lic/;
238
239                 }
240         }
241         $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n/mg;
242         print "\n";
243
244
245         open( FILE, '>', $pm ) or die "couldn't write new file";
246         print FILE $file;
247         close FILE;
248
249 }
250
251 sub another_license {
252     my $name = shift;
253     my $file = shift;
254
255     return 1 if ($name =~ /(?:FCKEditor|scriptaculous|superfish|tablesorter|farbtastic)/i);
256
257     return 0 if $file =~ /Copyright\s+\(c\)\s+\d\d\d\d-\d\d\d\d Best Practical Solutions/i;
258     return 1 if $file =~ /\b(copyright|GPL|Public Domain)\b/i; # common
259     return 1 if $file =~ /\(c\)\s+\d\d\d\d(?:-\d\d\d\d)?/i; # prototype
260     return 0;
261 }
262