author | William Roberts <williamr@symbian.org> |
Sun, 27 Jun 2010 13:33:42 +0100 | |
branch | GCC_SURGE |
changeset 56 | 626366955efb |
parent 25 | 85578ba0aa08 |
child 63 | d706e2bc01db |
permissions | -rw-r--r-- |
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). # All rights reserved. # This component and the accompanying materials are made available # under the terms of "Eclipse Public License v1.0" # which accompanies this distribution, and is available # at the URL "http://www.eclipse.org/legal/epl-v10.html". # # Initial Contributors: # Nokia Corporation - initial contribution. # # Contributors: # # Description: # Script to validate the unit links in a system definition or package definition XML file use strict; if (! scalar @ARGV) {&help()} my $debug = 0; my $skipfilter; # skip anything with a named filter my $xslt = "../../../buildtools/bldsystemtools/buildsystemtools/joinsysdef.xsl"; my $xalan = "../../../buildtools/devlib/devlibhelp/tools/doc_tree/lib/apache/xalan.jar"; my $sysdef = shift; while($sysdef=~/^-/) { #arguments if($sysdef eq '-nofilter') {$skipfilter = shift} elsif($sysdef eq '-v') {$debug = 1} else { &help("Invalid command line option $sysdef")} $sysdef = shift; } my $dir = $sysdef; $dir =~ s,[^\\/]+$,,; my $root="../../../.."; my $full; if($sysdef=~/system_definition\.xml/) { # if running on a sysdef, ensure it's joined before continuing ($full = `java -jar $dir$xalan -in $sysdef -xsl $dir$xslt`) || die "bad XML syntax"; }else { # assume any other file has no hrefs to include (valid by convention) $root=''; open S, $sysdef; $full=join('',<S>); close S; } $full=~s/<!--.*?-->//sg; # remove all comments; my $count=1; my $filter = ''; foreach (split(/</,$full)) { # loop through all elements my $found = 0; if(/^component/) { # save the current filter so we know if we need to skip the named filter $filter=''; if(/filter="([^"]+)"/) {$filter=$1} } elsif(s/^unit//) { my $f=",$filter,"; # commas are the separators - safe to have extra ones for testing if(/filter="([^"]+)"/) {$f.=",$1,"} if($skipfilter ne '' && $f=~/,$filter,/) {next} # don't test anything with s60 filter if(/\smrp="(.*?)"/) { my $file = &fileLocation($1); if($debug) {print "MRP ",-s $file," $file\n"} # debug code if(!(-s $file)){ print STDERR "$count: Cannot find MRP file $file\n"; $found=1; } } if(/\sbldFile="(.*?)"/) { my $file = &fileLocation("$1/bld.inf"); if($debug) {print "Bld ",-s $file ," $file\n"} # debug code if(!(-s $file) ){ print STDERR "$count: Cannot find bld.inf file $file\n"; $found=1; } } if(/\sbase="(.*?)"/) { my $file = &fileLocation($1); if($debug) {print "Base $file\n"} # debug code if(!(-d $file) ){ print STDERR "$count: Cannot find base dir $file\n"; $found=1; } } } $count+=$found; } exit $count; sub fileLocation { my $file = "$dir$root$_[0]"; $file=~tr/\//\\/; while($file=~s/\\[^\\.]+\\\.\.\\/\\/){} return $file; } sub help { print "$0: ",($_[0] eq '' ? "syntax" : $_[0]); print "\nSyntax: [-v] [-nofilter filter] system_definition.xml Validate the unit links in a system definition or package definition XML file. This only prints errors in the files. If it exits silently, the links are all valid. Call with -nos60 filter to skip checking presence of fitler=\"s60\" units Requires system definition files to be in the standard location in deviceplatformrelease, and the presence of joinsysdef.xsl and xalan.jar in their expected locations. Package definition files can be anywhere."; exit 1; }