--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/toolsandutils/productionbldtools/BAK/BuildBAK.pl Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,382 @@
+#!perl
+
+# BuildBAK.pl
+
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "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:
+# Version Info:
+# Version 001: initial version
+#
+#
+
+use strict;
+use File::Copy;
+use Getopt::Long;
+use Cwd;
+
+
+# ------------------------------------- Global variables -----------------------------------
+
+
+my $DevKitPackagesDirectory = "";
+my $TargetDirectory = "";
+my $SrcDefFile = "";
+my $KitBuildID = "";
+my $Version="";
+my $oldLayoutIntroPages = 0; # FALSE
+
+# start the program
+main();
+
+
+
+
+
+# --------------------------------- Start of SearchAndReplace() ----------------------------
+#
+# Parameters: <search string> <replace string> <old file name> <new file name>
+sub SearchAndReplace($$$$)
+{
+ # read in file
+ open (FILE, "<$_[2]") or die "Couldn't open file $_[2]";
+ my @file = <FILE>;
+ close(FILE);
+
+ if ($_[3] eq $_[2])
+ {
+ unlink($_[2]);
+ }
+
+
+ open (FILE, ">$_[3]") or die "Couldn't create file $_[3]";
+
+ foreach my $line (@file)
+ {
+ $line =~ s/$_[0]/$_[1]/gi ;
+ print FILE $line ;
+ }
+ close(FILE);
+}
+
+
+# --------------------------------- CommandLineInterface() ----------------------------------------
+
+
+sub CommandLineInterface()
+{
+ my $help;
+ if ( (GetOptions( "devkit|d=s" => \$DevKitPackagesDirectory,
+ "target|t=s" => \$TargetDirectory,
+ "help|h|?" => \$help,
+ "srcdef|s=s" => \$SrcDefFile,
+ "version|v=s" => \$Version,
+ "kitbuildid|k=s" => \$KitBuildID ) == 0 ) || ($help == 1) )
+ {
+ Usage();
+ exit;
+ }
+
+
+ # check values received
+
+ # check that DevKit is in stated directory, exit if not found
+ my @Packages = <$DevKitPackagesDirectory/com.symbian.devkit.*.sdkpkg>;
+ if ( scalar(@Packages) == 0 )
+ {
+ die "DevKit packages not found in directory: $DevKitPackagesDirectory\n";
+ }
+
+
+ # check that target location to write extracted files to exists
+ while ( (substr($TargetDirectory, -1, 1) eq '\\') || (substr($TargetDirectory, -1, 1) eq '/') )
+ {
+ chop($TargetDirectory); # remove final backslashes
+ }
+ if (! -e $TargetDirectory)
+ {
+ mkdir $TargetDirectory;
+ }
+
+
+ # check that srcdef (*.srcdef) file exists
+ if ( ($SrcDefFile ne "") && (! -e $SrcDefFile) )
+ {
+ die ".srcdef file not found at: $SrcDefFile\n";
+ }
+
+
+ # check that version has been specified
+ if ($Version eq "")
+ {
+ die "Version number undefined\n";
+ }
+
+}
+
+# --------------------------------- Usage() ----------------------------------------
+
+sub Usage()
+{
+ print <<ENDOFUSAGETEXT;
+
+BUILDBAK.PL Version 1.0 Copyright (c) 2005 Symbian Software Ltd
+ All rights reserved
+
+Usage:
+ perl BuildBAK.pl [options]
+
+where options are:
+ -d[evkit] <path> path to directory containing DevKit packages
+ -k[itbuildID] <ID> Kit build ID (e.g. 03651b_Symbian_OS_v9.1 or 02407 (v7.0s))
+ -s[rcdef] <path> full path and file name for the .srcdef file
+ -t[arget] <path> path to directory to build BAK into
+ -v[ersion] <number> Symbian OS version number (e.g. 7.0s or 9.1)
+
+ENDOFUSAGETEXT
+}
+
+# --------------------------------- Start of CopyPreBuiltPackagesAndInstaller() ----------------------------------------
+
+sub CopyPreBuiltPackagesAndInstaller($$)
+{
+ # underscore required at end of filenames which may be ambiguous (i.e. com.symbian.bin.GT-arm_ and com.symbian.bin.GT-arm-data_)
+ my @Files=( "com.symbian.api.GT-arm_",
+ "com.symbian.api.GT-restricted_",
+ "com.symbian.api.GT-shared_",
+ "com.symbian.api.GT-winscw_",
+ "com.symbian.api.GT-wins_",
+ "com.symbian.api.TechView-arm_",
+ "com.symbian.api.TechView-restricted_",
+ "com.symbian.api.TechView-shared_",
+ "com.symbian.api.TechView-winscw_",
+ "com.symbian.api.TechView-wins_",
+ "com.symbian.bin.GT-arm-data_",
+ "com.symbian.bin.GT-arm_",
+ "com.symbian.bin.GT-restricted-data_",
+ "com.symbian.bin.GT-restricted_",
+ "com.symbian.bin.GT-shared-data_",
+ "com.symbian.bin.GT-shared_",
+ "com.symbian.bin.GT-wins-shared_",
+ "com.symbian.bin.GT-wins-udeb_",
+ "com.symbian.bin.GT-wins-urel_",
+ "com.symbian.bin.GT-winscw-shared_",
+ "com.symbian.bin.GT-winscw-udeb_",
+ "com.symbian.bin.GT-winscw-urel_",
+ "com.symbian.bin.TechView-arm-data_",
+ "com.symbian.bin.TechView-arm_",
+ "com.symbian.bin.TechView-restricted-data_",
+ "com.symbian.bin.TechView-restricted_",
+ "com.symbian.bin.TechView-shared-data_",
+ "com.symbian.bin.TechView-shared_",
+ "com.symbian.bin.TechView-wins-shared_",
+ "com.symbian.bin.TechView-wins-udeb_",
+ "com.symbian.bin.TechView-wins-urel_",
+ "com.symbian.bin.TechView-winscw-shared_",
+ "com.symbian.bin.TechView-winscw-udeb_",
+ "com.symbian.bin.TechView-winscw-urel_",
+ "com.symbian.bin.TechView-winscw_",
+ "com.symbian.bin.TechView-wins_",
+ "com.symbian.debug.GT-winscw_",
+ "com.symbian.debug.GT-wins_",
+ "com.symbian.debug.TechView-winscw_",
+ "com.symbian.debug.TechView-wins_",
+ "com.symbian.doc.intro-pages_",
+ "com.symbian.doc.sdl-cpp-examples_",
+ "com.symbian.doc.sdl-java-examples_",
+ "com.symbian.doc.sdl-shared-examples_",
+ "com.symbian.src.GT-general_",
+ "com.symbian.src.open_",
+ "com.symbian.tools.all-arm_",
+ "com.symbian.tools.all-shared_",
+ "com.symbian.tools.all-winscw_",
+ "com.symbian.tools.all-wins_",
+ "com.symbian.tools.arm_",
+ "com.symbian.tools.boardsupport_",
+ "com.symbian.tools.cpp-custom_",
+ "com.symbian.tools.cpp_",
+ "com.symbian.tools.java_",
+ "com.symbian.tools.libraries_",
+ "com.symbian.tools.shared-custom_",
+ "com.symbian.tools.shared_",
+ "com.symbian.tools.winscw_",
+ "com.symbian.tools.wins_",
+ # installer
+ "autorun.inf",
+ "data1.cab",
+ "data1.hdr",
+ "data2.cab",
+ "ikernel.ex_",
+ "layout.bin",
+ "Setup.exe",
+ "setup.inx",
+ "ReadMe.html");
+
+ print "Checking to see what files need copying...\n";
+
+ foreach my $file (@Files)
+ {
+ my @fullfilename = <$DevKitPackagesDirectory\\$file*>;
+ $fullfilename[0] =~ m/([^\\\/]*)$/i;
+ my $filename = $1;
+
+ if (! -e "$TargetDirectory\\$filename")
+ {
+ copy "$DevKitPackagesDirectory\\$filename", "$TargetDirectory\\$filename";
+ print " copied: $filename\n";
+ }
+ }
+
+}
+
+
+# --------------------------------- Start of WriteSetupIni() ----------------------------------------
+
+
+sub WriteSetupIni()
+{
+ # write setup.ini with current KitID
+
+ print "Writing setup.ini...\n";
+
+
+ open (FILE, ">$TargetDirectory\\setup.ini") or die "Couldn't open file $TargetDirectory\\setup.ini";
+
+ print FILE "[Startup]\n";
+ print FILE "FreeDiskSpace=0\n";
+ print FILE "AppName=Symbian OS Kit Installer\n";
+ print FILE "[Languages]\n";
+ print FILE "Default=0x0009\n";
+ print FILE "count=1\n";
+ print FILE "key0=0x0009\n";
+ print FILE "[Symbian]\n";
+ print FILE "KitID=$KitBuildID\n";
+ print FILE "TargetDirectory=Symbian\n";
+ print FILE "DiskSpaceRequirementMessage=Please note that a full installation of the Kit may require up to 2.0Gb of disk space on an NTFS partition or 2.5Gb on a FAT32 partition, in addition to around 500Mb of space in the system Temporary directory.\n";
+
+ close(FILE);
+}
+
+# --------------------------------- BuildChangedPackages() ----------------------------------------
+sub BuildChangedPackages()
+{
+ print "Building new packages...\n";
+
+ SearchAndReplace("X.X", $Version, "com.symbian.api.StrongCrypto.template", "com.symbian.api.StrongCrypto.pkgdef");
+ SearchAndReplace("X.X", $Version, "com.symbian.bak.bin.template", "com.symbian.bak.bin.pkgdef");
+ SearchAndReplace("X.X", $Version, "com.symbian.bak.doc-old.layout.template", "com.symbian.bak.doc.pkgdef") if ($oldLayoutIntroPages);
+ SearchAndReplace("X.X", $Version, "com.symbian.bak.doc.template", "com.symbian.bak.doc.pkgdef") if (!$oldLayoutIntroPages);
+ SearchAndReplace("X.X", $Version, "com.symbian.bak.src.template", "com.symbian.bak.src.pkgdef");
+ SearchAndReplace("X.X", $Version, "com.symbian.bak.tool.template", "com.symbian.bak.tool.pkgdef");
+
+ system ("buildpkg.exe -v -f -b $KitBuildID -k $KitBuildID com.symbian.api.StrongCrypto.pkgdef");
+ system ("buildpkg.exe -v -f -b $KitBuildID -k $KitBuildID com.symbian.bak.bin.pkgdef");
+ system ("buildpkg.exe -v -f -b $KitBuildID -k $KitBuildID com.symbian.bak.doc.pkgdef");
+ system ("buildpkg.exe -v -f -b $KitBuildID -k $KitBuildID com.symbian.bak.src.pkgdef");
+ system ("buildpkg.exe -v -f -b $KitBuildID -k $KitBuildID com.symbian.bak.tool.pkgdef");
+}
+
+
+# --------------------------------- BuildNewNavigationPages() ----------------------------------------
+
+
+sub BuildNewNavigationPages()
+{
+ print "Building new navigation pages...\n";
+
+ system ("rd [sdkroot] /s/q");
+
+ system ("unzip -q -o $DevKitPackagesDirectory\\com.symbian.doc.intro-pages_0_0* -x package.xml");
+ system ("copy start.html [sdkroot]\\doc");
+ system ("copy readme.html [sdkroot]\\doc\\documents") if (($Version !~ /^7\./) && ($Version !~ /^8\./)); # for v9 and later
+ system ("copy aboutdevkit*.gif [sdkroot]\\doc\\Graphics");
+ SearchAndReplace("X.X", $Version, "com.symbian.doc.intro-pages.template", "com.symbian.doc.intro-pages.pkgdef");
+ system ("buildpkg.exe -v -f -b $KitBuildID -k $KitBuildID com.symbian.doc.intro-pages.pkgdef");
+}
+
+
+
+# --------------------------------- BuildNewSrcDefFile() ----------------------------------------
+
+
+sub BuildNewSrcDefFile()
+{
+ SearchAndReplace("%version%", $KitBuildID, "DevKit.srcdef.template", "$KitBuildID.srcdef");
+}
+
+
+
+
+# --------------------------------- Main() ----------------------------------------
+
+sub main()
+{
+ # N.B. ensure path contains \epoc32\tools;\epoc32\gcc\bin;
+
+ CommandLineInterface();
+
+
+ $oldLayoutIntroPages = 1 if ($Version =~ /^7\./) || ($Version =~ /^8\.0/); # set TRUE for v8.0 and previous
+
+
+ # get required pre-built package definitions and installer
+ CopyPreBuiltPackagesAndInstaller($DevKitPackagesDirectory, $TargetDirectory);
+
+
+ # write the new setup.ini file
+ WriteSetupIni();
+
+
+ # build changed packages and move to target directory
+ BuildChangedPackages();
+
+
+ # build new navigation pages
+ BuildNewNavigationPages() if (!$oldLayoutIntroPages);
+
+
+ # move changed packages to target directory
+ foreach my $sdkpkg (<*.sdkpkg>)
+ {
+ if (move ($sdkpkg, $TargetDirectory) == 0)
+ { print $!; }
+ }
+ unlink <*.pkgdef>;
+
+
+ # build srcdef file for this Kit if necessary
+ my $SrcDefFilePreExisted = 1;
+ if ($SrcDefFile eq "")
+ {
+ BuildNewSrcDefFile();
+ my $dir = cwd;
+ $SrcDefFile = "$dir\\$KitBuildID.srcdef";
+ $SrcDefFilePreExisted = 0;
+ }
+
+
+ # copy the readme.html file and licence text to root of BAK
+ system ("copy [sdkroot]\\doc\\documents\\readme.html $TargetDirectory") if (!$oldLayoutIntroPages);
+ system ("copy [sdkroot]\\doc\\packages\\sdl7.0\\intro_pages\\readme.html $TargetDirectory") if ($oldLayoutIntroPages);
+ system ("copy licence.txt $TargetDirectory");
+
+
+ # create XML package source file
+ print "Creating XML source file...\n";
+ chdir $TargetDirectory;
+ system("createpkgsrc -s \"$SrcDefFile\"");
+ unlink $SrcDefFile if ($SrcDefFilePreExisted == 0);
+
+}
+
+