Initial commit of Sigil contribution. (FELIX-1142)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@793581 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/sigil/misc/do_notice b/sigil/misc/do_notice
new file mode 100644
index 0000000..933e145
--- /dev/null
+++ b/sigil/misc/do_notice
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+here=$(dirname $0)
+
+find . \
+ ! \( -type d \( -name .svn -o -name build \) -prune \) \
+ ! -name '*.jar' ! -name .classpath ! -name .project \
+ ! -name '*.gif' ! -name '*.ico' ! -name '*.png' \
+ ! -name '*.config' ! -name '*.policy' \
+ ! -name '*.swp' ! -name '*.txt' ! -name '*.properties' \
+ -type f |
+xargs $here/notice.pl $*
+
diff --git a/sigil/misc/notice.pl b/sigil/misc/notice.pl
new file mode 100755
index 0000000..64b40e9
--- /dev/null
+++ b/sigil/misc/notice.pl
@@ -0,0 +1,295 @@
+#!/usr/bin/env perl
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+use FileHandle;
+
+my $dryrun = 0;
+my $quiet = 0;
+
+#
+# Usage: notice.pl [-n] [-q] files...
+#
+
+my $NOTICE = <<'EOT';
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+EOT
+
+# Note: source code notices must not be changed by code formatter
+
+my $NOTICE_java = $NOTICE;
+$NOTICE_java =~ s/^/ * /gm;
+$NOTICE_java = "/*\n" . $NOTICE_java . " */\n\n";
+
+my $NOTICE_xml = $NOTICE;
+$NOTICE_xml =~ s/^/ /gm;
+$NOTICE_xml = "<!--\n" . $NOTICE_xml . "-->\n";
+
+my $NOTICE_sh = $NOTICE;
+$NOTICE_sh =~ s/^/# /gm;
+
+my $NOTICE_bat = $NOTICE;
+$NOTICE_bat =~ s/^/:: /gm;
+
+sub addNotice {
+ my ($fh, $file, $notice) = @_;
+ print "$file\n";
+
+ return if ($dryrun);
+
+ my $tmp = "$file.tmp";
+ my $fh2 = new FileHandle(">$tmp");
+
+ print $fh2 $notice;
+ while (<$fh>) {
+ print $fh2 $_;
+ }
+
+ unlink($file);
+ rename($tmp, $file);
+}
+
+#
+# locate existing copyright & license
+# starts at top of file
+# ends at "package" statement
+#
+sub notice_java {
+ my $file = shift;
+ my $fh = new FileHandle($file);
+ my $header;
+ my $package = undef;
+
+ while (<$fh>) {
+ if (/^package\s+[\w.]+\s*;/) {
+ $package = $_;
+ last;
+ }
+ last if ($. > 200);
+ $header .= $_;
+ }
+
+ if (! $package) {
+ print STDERR "$file: ERROR: no package statement.\n";
+ return;
+ }
+
+ return if ($header eq $NOTICE_java);
+
+ # completely replace all before package statement
+ # so DON'T change below, without changing above
+ # to stop at end-of-first-comment.
+ $header = '';
+ #$header = '' if ($header =~ /copyright/im);
+ #$header = "\n" . $header unless ($header =~ /^\n/);
+
+ addNotice($fh, $file, $NOTICE_java . $header . $package);
+}
+
+sub notice_xml {
+ my $file = shift;
+ my $fh = new FileHandle($file);
+ my $header = undef;
+ my $decl = qq(<?xml version="1.0"?>\n);
+ my $end = 0;
+ my $start = 0;
+
+ while (<$fh>) {
+ if ($. == 1 && /^\<\?/) {
+ $decl = $_;
+ next;
+ }
+
+ $header .= $_;
+
+ if (!$start) {
+ last unless (/^<!--/);
+ $start = 1;
+ }
+
+ if (/-->/) {
+ $end = 1;
+ last;
+ }
+ }
+
+ return if ($header eq $NOTICE_xml);
+
+ $header = '' if ($header =~ /copyright/im);
+
+ if ($start && !$end) {
+ print STDERR "$file: ERROR: initial comment not terminated.\n";
+ return;
+ }
+
+ addNotice($fh, $file, $decl . $NOTICE_xml . $header);
+}
+
+sub notice_sh {
+ my $file = shift;
+ my $fh = new FileHandle($file);
+ my $header = undef;
+ my $hashbang = undef;
+ my $end = '';
+ my $start = '';
+
+ while (<$fh>) {
+ if ($. == 1 && /^#!/) {
+ $hashbang = $_;
+ next;
+ }
+
+ if (!$start) {
+ unless (/^(#|\s*$)/) {
+ $header = $_;
+ last;
+ }
+ $start = 1;
+ next if (/^\s*$/);
+ }
+
+ if (!/^#/) {
+ $end = $_;
+ last;
+ }
+
+ $header .= $_;
+ }
+
+ return if ($header eq $NOTICE_sh);
+
+ $hashbang .= "\n" if ($hashbang);
+
+ $header = '' if ($header =~ /copyright/im);
+ $header .= $end;
+ $header = "\n" . $header unless ($header =~ /^\n/);
+
+ if ($start && !$end) {
+ print STDERR "$file: ERROR: initial comment not terminated.\n";
+ return;
+ }
+
+ addNotice($fh, $file, $hashbang . $NOTICE_sh . $header);
+}
+
+sub notice_bat {
+ my $file = shift;
+ my $fh = new FileHandle($file);
+ my $header = undef;
+ my $atecho = undef;
+ my $end = '';
+ my $start = '';
+
+ while (<$fh>) {
+ s/\r\n$/\n/;
+ if ($. == 1 && /^\@echo/) {
+ $atecho = $_;
+ next;
+ }
+
+ if (!$start) {
+ unless (/^(::|\s*$)/) {
+ $header = $_;
+ last;
+ }
+ $start = 1;
+ next if (/^\s*$/);
+ }
+
+ if (!/^::/) {
+ $end = $_;
+ last;
+ }
+
+ $header .= $_;
+ }
+
+ return if ($header eq $NOTICE_bat);
+
+ $atecho .= "\n" if ($atecho);
+
+ $header = '' if ($header =~ /copyright/im);
+ $header .= $end;
+ $header = "\n" . $header unless ($header =~ /^\n/);
+
+ if ($start && !$end) {
+ print STDERR "$file: ERROR: initial comment not terminated.\n";
+ return;
+ }
+
+ $header = $atecho . $NOTICE_bat . $header;
+ $header =~ s/\n/\r\n/mg;
+ addNotice($fh, $file, $header);
+}
+
+sub notice_unknown {
+ my $file = shift;
+ my $fh = new FileHandle($file);
+
+ my $line = <$fh>;
+
+ if ($line =~ /^#!/) {
+ notice_sh($file);
+ }
+ elsif ($line =~ /^\<\?xml/) {
+ notice_xml($file);
+ }
+ elsif (! $quiet) {
+ print STDERR "$file: unknown file type.\n";
+ }
+}
+
+foreach my $f (@ARGV) {
+ if ($f eq '-n') {
+ $dryrun++;
+ }
+ elsif ($f eq '-q') {
+ $quiet++;
+ }
+ elsif ($f =~ /\.java$/) {
+ notice_java($f);
+ }
+ elsif ($f =~ /\.(xml|xsd|system|composite)$/) {
+ notice_xml($f);
+ }
+ elsif ($f =~ /\.(sh|app|ini|xargs)$/) {
+ notice_sh($f);
+ }
+ elsif ($f =~ /\.(bat)$/) {
+ notice_bat($f);
+ }
+ else {
+ notice_unknown($f);
+ }
+}
+