FreeCalypso > hg > leo2moko-debug
comparison 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 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:509db1a7b7b8 |
|---|---|
| 1 #!perl -w | |
| 2 use strict; | |
| 3 | |
| 4 # import some modules | |
| 5 use File::Spec; | |
| 6 | |
| 7 # define global variables | |
| 8 my $inputDir=$ARGV[0]; | |
| 9 my $outOptionSetFile=$ARGV[1]; | |
| 10 my $pathSetDir=$ARGV[2]; | |
| 11 my $cfgFilesDir=$ARGV[3]; | |
| 12 | |
| 13 my %Symbols; | |
| 14 my @AoA_Pathes; | |
| 15 my %Conditions; | |
| 16 | |
| 17 if ($#ARGV < 0) { | |
| 18 print "usage: gen_optionSet <inputDir> <outputFile> <pathSetDir> <cfgFilesDir>\n"; | |
| 19 print "example: gen_optionSet busyb_integration busyb_integration/osFragment.xml x:/g23m/system/busyb x:/g23m/__out__/ssa_config\n"; | |
| 20 exit; | |
| 21 } | |
| 22 | |
| 23 # Find the target set files | |
| 24 # | |
| 25 my @osFiles = glob("$inputDir/*.os"); | |
| 26 $#osFiles >= 0 || die "No *.os files found\n"; | |
| 27 | |
| 28 # open the output files | |
| 29 # | |
| 30 open (OUT,">$outOptionSetFile")||die "can't open $outOptionSetFile \n"; | |
| 31 | |
| 32 | |
| 33 foreach (@osFiles) { | |
| 34 my $condition = calcConditionFromFileName($_); | |
| 35 | |
| 36 my $condString = $_; | |
| 37 $condString =~ /((\w|-)+)\.os/; | |
| 38 $condString = "config_$1"; | |
| 39 | |
| 40 # open the input file | |
| 41 # | |
| 42 open (IN,"<$_")||die "can't open $_ \n"; | |
| 43 | |
| 44 # read the input file | |
| 45 # | |
| 46 my $line; | |
| 47 while(defined($line = <IN>)) | |
| 48 { | |
| 49 # remove trailing \n | |
| 50 chomp($line); | |
| 51 if ($line =~ /^\[(\w+)\]\s*/) { | |
| 52 my @dirNames = split(/\s+/,$'); | |
| 53 foreach (@dirNames) { | |
| 54 my $dirName = calcRelativePathFromPathset ($_, $pathSetDir); | |
| 55 $Symbols{$1} .= "<condValue path=\"$dirName\" require=\"$condition\"/>\n"; | |
| 56 } | |
| 57 } | |
| 58 } | |
| 59 $Conditions{$condition} = $condString; | |
| 60 } | |
| 61 | |
| 62 | |
| 63 | |
| 64 | |
| 65 | |
| 66 # print the optionSet fragment | |
| 67 # | |
| 68 print OUT "<!-- This is a generated file! Do not change ! -->\n\n"; | |
| 69 print OUT "<!-- It's output is based on the information in the following files:\n"; | |
| 70 foreach (@osFiles) { | |
| 71 print OUT "\t$_\n"; | |
| 72 } | |
| 73 print OUT "\n<!-- All of it must be placed somewhere in a optionSet document! -->\n\n\n"; | |
| 74 | |
| 75 | |
| 76 #print OUT "<optionDef description=\"auto generated options - SSA_WCP_INCLUDES\" name=\"SSA_WCP_INCLUDES\">\n"; | |
| 77 #print OUT "<condOption name=\"include\">\n"; | |
| 78 #foreach (sort(keys (%Symbols))) { | |
| 79 # print OUT "<condValue valRef=\"$_.include\"/>\n"; | |
| 80 #} | |
| 81 #print OUT "</condOption></optionDef>\n"; | |
| 82 | |
| 83 print OUT "<optionDef description=\"auto generated options - CFG_INCLUDES\" name=\"CFG_INCLUDES\">\n"; | |
| 84 print OUT "<condOption name=\"include\">\n"; | |
| 85 foreach (keys (%Conditions)) { | |
| 86 my $path = calcRelativePathFromPathset($cfgFilesDir, $pathSetDir) . "\\" . $Conditions{$_}; | |
| 87 print OUT "<condValue path=\"$path\" require=\"$_\"/>\n"; | |
| 88 } | |
| 89 print OUT "</condOption></optionDef>\n\n"; | |
| 90 | |
| 91 | |
| 92 foreach (sort(keys (%Symbols))) { | |
| 93 print OUT "<optionDef description=\"auto generated options - $_\" name=\"$_\">\n"; | |
| 94 print OUT "<condOption name=\"include\">\n"; | |
| 95 print OUT "$Symbols{$_}"; | |
| 96 print OUT "</condOption></optionDef>\n\n"; | |
| 97 } | |
| 98 | |
| 99 | |
| 100 # close the files | |
| 101 # | |
| 102 close IN; | |
| 103 close OUT; | |
| 104 | |
| 105 | |
| 106 ########################################### | |
| 107 # calculate the condition from the filename | |
| 108 # make aaa==1 & bbb==2 from aaa1_bbb2.ts | |
| 109 # | |
| 110 sub calcConditionFromFileName | |
| 111 { | |
| 112 my $condition = ""; | |
| 113 my @cond; | |
| 114 my $i = 0; | |
| 115 | |
| 116 # remove directory part | |
| 117 my ($drive,$directories,$file); | |
| 118 ($drive,$directories,$file) = File::Spec->splitpath($_[0]); | |
| 119 | |
| 120 # now remove file extension | |
| 121 $file =~ /\.\w*/; | |
| 122 | |
| 123 # now split the name into sub conditions e.g. aaa1 bbb2 | |
| 124 @cond = split(/_/,$`); | |
| 125 | |
| 126 foreach (@cond) { | |
| 127 while (s/([a-zA-Z0-9]+)-(\d+)//) { | |
| 128 $condition = $condition . "(" . $1 . "==" . $2 .")"; | |
| 129 defined($cond[++$i]) && ($condition = $condition . " && "); | |
| 130 } | |
| 131 } | |
| 132 $condition =~ s/ && $//; | |
| 133 return $condition; | |
| 134 } | |
| 135 ########################################### | |
| 136 | |
| 137 ######################################################## | |
| 138 # correct obscure behavior of File::Spec->abs2rel, | |
| 139 # which inserts a drive letter befor a relative path !!! | |
| 140 # | |
| 141 sub calcRelativePathFromPathset | |
| 142 { | |
| 143 my ($drive,$directories,$file); | |
| 144 | |
| 145 ($drive,$directories,$file) = File::Spec->splitpath( File::Spec->abs2rel ($_[0], $_[1]) ); | |
| 146 | |
| 147 return File::Spec->catpath("",$directories,$file); | |
| 148 } | |
| 149 ######################################################## |
