--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/configure.pl Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,167 @@
+#
+# 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:
+#
+
+my @rootdirs;
+open PIPE, "dir /b /ad \\ |";
+while (<PIPE>) {
+ my $dir=$_;
+# print;
+ chomp $dir;
+ unless (/^epoc32$/i) {
+ $dir="\\".$dir."\\*.bld";
+ push @rootdirs, $dir;
+ }
+}
+close PIPE;
+my %bldfiles;
+my $dir;
+foreach $dir (@rootdirs) {
+# print "$dir\n";
+ open PIPE, "dir /s /b $dir 2>NUL |";
+ while (<PIPE>) {
+ my %bldfileprops;
+ $bldfileprops{'fullname'}=lc $_;
+ /\\(\w+)\.bld$/;
+ my $name=lc $1;
+ $bldfileprops{'name'}=$name;
+ if (defined $bldfiles{$name}) {
+ die "Duplicate build file name $name\n";
+ }
+ $bldfiles{$name}=\%bldfileprops;
+ }
+ close PIPE;
+}
+
+my $bld;
+my @defaults;
+my @compulsory;
+foreach $bld (keys %bldfiles) {
+ my $ref=$bldfiles{$bld};
+ my $filename=$$ref{'fullname'};
+ chomp $filename;
+ my @options;
+ my @components;
+ open FILE, $filename or die "Could not open file $filename\n";
+ while (<FILE>) {
+ if (/^\!(\w+)$/) {
+ $$ref{lc $1}=1;
+ } elsif (/^\<option/i) {
+ push @options, $_;
+ } elsif (!/^\s*$/) {
+ push @components, $_;
+ }
+ }
+ close FILE;
+ $$ref{'options'}=\@options;
+ $$ref{'components'}=\@components;
+ if (!$$ref{'explicit'}) {
+ push @defaults, $bld;
+ }
+ if ($$ref{'compulsory'}) {
+ if ($$ref{'explicit'}) {
+ die "File $filename: can't be COMPULSORY and EXPLICIT\n";
+ }
+ push @compulsory, $bld;
+ }
+}
+
+my @todo_temp;
+my @omit;
+my $i;
+my $nargs=scalar(@ARGV);
+if ($nargs==0) {
+ @todo_temp=@defaults;
+} else {
+ @todo_temp=@compulsory;
+ for ($i=0; $i<$nargs; ++$i) {
+ my $name=lc($ARGV[$i]);
+ if ($name eq '+') {
+ foreach $bld (@defaults) {
+ push @todo_temp, $bld if (!grep {$bld eq $_} @todo_temp);
+ }
+ } elsif ($name=~/^\-(\w+)$/) {
+ if (defined $bldfiles{$1}) {
+ my $ref=$bldfiles{$1};
+ if ($$ref{'compulsory'}) {
+ die "Cannot omit $1\n";
+ }
+ push @omit, $1 if (!grep {$1 eq $_} @omit);
+ } else {
+ die "Unrecognised build $1\n";
+ }
+ } elsif (defined $bldfiles{$name}) {
+ push @todo_temp, $name if (!grep {$name eq $_} @todo_temp);
+ } else {
+ die "Unrecognised build $name\n";
+ }
+ }
+}
+
+#print join "\n",@todo_temp;
+#print "\n";
+
+my @todo;
+foreach $bld (@todo_temp) {
+ push @todo, $bld if (!grep {$bld eq $_} @omit);
+}
+
+#print join "\n",@todo;
+#print "\n";
+
+my @output1;
+my @output2;
+my $nvariants=0;
+foreach $bld (@todo) {
+ my $ref=$bldfiles{$bld};
+ next if ($nargs==0 && $$ref{'explicit'});
+ ++$nvariants if (!$$ref{'incremental'});
+ my $optref=$$ref{'options'};
+ my $compref=$$ref{'components'};
+ my $option;
+ my $component;
+ foreach $option (@$optref) {
+ $option=~s/\s+/ /;
+ if (!grep {$_ eq $option} @output1) {
+ push @output1, $option;
+ }
+ }
+ foreach $component (@$compref) {
+ $component=~s/\s+/ /;
+ if (!grep {$_ eq $component} @output2) {
+ push @output2, $component;
+ }
+ }
+}
+
+if ($nvariants==0) {
+ die "No variants specified for building\n";
+}
+
+@output1=sort @output1;
+@output2=sort @output2;
+
+my $output;
+foreach (@output1) {
+ $output.=$_;
+}
+$output.="\n";
+foreach (@output2) {
+ $output.=$_;
+}
+$output.="\n";
+
+print "\n\n$output";
+