diff -r 22486c9c7b15 -r 378360dbbdba sbsv1/abld/group/setupprj.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv1/abld/group/setupprj.bat Wed Jun 30 11:35:58 2010 +0800 @@ -0,0 +1,542 @@ +@REM Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +@REM All rights reserved. +@REM This component and the accompanying materials are made available +@REM under the terms of "Eclipse Public License v1.0" +@REM which accompanies this distribution, and is available +@REM at the URL "http://www.eclipse.org/legal/epl-v10.html". +@REM +@REM Initial Contributors: +@REM Nokia Corporation - initial contribution. +@REM +@REM Contributors: +@REM +@REM Description: +@REM builds bld.bat files for subprojects within this component + +@if exist %0.bat perl -w -x %0.bat %1 %2 %3 %4 %5 +@if exist %0 perl -w -x %0 %1 %2 %3 %4 %5 +@GOTO End + +#!perl + +use strict; +use Cwd; + +my $EPOCRoot; + +BEGIN { + $EPOCRoot = $ENV{EPOCROOT}; + $EPOCRoot .= "\\" unless($EPOCRoot =~ /\\$/); + die "ERROR: Must set the EPOCROOT environment variable\n" if (!defined($EPOCRoot)); + $EPOCRoot =~ s-/-\\-go; # for those working with UNIX shells + die "ERROR: EPOCROOT must not be a UNC path\n" if ($EPOCRoot =~ /^\\\\/); + die "ERROR: EPOCROOT must end with a backslash\n" if ($EPOCRoot !~ /\\$/); + die "ERROR: EPOCROOT must specify an existing directory\n" if (!-d $EPOCRoot); +} + + +my $EPOCToolsPath="${EPOCRoot}epoc32\\tools"; + +my $EPOCToolsConfigFilePath="${EPOCRoot}epoc32\\tools\\compilation_config"; + +my $DocsPath="${EPOCRoot}epoc32\\EngDoc\\E32toolp"; + +my $TemplateFilePath="${EPOCRoot}epoc32\\tools\\makefile_templates"; + +my $ShellFilePath="${EPOCRoot}epoc32\\tools\\shell"; + +my $BinFilePath="${EPOCRoot}epoc32\\tools"; + +if (scalar @ARGV > 1) { + die "Too many arguments for setupprj.bat\n"; +} + +# only the secure platform is now supported, but keep the argument +# checking as insurance against future developments. +# +my $secure = 1; +if (scalar @ARGV == 1) { + my $option = $ARGV[0]; + if ($option !~ /^secure$/i) { + die "Unknown option $ARGV[0] - did you mean \"secure\"?\n"; + } +} + +my $GroupDir=$0; # $0 is this script +$GroupDir=~s-^\w:(.*)$-$1-o; # remove drive letter +$GroupDir=~s-\/-\\-go; +unless ($GroupDir=~m-^\\-o) + { + # $GroupDir is relative + my $Cwd=cwd(); + $Cwd=~s-^\w:(.*)$-$1-o; # remove drive letter + $Cwd=~s-\/-\\-go; + $Cwd=~s-^\\$--o; # make sure we don't end in a backslash + $GroupDir="$Cwd\\$GroupDir"; # append relative group dir to absolute Cwd + } +$GroupDir=~s-^(.*\\)[^\\]+$-$1-o; # remove filename, leaving just path +# strip the resulting path of excess occurrences of . and .. +while ($GroupDir=~s-\\\.\\-\\-go) { } +while ($GroupDir=~s-\\(?!\.{2}\\)[^\\]*\\\.{2}(?=\\)--go) { } + +$GroupDir=~s-\\$--o; # remove trailing backslash +chdir "$GroupDir" or die "Can't cd to $GroupDir: $!\n"; + +my %Files=(); + +# read the component +opendir E32TOOLP, ".." or die "ERROR: Can't open dir ..\n"; +my $SubDir; +foreach $SubDir (grep /^[^\.]/o, map lc $_, readdir E32TOOLP) { + if ($SubDir!~/^(group|doc|test|binutils|maksym)$/o) { + opendir SUBDIR, "..\\$SubDir" or die "ERROR: Can't open dir \"..\\$SubDir\"\n"; + my @FileList = map lc $_, readdir SUBDIR; + foreach my $file (grep /^[^_\.].+\.(pm|pl|bat|cmd|config|bsf|xml|cwlink|txt)$/o, @FileList) { + $Files{$file} = "$SubDir\\$file"; + } + if ($secure) { + # Look for additional files whose names start with _secure_ + my @securefiles = grep /^_secure_.+\.(pm|pl|bat|cmd|config|bsf|xml|cwlink|txt)$/o, @FileList; + foreach my $file (@securefiles) { + my $dstfile = $file; + $dstfile =~ s/^_secure_//; + if (defined($Files{$dstfile})) { + print "$dstfile: $SubDir\\$file overrides $Files{$dstfile}\n"; + } + $Files{$dstfile} = "$SubDir\\$file"; + } + } + } +} + +# read the compiler configuration files +my @ConfigFiles; + +opendir CONFIGDIR, "..\\platform" or die "ERROR: Can't open dir \"..\\platform\"\n"; +@ConfigFiles = grep /\.(mk|make)/i, readdir CONFIGDIR; + +closedir CONFIGDIR; + +opendir SUBDIR, "..\\doc" or die "ERROR: Can't open dir \"..\\doc\"\n"; +my @Docs = map lc $_, readdir SUBDIR; +@Docs = grep /^[^\.].+\.(rtf|doc|changes|txt|html|htm)$/o, @Docs; + +closedir SUBDIR; + +open TEMPLATEFILESUBDIR, "\"dir \/s \/b \/a-d ..\\..\\buildsystem\\extension\" |"; +my @TemplateFiles=(); +my %TemplateDirs; +while () + { + next if ($_ !~ /\.(mk|meta)$/i); + $_ =~ s/^.*\\buildsystem\\extension\\//i; + chomp $_; + push @TemplateFiles, $_; + $_ =~ /^(.*\\)/o; + my $path = $1; + $path =~ s/\\$//; + $TemplateDirs{$path}=1; + } +close TEMPLATEFILESUBDIR; + +opendir SHELLFILESUBDIR, "..\\..\\buildsystem\\shell" or die "ERROR: Can't open dir \"..\\..\\buildsystem\\shell\"\n"; +my @ShellFiles = map lc $_, readdir SHELLFILESUBDIR; +@ShellFiles = grep /^[^\.].+\.(mk)$/o, @ShellFiles; +closedir SHELLFILESUBDIR; + +open BINFILESUBDIR, "\"dir \/s \/b \/a-d ..\\..\\buildsystem\\bin\" |"; +my @BinFiles=(); +my %BinDirs; +while () + { + next if ($_ !~ /\.(exe|jar)$/i); + $_ =~ s/^.*\\buildsystem\\bin\\//i; + chomp $_; + push @BinFiles, $_; + $_ =~ /^(.*\\)/o; + my $path = $1; + $path =~ s/\\$//; + $BinDirs{$path}=1; + } +close BINFILESUBDIR; + +my $PrintGroupDir=$GroupDir; +$PrintGroupDir=~s-\\-\\\\-go; + +# Create BLD.BAT +my $OutTxt=''; +&Output( + "\@echo off\n", + "\@goto invoke\n", + "\n", + "#!perl\n", + "unless (\@ARGV==1 && \$ARGV[0]=~/^(deb|rel|clean|releasables)\$/io) {\n", + " die\n", + " \"E32TOOLP's bld.bat - usage\\n\",\n", + " \"BLD [param]\\n\",\n", + " \"where\\n\",\n", + " \"param = DEB or REL or CLEAN\\n\"\n", + " ;\n", + "}\n", + "my \$Param=lc \$ARGV[0];\n", + "chdir \"$PrintGroupDir\";\n", + "if (\$Param =~ /releasables/i)\n", + "{\n", + "open PIPE, \"..\\\\..\\\\make-abld\\\\make -s -f e32toolp.make \$Param |\" or die \"Can't invoke make: \$!\\n\";\n", + "while () { print \$_; }\n", + "close PIPE;\n", + "\n", + "exit;\n", + "}\n", + "print \"..\\\\..\\\\make-abld\\\\make -s -f e32toolp.make \$Param\\n\";\n", + "open PIPE, \"..\\\\..\\\\make-abld\\\\make -s -f e32toolp.make \$Param |\" or die \"Can't invoke make: \$!\\n\";\n", + "while () { }\n", + "close PIPE;\n", + "\n", + "__END__\n", + "\n", + ":invoke\n", + "perl -x $GroupDir\\bld.bat %1 %2\n" +); + +my $BLDFILE='bld.bat'; +print "Creating File \"$BLDFILE\"\n"; +open BLDFILE,">$BLDFILE" or die "\nERROR: Can't open or create Batch file \"$BLDFILE\"\n"; +print BLDFILE "$OutTxt" or die "\nERROR: Can't write output to Batch file \"$BLDFILE\"\n"; +close BLDFILE or die "\nERROR: Can't close Batch file \"$BLDFILE\"\n"; + + +# Create the make file +$OutTxt=''; +&Output( + "\n", + "ifeq (\$(OS),Windows_NT)\n", + "ERASE = \@erase 2>>nul\n", + "else\n", + "ERASE = \@erase\n", + "endif\n", + "\n", + "\n", + "$EPOCToolsPath :\n", + "\t\@perl -w ..\\genutil\\emkdir.pl $EPOCToolsPath\n", + "\n", + "$TemplateFilePath :\n", + "\t\@perl -w ..\\genutil\\emkdir.pl $TemplateFilePath\n", + "\n" +); + +foreach (sort keys %TemplateDirs) { + &Output( + "$TemplateFilePath\\$_ :\n", + "\t\@perl -w ..\\genutil\\emkdir.pl $TemplateFilePath\\$_\n", + "\n" + ); +} + +foreach (sort keys %BinDirs) { + &Output( + "$BinFilePath\\$_ :\n", + "\t\@perl -w ..\\genutil\\emkdir.pl $BinFilePath\\$_\n", + "\n" + ); +} + +&Output( + "$ShellFilePath :\n", + "\t\@perl -w ..\\genutil\\emkdir.pl $ShellFilePath\n", + "\n", + "$EPOCToolsConfigFilePath :\n", + "\t\@perl -w ..\\genutil\\emkdir.pl $EPOCToolsConfigFilePath\n", + "\n", + "$DocsPath :\n", + "\t\@perl -w ..\\genutil\\emkdir.pl $DocsPath\n", + "\n", + "\n", + "deb : $EPOCToolsPath $EPOCToolsConfigFilePath $DocsPath $TemplateFilePath $ShellFilePath " +); + +foreach (sort keys %TemplateDirs) { + &Output( + "$TemplateFilePath\\$_ " + ); +} + +foreach (sort keys %BinDirs) { + &Output( + "$BinFilePath\\$_ " + ); +} + +&Output("\n"); + +my $File; +foreach $File (keys %Files) { + &Output( + "\tcopy \"..\\$Files{$File}\" \"$EPOCToolsPath\\$File\" >nul\n" + ); +} + +my $ConfigFile; +foreach $ConfigFile (@ConfigFiles) { + &Output( + "\tcopy \"..\\platform\\$ConfigFile\" \"$EPOCToolsConfigFilePath\\$ConfigFile\" >nul\n" + ); +} + +foreach $File (@Docs) { + &Output( + "\tcopy \"..\\doc\\$File\" \"$DocsPath\\$File\" >nul\n" + ); +} + +my $tfile; +foreach $tfile (@TemplateFiles) { + &Output( + "\tcopy \"..\\..\\buildsystem\\extension\\$tfile\" \"$TemplateFilePath\\$tfile\" >nul\n" + ); +} + +my $bfile; +foreach $bfile (@BinFiles) { + &Output( + "\tcopy \"..\\..\\buildsystem\\bin\\$bfile\" \"$BinFilePath\\$bfile\" >nul\n" + ); +} + +my $sfile; +foreach $sfile (@ShellFiles) { + &Output( + "\tcopy \"..\\..\\buildsystem\\shell\\$sfile\" \"$ShellFilePath\\$sfile\" >nul\n" + ); +} + +&Output( + "\n", + "\n", + "rel : $EPOCToolsPath $EPOCToolsConfigFilePath $DocsPath $TemplateFilePath $ShellFilePath " +); + +foreach (sort keys %TemplateDirs) { + &Output( + "$TemplateFilePath\\$_ " + ); +} + +foreach (sort keys %BinDirs) { + &Output( + "$BinFilePath\\$_ " + ); +} + +&Output("\n"); + + +foreach $File (keys %Files) { + &Output( + "\t.\\perlprep.bat \"..\\$Files{$File}\" \"$EPOCToolsPath\\$File\"\n" + ); +} + +foreach $ConfigFile (@ConfigFiles) { + &Output( + "\tcopy \"..\\platform\\$ConfigFile\" \"$EPOCToolsConfigFilePath\\$ConfigFile\" >nul\n" + ); +} + +foreach $File (@Docs) { + &Output( + "\tcopy \"..\\doc\\$File\" \"$DocsPath\\$File\" >nul\n" + ); +} + +foreach $tfile (@TemplateFiles) { + &Output( + "\tcopy \"..\\..\\buildsystem\\extension\\$tfile\" \"$TemplateFilePath\\$tfile\" >nul\n" + ); +} +foreach $bfile (@BinFiles) { + &Output( + "\tcopy \"..\\..\\buildsystem\\bin\\$bfile\" \"$BinFilePath\\$bfile\" >nul\n" + ); +} +foreach $sfile (@ShellFiles) { + &Output( + "\tcopy \"..\\..\\buildsystem\\shell\\$sfile\" \"$ShellFilePath\\$sfile\" >nul\n" + ); +} +&Output( + "\n", + "rel deb : $EPOCToolsPath\\make.exe\n", + "$EPOCToolsPath\\make.exe: ..\\..\\make-abld\\make.exe\n", + "\tcopy \$\? \$\@\n" +); + +&Output( + "\n", + "rel deb : $EPOCToolsPath\\scpp.exe\n", + "$EPOCToolsPath\\scpp.exe: ..\\..\\scpp-abld\\scpp.exe\n", + "\tcopy \$\? \$\@\n" +); + + +&Output( + "\n", + "clean :\n" +); +foreach $File (keys %Files) { + &Output( + "\t-\$(ERASE) \"$EPOCToolsPath\\$File\"\n" + ); +} +foreach $ConfigFile (@ConfigFiles) { + &Output( + "\t-\$(ERASE) \"$EPOCToolsConfigFilePath\\$ConfigFile\"\n" + ); +} +foreach $File (@Docs) { + &Output( + "\t-\$(ERASE) \"$DocsPath\\$File\"\n" + ); +} +foreach $tfile (@TemplateFiles) { + &Output( + "\t-\$(ERASE) \"$TemplateFilePath\\$tfile\"\n" + ); +} +foreach $bfile (@BinFiles) { + &Output( + "\t-\$(ERASE) \"$BinFilePath\\$bfile\"\n" + ); +} +foreach $sfile (@ShellFiles) { + &Output( + "\t-\$(ERASE) \"$ShellFilePath\\$sfile\"\n" + ); +} + +&Output( + "\n", + "releasables :\n" +); +foreach $File (keys %Files) { + &Output( + "\t\@echo $EPOCToolsPath\\$File\n" + ); +} +foreach $ConfigFile (@ConfigFiles) { + &Output( + "\t\@echo $EPOCToolsConfigFilePath\\$ConfigFile\n" + ); +} +foreach $File (@Docs) { + &Output( + "\t\@echo $DocsPath\\$File\n" + ); +} +foreach $tfile (@TemplateFiles) { + &Output( + "\t\@echo $TemplateFilePath\\$tfile\n" + ); +} +foreach $bfile (@BinFiles) { + &Output( + "\t\@echo $BinFilePath\\$bfile\n" + ); +} +foreach $sfile (@ShellFiles) { + &Output( + "\t\@echo $ShellFilePath\\$sfile\n" + ); +} + +my $MAKEFILE="e32toolp.make"; +print "Creating File \"$MAKEFILE\"\n"; +open MAKEFILE,">$MAKEFILE" or die "\nERROR: Can't open or create Batch file \"$MAKEFILE\"\n"; +print MAKEFILE "$OutTxt" or die "\nERROR: Can't write output to Batch file \"$MAKEFILE\"\n"; +close MAKEFILE or die "\nERROR: Can't close Batch file \"$MAKEFILE\"\n"; + + + +# this code autocreates the .rel file + +my @ToolsDst = ("make.exe", "scpp.exe"); +my @DocsDst = @Docs; +my @ConfigFilesDst = @ConfigFiles; +my @TemplateFilesDst = @TemplateFiles; +my @BinFilesDst = @BinFiles; +my @ShellFilesDst = @ShellFiles; + +push @ToolsDst, keys %Files; + +# TOOLS.REL file + +my $RELFILE="tools.rel"; +print "Creating File \"$RELFILE\"\n"; +open RELFILE,">$RELFILE" or die "\nERROR: Can't open or create Rel file \"$RELFILE\"\n"; +print RELFILE "${EPOCRoot}epoc32\\tools\\"; +print RELFILE join("\n${EPOCRoot}epoc32\\tools\\", sort @ToolsDst); +print RELFILE join("\n${EPOCRoot}epoc32\\tools\\compilation_config\\","", sort @ConfigFilesDst); +print RELFILE join("\n${EPOCRoot}epoc32\\EngDoc\\E32toolp\\","", sort @DocsDst); +close RELFILE or die "\nERROR: Can't close Rel file \"$RELFILE\"\n"; + +# Check MRP file - the modern equivalent of tools.rel + +my $NewMRPText = "component tools_e32toolp\n"; +$NewMRPText .= "# This file is generated by setupprj.bat\n\n"; +$NewMRPText .= "ipr T\n"; +$NewMRPText .= "ipr O \\sf\\os\\buildtools\\sbsv1_os\\e32toolp\\binutils\n\n"; +$NewMRPText .= "source \\sf\\os\\buildtools\\sbsv1_os\\e32toolp\n"; +$NewMRPText .= "source \\sf\\os\\buildtools\\toolsandutils\\buildsystem\n"; +$NewMRPText .= join("\nbinary \\epoc32\\tools\\", "",sort @ToolsDst); +# Don't include EngDoc files in the MRP file +$NewMRPText .= join("\nbinary \\epoc32\\tools\\compilation_config\\","", sort @ConfigFilesDst); +$NewMRPText .= join("\nbinary \\epoc32\\tools\\makefile_templates\\","", sort @TemplateFilesDst); +$NewMRPText .= join("\nbinary \\epoc32\\tools\\","", sort @BinFilesDst); +$NewMRPText .= join("\nbinary \\epoc32\\tools\\shell\\","", sort @ShellFilesDst); +$NewMRPText .= "\n\n"; +$NewMRPText .= "notes_source \\component_defs\\release.src\n"; + +my $MRPFILE="abld.mrp"; +open MRPFILE,"<$MRPFILE" or die "\nERROR: Can't read MRP file \"$MRPFILE\"\n"; +my $OldMRPText = ""; +sysread MRPFILE, $OldMRPText, 100000; # assumes MRP file is less than 100,000 bytes +close MRPFILE or die "\nERROR: Can't close MRP file \"$MRPFILE\"\n"; + +if ($OldMRPText ne $NewMRPText) { + print "REMARK: MRP file \"$MRPFILE\" differs from setupprj.bat generated content\n"; + print "Creating suggested new MRP file \"$MRPFILE.new\"\n"; + open MRPFILE,">$MRPFILE.new" or die "\nERROR: Can't open or create MRP file \"$MRPFILE.new\"\n"; + print MRPFILE $NewMRPText; + close MRPFILE or die "\nERROR: Can't close MRP file \"$MRPFILE.new\"\n"; +} + + +# SUBROUTINE SECTION +#################### +sub Output (@) { + my $Txt; + foreach $Txt (@_) { + $OutTxt.=$Txt; + } +} + +sub UpToRoot ($) { #args: $_[0] Abs FilePath/Path +# return the path that will lead from the directory the path passed into the function +# specifies back up to the root directory + return undef unless $_[0]=~m-^\\-o; + my $Path=$_[0]; + my $UpP; + while ($Path=~m-\\-go) + { + $UpP.="..\\"; + } + undef $Path; + $UpP=~s-^(.*)\.\.\\-$1-o; + $UpP=".\\" unless $UpP; +} + + + +__END__ + +:End