aboutsummaryrefslogtreecommitdiff
path: root/make
diff options
context:
space:
mode:
authorkatleman <none@none>2012-03-07 13:45:18 -0800
committerkatleman <none@none>2012-03-07 13:45:18 -0800
commit8a2920ae17ca43ed95e1e7d2cba1286a3291c835 (patch)
tree89791bc9ed76eb41d715b7fb411c394184d24ecd /make
parentdd3f51700b1cc96b58a17efc33816266253e6dfa (diff)
parent77ddf36590af8ed9d226b3ebf2cef9ab22a05cfb (diff)
Diffstat (limited to 'make')
-rw-r--r--make/scripts/normalizer.pl208
1 files changed, 208 insertions, 0 deletions
diff --git a/make/scripts/normalizer.pl b/make/scripts/normalizer.pl
new file mode 100644
index 0000000..184248a
--- /dev/null
+++ b/make/scripts/normalizer.pl
@@ -0,0 +1,208 @@
+#!/usr/bin/perl
+
+#
+# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#
+# Parses java files:
+# 1. Removes from the end of lines spaces and TABs
+# 2. Replaces TABs by spaces
+# 3. Replaces all NewLine separators by Unix NewLine separators
+# 4. Makes one and only one empty line at the end of each file
+
+if ($#ARGV < 0) {
+ &usage;
+
+ die;
+}
+
+use Cwd 'abs_path';
+
+my @extensions = ("java");
+
+# Read options
+my $dirpos = 0;
+
+while ($dirpos < $#ARGV) {
+ if ($ARGV[$dirpos] eq "-e") {
+ @extensions = split(/,/, $ARGV[$dirpos + 1]);
+ } else {
+ last;
+ }
+
+ $dirpos += 2;
+}
+
+if ($dirpos > $#ARGV) {
+ &usage;
+
+ die;
+}
+
+use Cwd;
+my $currdir = getcwd;
+
+my $allfiles = 0;
+
+my $filecount = 0;
+
+my @tabvalues;
+
+# Init tabvalues
+push (@tabvalues, " ");
+
+for (my $i = 1; $i < 8; $i++) {
+ push(@tabvalues, $tabvalues[$i - 1] . " ");
+}
+
+open(FILELIST, ">$currdir/filelist") or die "Failed while open $currdir/filelist: $!\n";
+
+while ($dirpos <= $#ARGV) {
+ use File::Find;
+
+ find(\&parse_file, abs_path($ARGV[$dirpos]));
+
+ $dirpos += 1;
+}
+
+close(FILELIST);
+
+use Cwd 'chdir';
+chdir $currdir;
+
+print "Checked $allfiles file(s)\n";
+print "Modified $filecount file(s)\n";
+print "See results in the file $currdir/filelist\n";
+
+sub parse_file {
+ my $filename = $File::Find::name;
+
+ # Skip directories
+ return if -d;
+
+ # Skip SCCS files
+ return if ($filename =~ /\/SCCS\//);
+
+ # Skip files with invalid extensions
+ my $accepted = 0;
+ foreach my $ext (@extensions) {
+ if ($_ =~ /\.$ext$/i) {
+ $accepted = 1;
+
+ last;
+ }
+ }
+ return if ($accepted == 0);
+
+ use File::Basename;
+ my $dirname = dirname($filename);
+
+ use Cwd 'chdir';
+ chdir $dirname;
+
+ open(FILE, $filename) or die "Failed while open $filename: $!\n";
+
+ # Read file
+ my @content;
+ my $line;
+ my $emptylinescount = 0;
+ my $modified = 0;
+
+ while ($line = <FILE>) {
+ my $originalline = $line;
+
+ # Process line
+
+ # Remove from the end of the line spaces and return character
+ while ($line =~ /\s$/) {
+ chop($line);
+ }
+
+ # Replace TABs
+ for (my $i = 0; $i < length($line); $i++) {
+ if (substr($line, $i, 1) =~ /\t/) {
+ $line = substr($line, 0, $i) . $tabvalues[7 - ($i % 8)] . substr($line, $i + 1);
+ }
+ }
+
+ if (length($line) == 0) {
+ $emptylinescount++;
+ } else {
+ while ($emptylinescount > 0) {
+ push(@content, "");
+
+ $emptylinescount--;
+ }
+
+ push(@content, $line);
+ }
+
+ if ($originalline ne ($line . "\n")) {
+ $modified = 1;
+ }
+
+ }
+
+ $allfiles++;
+
+ if ($emptylinescount > 0) {
+ $modified = 1;
+ }
+
+ close(FILE);
+
+ if ($modified != 0) {
+ # Write file
+ open(FILE, ">$filename") or die "Failed while open $filename: $!\n";
+
+ for (my $i = 0; $i <= $#content; $i++) {
+ print FILE "$content[$i]\n";
+ }
+
+ close(FILE);
+
+ # Print name from current dir
+ if (index($filename, $currdir) == 0) {
+ print FILELIST substr($filename, length($currdir) + 1);
+ } else {
+ print FILELIST $filename;
+ }
+ print FILELIST "\n";
+
+ $filecount++;
+
+ print "$filename: modified\n";
+ }
+}
+
+sub usage {
+ print "Usage:\n";
+ print " normalizer.pl [-options] <dir> [dir2 dir3 ...]\n";
+ print " Available options:\n";
+ print " -e comma separated files extensions. By default accepts only java files\n";
+ print "\n";
+ print "Examples:\n";
+ print " normalizer.pl -e c,cpp,h,hpp .\n";
+}
+
+