author | Simon Howkins <simonh@symbian.org> |
Tue, 11 Aug 2009 11:49:23 +0100 | |
changeset 344 | 348670fc497a |
parent 341 | 2ba361491037 |
child 961 | 94716c328941 |
permissions | -rw-r--r-- |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
1 |
#!perl -w |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
2 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
3 |
use strict; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
4 |
|
331
f7c6fc4239ac
Fixed paths and drives for executing script.
Simon Howkins <simonh@symbian.org>
parents:
330
diff
changeset
|
5 |
use FindBin; |
f7c6fc4239ac
Fixed paths and drives for executing script.
Simon Howkins <simonh@symbian.org>
parents:
330
diff
changeset
|
6 |
use lib "$FindBin::Bin/lib"; |
f7c6fc4239ac
Fixed paths and drives for executing script.
Simon Howkins <simonh@symbian.org>
parents:
330
diff
changeset
|
7 |
|
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
8 |
use XML::Parser; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
9 |
use Text::CSV; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
10 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
11 |
my $sourcesCSV = shift or die "First arg must be source csv file"; |
331
f7c6fc4239ac
Fixed paths and drives for executing script.
Simon Howkins <simonh@symbian.org>
parents:
330
diff
changeset
|
12 |
my $backupBaseDir = shift or die "Second arg must be path to tree of package_definitions to use if not found in the source packages"; |
f7c6fc4239ac
Fixed paths and drives for executing script.
Simon Howkins <simonh@symbian.org>
parents:
330
diff
changeset
|
13 |
shift and die "No more than two arguments please"; |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
14 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
15 |
# Load CSV |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
16 |
open my $csvText, "<", $sourcesCSV or die; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
17 |
my $csv = Text::CSV->new(); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
18 |
my @keys; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
19 |
my @packages; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
20 |
while (my $line = <$csvText>) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
21 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
22 |
chomp $line; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
23 |
next unless $line; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
24 |
unless ($csv->parse($line)) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
25 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
26 |
my $err = $csv->error_input(); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
27 |
die "Failed to parse line '$line': $err"; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
28 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
29 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
30 |
if (! @keys) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
31 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
32 |
# First line - note the column names |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
33 |
@keys = $csv->fields(); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
34 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
35 |
else |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
36 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
37 |
# Already got the keys, so get the data |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
38 |
my %package; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
39 |
# Read into a hash slice |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
40 |
@package{@keys} = $csv->fields(); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
41 |
push @packages, \%package; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
42 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
43 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
44 |
close $csvText; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
45 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
46 |
my $parser = new XML::Parser(Style => "Objects") or die; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
47 |
my $outTree; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
48 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
49 |
# For each package in CSV... |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
50 |
foreach my $package (@packages) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
51 |
{ |
335
15307a7772ea
If a package does not have a definition in the sources.csv then it won't get built, so don't try to incorporate it into the system definition.
Simon Howkins <simonh@symbian.org>
parents:
333
diff
changeset
|
52 |
# If the sources.csv does not include a sys def for this package, it doesn't get built |
15307a7772ea
If a package does not have a definition in the sources.csv then it won't get built, so don't try to incorporate it into the system definition.
Simon Howkins <simonh@symbian.org>
parents:
333
diff
changeset
|
53 |
next unless $package->{sysdef}; |
340
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
54 |
# If it's in the "backup" location, use that one (ie our copy overrides the package's own copy) |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
55 |
my $pkgDef = "$package->{dst}/$package->{sysdef}"; |
340
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
56 |
$pkgDef =~ s{^/sf/}{}; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
57 |
$pkgDef =~ s{/[^/]*$}{}; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
58 |
$pkgDef = "$backupBaseDir/$pkgDef/package_definition.xml"; |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
59 |
if (!-f $pkgDef) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
60 |
{ |
340
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
61 |
# Not there, so look for the pkg defn in the root of the package tree |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
62 |
warn "Warning: Package $package->{dst} does not appear on the local system\n" unless -d $package->{dst}; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
63 |
$pkgDef = "$package->{dst}/$package->{sysdef}"; |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
64 |
} |
333
7b0a774a0c87
Made error messages more useful.
Simon Howkins <simonh@symbian.org>
parents:
331
diff
changeset
|
65 |
die "Unable to locate any package_definition at all for $package->{dst}" unless -f $pkgDef; |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
66 |
|
344
348670fc497a
Added output of the package definition incorporated for each package.
Simon Howkins <simonh@symbian.org>
parents:
341
diff
changeset
|
67 |
warn "Including $pkgDef for $package->{dst}\n"; |
333
7b0a774a0c87
Made error messages more useful.
Simon Howkins <simonh@symbian.org>
parents:
331
diff
changeset
|
68 |
my $pkgTree = eval { $parser->parsefile($pkgDef) } or die "Failed to parse $pkgDef : $@"; |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
69 |
if (!$outTree) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
70 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
71 |
# The first file is taken verbatim |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
72 |
$outTree = $pkgTree; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
73 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
74 |
else |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
75 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
76 |
# Merge into output Tree |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
77 |
mergeTrees($outTree->[0], $pkgTree->[0]); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
78 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
79 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
80 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
81 |
# Output total tree |
340
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
82 |
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
83 |
printTree($outTree->[0]); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
84 |
print "\n"; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
85 |
|
340
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
86 |
exit; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
87 |
|
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
88 |
sub mergeTrees |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
89 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
90 |
my $baseTree = shift or die; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
91 |
my $extrasTree = shift or die; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
92 |
|
333
7b0a774a0c87
Made error messages more useful.
Simon Howkins <simonh@symbian.org>
parents:
331
diff
changeset
|
93 |
die ("Package Definitions do not match: ".(ref $baseTree)." vs ".(ref $extrasTree)) unless ref $baseTree eq ref $extrasTree; |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
94 |
return if ref $baseTree eq "main::Characters"; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
95 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
96 |
foreach my $extraChild (@{$extrasTree->{Kids}}) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
97 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
98 |
# Work out whether this child should be merged with a namesake, or appended |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
99 |
my $mergeIt = undef; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
100 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
101 |
my $extraChildTag = ref $extraChild; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
102 |
$extraChildTag =~ s{^main::}{}; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
103 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
104 |
if ($extraChildTag =~ m{^(SystemDefinition|systemModel)$}) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
105 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
106 |
# Should be merged if there's already one there |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
107 |
# Look for a namesake in the base |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
108 |
$mergeIt = matchTag($baseTree->{Kids}, $extraChild, undef); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
109 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
110 |
elsif ($extraChildTag =~ m{layer|block|package|collection|component}) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
111 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
112 |
# Should be merged if there is another tag with the same "name" attribute |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
113 |
# Look for a namesake in the base |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
114 |
$mergeIt = matchTag($baseTree->{Kids}, $extraChild, "name"); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
115 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
116 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
117 |
if ($mergeIt) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
118 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
119 |
# Merge children |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
120 |
mergeTrees($mergeIt, $extraChild); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
121 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
122 |
else |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
123 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
124 |
# Add this child |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
125 |
push @{$baseTree->{Kids}}, $extraChild; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
126 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
127 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
128 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
129 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
130 |
sub matchTag |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
131 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
132 |
my $peers = shift; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
133 |
my $outsider = shift; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
134 |
my $attr = shift; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
135 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
136 |
foreach my $peer (@$peers) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
137 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
138 |
if (ref $peer eq ref $outsider && (!defined $attr || $peer->{$attr} eq $outsider->{$attr})) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
139 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
140 |
return $peer; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
141 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
142 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
143 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
144 |
return undef; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
145 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
146 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
147 |
sub printTree |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
148 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
149 |
my $tree = shift or die; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
150 |
die unless ref $tree; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
151 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
152 |
my $tagName = ref $tree; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
153 |
$tagName =~ s{^main::}{}; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
154 |
if ($tagName eq "Characters") |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
155 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
156 |
print $tree->{Text}; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
157 |
return; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
158 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
159 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
160 |
print "<$tagName"; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
161 |
|
340
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
162 |
foreach my $attr ( |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
163 |
sort { |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
164 |
my $order = "name long-name tech_domain level span schema levels filter introduced deprecated purpose class plugin origin-model bldFile mrp version priority"; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
165 |
my $ixA = index $order, $a; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
166 |
my $ixB = index $order, $b; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
167 |
die "$a $b" if $ixA + $ixB == -2; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
168 |
$ixA - $ixB; |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
169 |
} |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
170 |
grep { |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
171 |
! ref $tree->{$_} |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
172 |
} |
aee074ee2646
Changed preference for selecting package definition files, so that it takes the one from our tree in preference to the one in the package itself. This means that we can just delete items from our tree when we're happy to switch to using the one in the package (as this will vary from package to package).
Simon Howkins <simonh@symbian.org>
parents:
335
diff
changeset
|
173 |
keys %$tree) |
329
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
174 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
175 |
print " $attr=\"$tree->{$attr}\""; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
176 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
177 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
178 |
my $children = $tree->{Kids}; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
179 |
if (scalar @$children) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
180 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
181 |
print ">"; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
182 |
foreach my $child (@$children) |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
183 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
184 |
printTree($child); |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
185 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
186 |
print "</$tagName"; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
187 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
188 |
else |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
189 |
{ |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
190 |
print "/" |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
191 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
192 |
|
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
193 |
print ">"; |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
194 |
} |
06c2c867c6ad
Added tool for collating a build definition from the set of package defintions indicated by the sources.csv
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
195 |