1eval 'exec perl -wS $0 ${1+\"$@\"}' 2 if 0; 3 4#************************************************************** 5# 6# Licensed to the Apache Software Foundation (ASF) under one 7# or more contributor license agreements. See the NOTICE file 8# distributed with this work for additional information 9# regarding copyright ownership. The ASF licenses this file 10# to you under the Apache License, Version 2.0 (the 11# "License"); you may not use this file except in compliance 12# with the License. You may obtain a copy of the License at 13# 14# http://www.apache.org/licenses/LICENSE-2.0 15# 16# Unless required by applicable law or agreed to in writing, 17# software distributed under the License is distributed on an 18# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19# KIND, either express or implied. See the License for the 20# specific language governing permissions and limitations 21# under the License. 22# 23#************************************************************** 24 25 26 27BEGIN 28{ 29 # Adding the path of this script file to the include path in the hope 30 # that all used modules can be found in it. 31 $0 =~ /^(.*)[\/\\]/; 32 push @INC, $1; 33 # print "PATH: " . $1 . "\n"; 34} 35 36# my $e; 37# foreach $e (keys %ENV) 38# { 39# print "$e := $ENV{$e}" . "\n"; 40# } 41 42use strict; 43use graphical_compare; 44use ConvwatchHelper; 45use filehelper; 46use timehelper; 47use loghelper; 48 49use Cwd; 50use File::Basename; 51use Getopt::Long; 52use English; # $OSNAME, ... 53use File::Path; 54use Cwd 'chdir'; 55 56our $help; # Help option flag 57our $version; # Version option flag 58# our $test; 59 60# our $MAJOR; 61# our $MINOR; 62# our $cwsname; 63our $pool; 64our $document; 65our $creatortype; 66our $prepareonly = 0; 67our $force; 68our $verbose = 0; 69our $show = 0; 70our $connectionstring; 71 72# Prototypes 73sub print_usage(*); 74sub prepare(); 75sub CompareFiles($$); 76 77# flush STDOUT 78# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle 79# $| = 1; # perform flush after each write to STDOUT 80# select ($old_handle); # restore previously selected handle 81 82$OUTPUT_AUTOFLUSH=1; # works only if use English is used. 83 84our $version_info = 'compare.pl'; 85 86GetOptions( 87# "MAJOR=s" => \$MAJOR, 88# "MINOR=s" => \$MINOR, 89# "cwsname=s" => \$cwsname, 90 "pool=s" => \$pool, 91 "document=s" => \$document, 92 "creatortype=s" => \$creatortype, 93 "prepareonly=s" => \$prepareonly, 94 "connectionstring=s" => \$connectionstring, 95 96 "force" => \$force, 97 "verbose" => \$verbose, 98 "show" => \$show, 99 100# "test" => \$test, 101 "help" => \$help, 102 "version" => \$version 103 ); 104 105if ($help) 106{ 107 print_usage(*STDOUT); 108 exit(0); 109} 110# Check for version option 111if ($version) 112{ 113 print STDERR "$version_info\n"; 114 exit(0); 115} 116 117if ($prepareonly) 118{ 119 $force=1; 120} 121 122prepare(); 123if ($connectionstring) 124{ 125 setConnectionString($connectionstring); 126} 127 128my $sDocumentPool = appendPath(getProjectRoot(), "document-pool"); 129# print "ProjectRoot: " . getProjectRoot() . "\n"; 130if ($ENV{DOCUMENTPOOL}) 131{ 132 if ( -d $ENV{DOCUMENTPOOL}) 133 { 134 print "overwrite default Documentpool: '$sDocumentPool'\n"; 135 print " with \$ENV{DOCUMENTPOOL}: $ENV{DOCUMENTPOOL}\n"; 136 $sDocumentPool = $ENV{DOCUMENTPOOL}; 137 } 138 else 139 { 140 print "Given \$DOCUMENTPOOL doesn't exist.\n"; 141 } 142} 143 144my $err = 0; 145my $nCompareTime = getTime(); 146 147# if we want to check one file, give -pool and -document 148# if we want to check the whole pool, give -pool 149# if we want to check all, call without parameters 150if ($pool) 151{ 152 if ($document) 153 { 154 $err = SingleDocumentCompare( $sDocumentPool, 155 $pool, 156 $document, 157 $creatortype, 158 $prepareonly, 159 $show 160 ); 161 } 162 else 163 { 164 $err = CompareFiles($sDocumentPool, $pool); 165 } 166} 167else 168{ 169 local *DIR; 170 if (opendir (DIR, $sDocumentPool)) # Directory oeffnen 171 { 172 my $myfile; 173 while ($myfile = readdir(DIR)) 174 { # ein filename holen 175 if ($myfile eq "." || 176 $myfile eq "..") 177 { 178 next; 179 } 180 my $sDocumentPath = appendPath($sDocumentPool, $myfile); 181 if ( -d $sDocumentPath ) 182 { 183 $err += CompareFiles($sDocumentPool, $myfile); 184 } 185 elsif ( -f $sDocumentPath ) 186 { 187 print "Warning: the file '$myfile' will not compared.\n"; 188 } 189 } 190 closedir(DIR); 191 } 192 # my $sPool = "eis-chart"; 193 # $err += CompareFiles($sDocumentPool, "eis-chart"); 194 # $err += CompareFiles($sDocumentPool, "eis-impress"); 195 # $err += CompareFiles($sDocumentPool, "eis-writer"); 196 # $err += CompareFiles($sDocumentPool, "eis-calc"); 197 198} 199 200printTime(endTime($nCompareTime)); 201exit ($err); 202 203# ------------------------------------------------------------------------------ 204 205sub CompareFiles($$) 206{ 207 my $sDocumentPath = shift; 208 my $sPool = shift; 209 my %aFailedHash; 210 my $startdir = appendPath($sDocumentPath, $sPool); 211 212 local *DIR; 213 if (opendir (DIR, $startdir)) # Directory oeffnen 214 { 215 my $myfile; 216 while ($myfile = readdir(DIR)) 217 { # ein filename holen 218 if ($myfile eq "knownissues.xcl") 219 { 220 next; 221 } 222 my $sAbsoluteFile = appendPath($startdir, $myfile); 223 if (-f $sAbsoluteFile) 224 { 225 my $nIssue; 226 my $sIssueText; 227 ($nIssue, $sIssueText) = checkForKnownIssue($startdir, $myfile); 228 if ($nIssue == 0) 229 { 230 $err = SingleDocumentCompare( 231 # "/net/so-gfxcmp-documents.germany.sun.com/export/gfxcmp/document-pool", # $documentpoolpath, 232 $sDocumentPool, 233 $sPool, # $documentpool, 234 $myfile, # $documentname); 235 $creatortype, # $destinationcreatortype, 236 $prepareonly, 237 $show 238 ); 239 $aFailedHash{$myfile} = $err; 240 } 241 else 242 { 243 print "$myfile [KNOWN ISSUE: #$sIssueText#]\n"; 244 } 245 } 246 } 247 closedir(DIR); 248 } 249 250 print "***** State for graphical compare of pool: '$sPool' ******\n"; 251 my $nErrorCount = 0; 252 my $file; 253 foreach $file (keys %aFailedHash) 254 { 255 if ($aFailedHash{$file} != 0) 256 { 257 print "Failed: $file\n"; 258 $nErrorCount++; 259 } 260 } 261 print "Whole unit: "; 262 if ($nErrorCount > 0) 263 { 264 print "PASSED.FAILED\n"; 265 } 266 else 267 { 268 print "PASSED.OK\n"; 269 } 270 print "************************************************************\n"; 271 return $nErrorCount; 272} 273# ------------------------------------------------------------------------------ 274# return issue number if file exists in knownissues.xcl file 275sub checkForKnownIssue($$) 276{ 277 my $startdir = shift; 278 my $myfile = shift; 279 280 if ($force) 281 { 282 return 0,""; 283 } 284 285 my $sKnownIssueFile = appendPath($startdir, "knownissues.xcl"); 286 my $sIssueText = "unknown"; 287 local *ISSUES; 288 my $nIssue = 0; 289 my $sCurrentSection; 290 291 if (open(ISSUES, $sKnownIssueFile)) 292 { 293 my $line; 294 while ($line = <ISSUES>) 295 { 296 chomp($line); 297 if ($line =~ /\[(.*)\]/ ) 298 { 299 $sCurrentSection = $1; 300 next; 301 } 302 if ($sCurrentSection eq $creatortype) 303 { 304 if ($line =~ /\#\#\# (.*) \#\#\#/ ) 305 { 306 $sIssueText = $1; 307 } 308 if ($line =~ /^${myfile}$/ ) 309 { 310 $nIssue = 1; 311 last; 312 } 313 } 314 } 315 close(ISSUES); 316 } 317 return $nIssue, $sIssueText; 318} 319# ------------------------------------------------------------------------------ 320sub prepare() 321{ 322 # directory structure: 323 # documents will be found in 324 # ../document-pool/eis-tests 325 326 # references will be found in 327 # ../references/unxlngi/eis-tests 328 # ../references/wntmsci/eis-tests 329 330 # output goes to 331 # ../unxlngi6.pro/misc 332 333 if ($verbose) 334 { 335 setVerbose(); 336 } 337 338 # TEST 339 if (!$ENV{INPATH}) 340 { 341 if ($OSNAME eq "linux") 342 { 343 # just for debug 344 setINPATH("unxlngi6.pro"); 345 } 346 } 347 else 348 { 349 setINPATH($ENV{INPATH}); 350 } 351 352 if (! $creatortype) 353 { 354 $creatortype= "ps"; 355 } 356 357 my $cwd = getcwd(); 358 print "Current Directory: $cwd\n" if ($verbose); 359 my $sProjectBase; 360 if ($ENV{PRJ}) 361 { 362 # print "cwd:=$cwd\n"; 363 # print "PRJ:=$ENV{PRJ}\n"; 364 $sProjectBase = appendPath($cwd, $ENV{PRJ}); 365 } 366 else 367 { 368 $sProjectBase = dirname($cwd); 369 } 370 if ($OSNAME eq "cygwin") 371 { 372 $sProjectBase = `cygpath -w $sProjectBase`; 373 chomp($sProjectBase); 374 $sProjectBase = unixpath($sProjectBase); 375 # print "cygwin patch \$sProjectBase := $sProjectBase\n"; 376 } 377 # print "Project base path: $sProjectBase\n"; 378 setProjectRoot($sProjectBase); 379 380 381 # TEST TEST TEST 382 # exit (0); 383} 384# ------------------------------------------------------------------------------ 385sub print_usage(*) 386{ 387 local *HANDLE = $_[0]; 388 my $tool_name = basename($0); 389 390 print(HANDLE <<END_OF_USAGE); 391 392Usage: $tool_name [OPTIONS] 393 394 -pool Give pool name out of document-pool directory. 395 But all documents list in knownissues.xcl will not check. 396 -document Give a single document to test, the known issue list will ignored. 397 -creatortype=s s:ps create postscript files via print to file. 398 s:pdf create PDF file via export to pdf. 399 -h, --help Print this help, then exit 400 -v, --version Print version number, then exit 401 402END_OF_USAGE 403; 404} 405