FreeCalypso > hg > leo2moko-debug
diff g23m/system/busyb/tools/gen_optionSet.pl @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/system/busyb/tools/gen_optionSet.pl Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,149 @@ +#!perl -w +use strict; + +# import some modules +use File::Spec; + +# define global variables +my $inputDir=$ARGV[0]; +my $outOptionSetFile=$ARGV[1]; +my $pathSetDir=$ARGV[2]; +my $cfgFilesDir=$ARGV[3]; + +my %Symbols; +my @AoA_Pathes; +my %Conditions; + +if ($#ARGV < 0) { + print "usage: gen_optionSet <inputDir> <outputFile> <pathSetDir> <cfgFilesDir>\n"; + print "example: gen_optionSet busyb_integration busyb_integration/osFragment.xml x:/g23m/system/busyb x:/g23m/__out__/ssa_config\n"; + exit; +} + +# Find the target set files +# +my @osFiles = glob("$inputDir/*.os"); +$#osFiles >= 0 || die "No *.os files found\n"; + +# open the output files +# +open (OUT,">$outOptionSetFile")||die "can't open $outOptionSetFile \n"; + + +foreach (@osFiles) { + my $condition = calcConditionFromFileName($_); + + my $condString = $_; + $condString =~ /((\w|-)+)\.os/; + $condString = "config_$1"; + + # open the input file + # + open (IN,"<$_")||die "can't open $_ \n"; + + # read the input file + # + my $line; + while(defined($line = <IN>)) + { + # remove trailing \n + chomp($line); + if ($line =~ /^\[(\w+)\]\s*/) { + my @dirNames = split(/\s+/,$'); + foreach (@dirNames) { + my $dirName = calcRelativePathFromPathset ($_, $pathSetDir); + $Symbols{$1} .= "<condValue path=\"$dirName\" require=\"$condition\"/>\n"; + } + } + } + $Conditions{$condition} = $condString; +} + + + + + +# print the optionSet fragment +# +print OUT "<!-- This is a generated file! Do not change ! -->\n\n"; +print OUT "<!-- It's output is based on the information in the following files:\n"; +foreach (@osFiles) { + print OUT "\t$_\n"; +} +print OUT "\n<!-- All of it must be placed somewhere in a optionSet document! -->\n\n\n"; + + +#print OUT "<optionDef description=\"auto generated options - SSA_WCP_INCLUDES\" name=\"SSA_WCP_INCLUDES\">\n"; +#print OUT "<condOption name=\"include\">\n"; +#foreach (sort(keys (%Symbols))) { +# print OUT "<condValue valRef=\"$_.include\"/>\n"; +#} +#print OUT "</condOption></optionDef>\n"; + +print OUT "<optionDef description=\"auto generated options - CFG_INCLUDES\" name=\"CFG_INCLUDES\">\n"; +print OUT "<condOption name=\"include\">\n"; +foreach (keys (%Conditions)) { + my $path = calcRelativePathFromPathset($cfgFilesDir, $pathSetDir) . "\\" . $Conditions{$_}; + print OUT "<condValue path=\"$path\" require=\"$_\"/>\n"; +} +print OUT "</condOption></optionDef>\n\n"; + + +foreach (sort(keys (%Symbols))) { + print OUT "<optionDef description=\"auto generated options - $_\" name=\"$_\">\n"; + print OUT "<condOption name=\"include\">\n"; + print OUT "$Symbols{$_}"; + print OUT "</condOption></optionDef>\n\n"; +} + + +# close the files +# +close IN; +close OUT; + + +########################################### +# calculate the condition from the filename +# make aaa==1 & bbb==2 from aaa1_bbb2.ts +# +sub calcConditionFromFileName +{ +my $condition = ""; +my @cond; +my $i = 0; + +# remove directory part +my ($drive,$directories,$file); +($drive,$directories,$file) = File::Spec->splitpath($_[0]); + +# now remove file extension +$file =~ /\.\w*/; + +# now split the name into sub conditions e.g. aaa1 bbb2 +@cond = split(/_/,$`); + +foreach (@cond) { + while (s/([a-zA-Z0-9]+)-(\d+)//) { + $condition = $condition . "(" . $1 . "==" . $2 .")"; + defined($cond[++$i]) && ($condition = $condition . " && "); + } + } + $condition =~ s/ && $//; + return $condition; +} +########################################### + +######################################################## +# correct obscure behavior of File::Spec->abs2rel, +# which inserts a drive letter befor a relative path !!! +# +sub calcRelativePathFromPathset +{ + my ($drive,$directories,$file); + + ($drive,$directories,$file) = File::Spec->splitpath( File::Spec->abs2rel ($_[0], $_[1]) ); + + return File::Spec->catpath("",$directories,$file); +} +########################################################