diff -r 000000000000 -r 83f4b4db085c toolsandutils/productionbldtools/BAK/BuildBAK.pl --- /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: +sub SearchAndReplace($$$$) +{ + # read in file + open (FILE, "<$_[2]") or die "Couldn't open file $_[2]"; + my @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 < path to directory containing DevKit packages + -k[itbuildID] Kit build ID (e.g. 03651b_Symbian_OS_v9.1 or 02407 (v7.0s)) + -s[rcdef] full path and file name for the .srcdef file + -t[arget] path to directory to build BAK into + -v[ersion] 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); + +} + +