kernel/eka/configure.pl
changeset 0 a41df078684a
--- /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";
+