sysdeftools/validate/checklinks.pl
branchHighFidelityModel
changeset 151 84b123918d3f
child 209 af20ebf91ca6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdeftools/validate/checklinks.pl	Tue Apr 06 10:25:29 2010 +0100
@@ -0,0 +1,108 @@
+# 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 the License "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;
+}