mirror of https://gitee.com/bigwinds/arangodb
391 lines
9.6 KiB
Perl
Executable File
391 lines
9.6 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
################################################################################
|
|
### DISCLAIMER
|
|
###
|
|
### Copyright holder is ArangoDB GmbH, Cologne, Germany
|
|
###
|
|
### @author Dr. Frank Celler
|
|
################################################################################
|
|
|
|
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
|
|
if $running_under_some_shell;
|
|
# this emulates #! processing on NIH machines.
|
|
# (remove #! line above if indigestible)
|
|
|
|
use File::Spec;
|
|
|
|
use strict;
|
|
use File::Slurp;
|
|
|
|
my $year = `date +%Y`;
|
|
chomp $year;
|
|
|
|
################################################################################
|
|
### @brief loop over all files
|
|
################################################################################
|
|
|
|
my $dryRun = 0;
|
|
my $disclaimer =
|
|
"/// Licensed under the Apache License, Version 2.0 (the \"License\");\n"
|
|
. "/// you may not use this file except in compliance with the License.\n"
|
|
. "/// You may obtain a copy of the License at\n"
|
|
. "///\n"
|
|
. "/// http://www.apache.org/licenses/LICENSE-2.0\n"
|
|
. "///\n"
|
|
. "/// Unless required by applicable law or agreed to in writing, software\n"
|
|
. "/// distributed under the License is distributed on an \"AS IS\" BASIS,\n"
|
|
. "/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
|
|
. "/// See the License for the specific language governing permissions and\n"
|
|
. "/// limitations under the License.\n";
|
|
|
|
while (@ARGV) {
|
|
my $file = shift @ARGV;
|
|
|
|
if ($file eq '-n' || $file eq '--dry-run') {
|
|
$dryRun = 1;
|
|
next;
|
|
}
|
|
elsif ($file eq '-d' || $file eq '--disclaimer') {
|
|
my $path = shift @ARGV;
|
|
|
|
$disclaimer = read_file($path);
|
|
next;
|
|
}
|
|
|
|
formatFile($file, $disclaimer, $dryRun);
|
|
}
|
|
|
|
################################################################################
|
|
### @brief formats the preamble
|
|
################################################################################
|
|
|
|
sub formatFile ($$$) {
|
|
my ($file, $disclaimerText, $dryRun) = @_;
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# state definition
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# set to true, if we see a @file, @auther, DISCLAIMER
|
|
my $headerSeen = 0;
|
|
|
|
# set to true, if we see a @file
|
|
my $fileSeen = 0;
|
|
|
|
# set to true, if we see a @author
|
|
my $authorSeen = 0;
|
|
|
|
# set to true, if we see a DISCLAIMER
|
|
my $disclaimerSeen = 0;
|
|
|
|
# set to true, if we handled the DISCLAIMER
|
|
my $disclaimerDone = 0;
|
|
|
|
# set to true, if we see a "Copyright holder"
|
|
my $holderSeen = 0;
|
|
|
|
# set to true, if we processing a header file
|
|
my $isHeaderFile = 0;
|
|
|
|
# set to true, if we processing a JavaScript file
|
|
my $isJavaScript = 0;
|
|
|
|
# set to true, if we have seen the preamble
|
|
my $preambleDone = 0;
|
|
|
|
# set to true, if we are at a break line (80 times /)
|
|
my $breakLine = 0;
|
|
|
|
# 0 = before guard, 1 = after seen a break line, 2 = after seen guard define
|
|
my $guard = 0;
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# guard
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# name of the "ifdef" guard
|
|
my $guardName = "";
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# examine the filename and path
|
|
# -----------------------------------------------------------------------------
|
|
|
|
my $absPath = File::Spec->rel2abs($file);
|
|
$absPath =~ s:-|_:__:g;
|
|
$absPath =~ s:\.|\+:_:g;
|
|
$absPath =~ s/([a-z])([A-Z])/\1_\2/g;
|
|
$absPath = uc($absPath);
|
|
|
|
my @absParts = split(/\//, $absPath);
|
|
my $filename = $absParts[@absParts - 1];
|
|
|
|
if ($filename =~ /\_H$/) {
|
|
$isHeaderFile = 1;
|
|
|
|
my $u = $filename;
|
|
my $m = "";
|
|
my $c = "";
|
|
|
|
if (@absParts > 1) {
|
|
$m = $absParts[@absParts - 2];
|
|
}
|
|
|
|
if (@absParts > 2) {
|
|
$c = $absParts[@absParts - 3];
|
|
}
|
|
|
|
$guardName = "ARANGODB_" . $m . "_" . $u;
|
|
|
|
print STDERR "INFO guard name is $guardName\n";
|
|
}
|
|
|
|
if ($filename =~ /\_JS$/) {
|
|
$isJavaScript = 1;
|
|
}
|
|
|
|
print STDERR "INFO processing $file ($absPath)\n";
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# load and process file
|
|
# -----------------------------------------------------------------------------
|
|
|
|
open(IN, "< $file")
|
|
|| die "cannot open input file '$file'";
|
|
|
|
my $out = *STDOUT;
|
|
|
|
if (! $dryRun) {
|
|
open($out, "> $file.new")
|
|
|| die "cannot open output file '$file.new'";
|
|
}
|
|
|
|
my $lastLine = undef;
|
|
my $skipGroup = 0;
|
|
my $foundEOL = 0;
|
|
my $finalEndif = 0;
|
|
my $copyrightLines = "";
|
|
|
|
while (<IN>) {
|
|
chomp;
|
|
|
|
$_ =~ s/\r$//;
|
|
$_ =~ s/[ \t]*$//;
|
|
|
|
my $line = $_;
|
|
$breakLine = 0;
|
|
|
|
if ($line =~ /^\/\/\/ \@addtogroup/) {
|
|
$lastLine = undef;
|
|
$skipGroup = 1;
|
|
next;
|
|
}
|
|
|
|
if ($line =~ /^\/\/\/ @}/) {
|
|
$lastLine = undef;
|
|
$skipGroup = 1;
|
|
next;
|
|
}
|
|
|
|
if ($skipGroup == 1) {
|
|
if ($line =~ /^\/\/\/\/\/\//) {
|
|
$skipGroup = 2;
|
|
}
|
|
|
|
next;
|
|
}
|
|
|
|
if ($skipGroup == 2) {
|
|
if ($line !~ /^[\t ]*$/) {
|
|
$skipGroup = 0;
|
|
}
|
|
else {
|
|
next;
|
|
}
|
|
}
|
|
|
|
if ($line =~ /^\/\/ --SECTION--[\ t]+END-OF-(FILE|LINE)[ \t]*$/) {
|
|
$foundEOL = 2;
|
|
$lastLine = undef;
|
|
}
|
|
|
|
if (! $foundEOL && $line =~ /^\/\/ Local Variables/) {
|
|
$foundEOL = 1;
|
|
}
|
|
|
|
if ($foundEOL != 0) {
|
|
if ($line =~ /^#endif/) {
|
|
$finalEndif = 1;
|
|
}
|
|
|
|
next;
|
|
}
|
|
|
|
if (defined $lastLine) {
|
|
print $out "$lastLine\n";
|
|
$lastLine = undef;
|
|
}
|
|
|
|
if ($line eq '/// @author Dr. O') {
|
|
$line = '/// @author Dr. Oreste Costa-Panaia';
|
|
}
|
|
|
|
if ($isJavaScript == 0) {
|
|
if ($line =~ /^#include <((Admin|ApplicationServer|Aql|Basics|Dipatcher|GeneralServer|GeoIndex|Handler|Hpdf|HttpServer|JsonParserX|LineClient|LineServer|Logger|Rest|ResultGenerator|Scheduler|Server|Session|SessionVoc|Snapshot|Variant|VocBase)\/.*)>/) {
|
|
$line = "#include \"$1\"";
|
|
}
|
|
}
|
|
|
|
if (! $preambleDone) {
|
|
if ($line =~ /^\/\/\/ \@file/) {
|
|
$headerSeen = 1;
|
|
$fileSeen = 1;
|
|
}
|
|
elsif ($line =~ /^\/\/\/ Copyright (\d\d\d\d) ArangoDB/) {
|
|
$headerSeen = 1;
|
|
|
|
my $y1 = "$1";
|
|
|
|
if ($y1 != $year) {
|
|
$line = "/// Copyright $y1-$year ArangoDB GmbH, Cologne, Germany"
|
|
}
|
|
|
|
$copyrightLines = $copyrightLines . $line . "\n";
|
|
}
|
|
elsif ($line =~ /^\/\/\/ Copyright (\d\d\d\d)-(\d\d\d\d) ArangoDB/) {
|
|
$headerSeen = 1;
|
|
|
|
my $y1 = "$1";
|
|
my $y2 = "$2";
|
|
|
|
if ($y2 != $year) {
|
|
$line = "/// Copyright $y1-$year ArangoDB GmbH, Cologne, Germany"
|
|
}
|
|
|
|
$copyrightLines = $copyrightLines . $line . "\n";
|
|
}
|
|
elsif ($line =~ /^\/\/\/ Copyright (\d\d\d\d) triAGENS/) {
|
|
$headerSeen = 1;
|
|
$copyrightLines = $copyrightLines . $line . "\n";
|
|
}
|
|
elsif ($line =~ /^\/\/\/ Copyright (\d\d\d\d)-(\d\d\d\d) triAGENS/) {
|
|
$headerSeen = 1;
|
|
$copyrightLines = $copyrightLines . $line . "\n";
|
|
}
|
|
elsif ($line =~ /^\/\/\/ \@author Copyright (\d\d\d\d).*ArangoDB/) {
|
|
$headerSeen = 1;
|
|
}
|
|
elsif ($line =~ /^\/\/\/ \@author Copyright (\d\d\d\d)-(\d\d\d\d).*ArangoDB/) {
|
|
$headerSeen = 1;
|
|
}
|
|
elsif ($line =~ /^\/\/\/ \@author Copyright.*triAGENS/) {
|
|
$headerSeen = 1;
|
|
}
|
|
elsif ($line =~ /^\/\/\/ \@author Copyright/) {
|
|
die "cannot parse copyright line '$line'";
|
|
}
|
|
elsif ($line =~ /^\/\/\/ \@author/) {
|
|
$headerSeen = 1;
|
|
$authorSeen = 1;
|
|
|
|
if ($line =~ /^\/\/\/ \@author ([^,]*),.*/) {
|
|
$line = "/// \@author $1";
|
|
}
|
|
}
|
|
elsif ($line =~ /^\/\/\/ DISCLAIMER/) {
|
|
$headerSeen = 1;
|
|
$disclaimerSeen = 1;
|
|
}
|
|
elsif ($line =~ /^\/\/\/ Copyright holder is /) {
|
|
$headerSeen = 1;
|
|
$holderSeen = 1;
|
|
next;
|
|
}
|
|
elsif ($line =~ /^\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/*$/) {
|
|
$line = "////////////////////////////////////////////////////////////////////////////////";
|
|
$breakLine = 1;
|
|
$guard = 1;
|
|
}
|
|
}
|
|
|
|
if ($disclaimerSeen && ! $holderSeen) {
|
|
next;
|
|
}
|
|
|
|
if (! $disclaimerDone && $disclaimerSeen && $holderSeen && ! $authorSeen && $line =~ /^\/\/\/ *$/) {
|
|
next;
|
|
}
|
|
|
|
if (! $disclaimerDone) {
|
|
if (($authorSeen && ! $disclaimerSeen) || $holderSeen) {
|
|
print $out "/// DISCLAIMER\n";
|
|
print $out "///\n";
|
|
|
|
print $out "$copyrightLines";
|
|
|
|
print $out "///\n";
|
|
print $out "$disclaimerText";
|
|
print $out "///\n";
|
|
print $out "/// Copyright holder is ArangoDB GmbH, Cologne, Germany\n";
|
|
print $out "///\n";
|
|
|
|
$disclaimerDone = 1;
|
|
}
|
|
}
|
|
|
|
if ($isHeaderFile) {
|
|
if ($guard == 1 && $line =~ /^#ifndef/) {
|
|
$line = "#ifndef $guardName";
|
|
$guard = 2;
|
|
}
|
|
|
|
if ($guard == 2 && $line =~ /^#define/) {
|
|
$line = "#define $guardName 1";
|
|
$guard = 0;
|
|
$preambleDone = 1;
|
|
}
|
|
}
|
|
|
|
$lastLine = $line;
|
|
}
|
|
|
|
if (defined $lastLine) {
|
|
print $out "$lastLine\n";
|
|
$lastLine = undef;
|
|
}
|
|
|
|
if ($finalEndif) {
|
|
print $out "#endif\n";
|
|
print $out "\n";
|
|
}
|
|
|
|
if (! $dryRun) {
|
|
close($out)
|
|
|| die "cannot close output file '$file.new'";
|
|
|
|
system("cmp", "-s", "$file", "$file.new");
|
|
|
|
if ($? == -1) {
|
|
die "failed to execute cmp command";
|
|
}
|
|
|
|
my $r = $? >> 8;
|
|
|
|
if ($r == 0) {
|
|
print STDERR "INFO no change in file '$file'\n";
|
|
unlink("$file.new");
|
|
}
|
|
elsif ($r == 1) {
|
|
print STDERR "INFO updating file '$file'\n";
|
|
|
|
rename("$file", "$file.old")
|
|
|| die "cannot rename input file '$file' to '$file.old'";
|
|
|
|
rename("$file.new", "$file")
|
|
|| die "cannot rename formatted file '$file.new' to '$file'";
|
|
}
|
|
else {
|
|
die "cmp returned $r";
|
|
}
|
|
}
|
|
}
|