diff -r a9d4531388d0 -r d90029decf65 bldsystemtools/commonbldutils/InstallDevKit.pl --- a/bldsystemtools/commonbldutils/InstallDevKit.pl Wed Mar 31 23:20:42 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,732 +0,0 @@ -#!perl - -# InstallDevKit.pl - Source Code Integration Script - -# Copyright (c) 1997-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: -# Versions: -# 1.0 Initial -# -# - - -use strict; -use Win32::Registry; -use Getopt::Long; -use File::Path; -use File::Glob; - -my $Platform = ""; - - -# ------------------------------------- Global variables ----------------------------------- - -# main array. Each element contains: display text for this option -# list of DevKit packages to be installed by this option - - -my @AllTheOptions=( - ["GT source", - ["com.symbian.src.GT-general", - "com.symbian.src.GT-restricted-part1", - "com.symbian.src.GT-restricted-part2", - "com.symbian.src.GT-restricted-part3", - "com.symbian.src.GT-restricted-part4", - "com.symbian.src.GT-restricted-part5", - "com.symbian.src.GT-restricted-part6"], - - ["com.symbian.src.confidential", - "com.symbian.src.GT-confidential-networking"] ], - - - ["UI source", - ["com.symbian.src.TechView-restricted", - "com.symbian.src.TechView-general"], - - ["com.symbian.src.TechView-confidential-networking"] ], - - - ["GT WINS binaries", - ["com.symbian.api.GT-restricted", - "com.symbian.api.GT-shared", - "com.symbian.api.GT-wins", - "com.symbian.api.StrongCrypto", - - "com.symbian.bin.GT-restricted", - "com.symbian.bin.GT-restricted-data", - - "com.symbian.bin.GT-shared", - "com.symbian.bin.GT-shared-data", - - "com.symbian.bin.GT-wins-shared", - "com.symbian.bin.GT-wins-udeb", - "com.symbian.bin.GT-wins-urel", - - "com.symbian.bin.StrongCrypto-wins-udeb", - "com.symbian.bin.StrongCrypto-wins-urel", - - "com.symbian.debug.GT-wins", - - "com.symbian.tools.cpp", - "com.symbian.tools.cpp-custom", - "com.symbian.tools.java", - "com.symbian.tools.libraries", - "com.symbian.tools.shared", - "com.symbian.tools.shared-custom", - "com.symbian.tools.wins"], - - ["com.symbian.bin.GT-confidential", - "com.symbian.bin.TechView-confidential"] ], - - - ["GT WINSCW binaries", - ["com.symbian.api.GT-restricted", - "com.symbian.api.GT-winscw", - "com.symbian.api.GT-shared", - "com.symbian.api.StrongCrypto", - - "com.symbian.bin.GT-winscw-shared", - "com.symbian.bin.GT-winscw-udeb", - "com.symbian.bin.GT-winscw-urel", - - "com.symbian.bin.StrongCrypto-winscw-udeb", - "com.symbian.bin.StrongCrypto-winscw-urel", - - "com.symbian.bin.GT-restricted", - "com.symbian.bin.GT-restricted-data", - - "com.symbian.bin.GT-shared", - "com.symbian.bin.GT-shared-data", - - "com.symbian.debug.GT-winscw", - - "com.symbian.tools.cpp", - "com.symbian.tools.cpp-custom", - "com.symbian.tools.java", - "com.symbian.tools.libraries", - "com.symbian.tools.shared", - "com.symbian.tools.shared-custom", - "com.symbian.tools.winscw"], - - ["com.symbian.bin.GT-confidential", - "com.symbian.bin.TechView-confidential"] ], - - ["GT ARM binaries", - ["com.symbian.api.GT-restricted", - "com.symbian.api.GT-arm", - "com.symbian.api.GT-shared", - "com.symbian.api.StrongCrypto", - - "com.symbian.bin.GT-arm", - "com.symbian.bin.GT-arm-data", - - "com.symbian.bin.StrongCrypto-arm", - - "com.symbian.bin.GT-restricted", - "com.symbian.bin.GT-restricted-data", - - "com.symbian.bin.GT-shared", - "com.symbian.bin.GT-shared-data", - - "com.symbian.bin.GT-romimages", - - "com.symbian.tools.boardsupport", - "com.symbian.tools.cpp", - "com.symbian.tools.cpp-custom", - "com.symbian.tools.java", - "com.symbian.tools.libraries", - "com.symbian.tools.shared", - "com.symbian.tools.shared-custom", - "com.symbian.tools.arm"], - - ["com.symbian.bin.GT-confidential", - "com.symbian.bin.TechView-confidential"] ], - - - ["UI WINS binaries (needs GT to run)", - ["com.symbian.api.TechView-restricted", - "com.symbian.api.TechView-shared", - "com.symbian.api.TechView-wins", - - "com.symbian.debug.TechView-wins", - - "com.symbian.bin.TechView-wins-shared", - "com.symbian.bin.TechView-wins-udeb", - "com.symbian.bin.TechView-wins-urel", - - "com.symbian.bin.Techview-restricted", - "com.symbian.bin.Techview-restricted-data", - "com.symbian.bin.Techview-shared", - "com.symbian.bin.Techview-shared-data", - - "com.symbian.tools.cpp", - "com.symbian.tools.cpp-custom", - "com.symbian.tools.java", - "com.symbian.tools.libraries", - "com.symbian.tools.shared", - "com.symbian.tools.shared-custom", - "com.symbian.tools.wins"], - - [] ], - - - ["UI WINSCW binaries (needs GT to run)", - ["com.symbian.api.TechView-restricted", - "com.symbian.api.TechView-shared", - - "com.symbian.debug.TechView-winscw", - "com.symbian.api.TechView-winscw", - - "com.symbian.bin.TechView-winscw-shared", - "com.symbian.bin.TechView-winscw-udeb", - "com.symbian.bin.TechView-winscw-urel", - - "com.symbian.bin.Techview-restricted", - "com.symbian.bin.Techview-restricted-data", - "com.symbian.bin.Techview-shared", - "com.symbian.bin.Techview-shared-data", - - "com.symbian.tools.cpp", - "com.symbian.tools.cpp-custom", - "com.symbian.tools.java", - "com.symbian.tools.libraries", - "com.symbian.tools.shared", - "com.symbian.tools.shared-custom", - "com.symbian.tools.winscw"], - - [] ], - - - ["UI ARM binaries (needs GT to run)", - ["com.symbian.api.TechView-arm", - "com.symbian.api.TechView-restricted", - "com.symbian.api.TechView-shared", - - "com.symbian.bin.Techview-arm", - "com.symbian.bin.Techview-arm-data", - - "com.symbian.bin.Techview-restricted", - "com.symbian.bin.Techview-restricted-data", - "com.symbian.bin.Techview-shared", - "com.symbian.bin.Techview-shared-data", - - "com.symbian.bin.Techview-romimages", - - "com.symbian.tools.arm", - "com.symbian.tools.boardsupport", - "com.symbian.tools.cpp", - "com.symbian.tools.cpp-custom", - - "com.symbian.tools.java", - "com.symbian.tools.libraries", - "com.symbian.tools.shared", - "com.symbian.tools.shared-custom"], - - [] ], - - - - ["Documentation (html, examples, tool and source)", - ["com.symbian.doc.intro-pages", - "com.symbian.doc.sdl-connect-examples", - "com.symbian.doc.sdl-core", - "com.symbian.doc.sdl", - "com.symbian.doc.sdl-cpp-examples", - "com.symbian.doc.sdl-java-examples", - "com.symbian.doc.sdl-shared-examples", - "com.symbian.doc.system"], - - ["com.symbian.src.sdl", - "com.symbian.tools.xbuild"] ] - - - - ); - - -# Holds list of packages already installed -my %InstalledOptions=(); - - -my $UserChoices = ""; -my $DevKitPackagesDirectory = ""; -my $CustKitPackagesDirectory = ""; -my $TargetDirectory = ""; -my $InstallCustKit = ""; -my $BuildFromClean = 0; - -# start the program -main(); - - - - -# --------------------------------- Start of Main() ---------------------------------------- -sub main() -{ - if (@ARGV) - { - CommandLineInterface(); - } - else - { - UserInterface(); - } - - - # create target directory (copes with multiple-levels, not possible with unzip) - if ( ! (-e $TargetDirectory) ) - { - mkpath ($TargetDirectory); - } - - - # get user's options & sort numerically - my @ListOfUserChoices = sort { $a <=> $b } split(/ */, $UserChoices); - - # install options, ignoring duplicates - for (my $index = 0; $index < scalar(@ListOfUserChoices); $index++ ) - { - my $UserChoice = (@ListOfUserChoices)[$index]; - - if ( ($index > 0) && ($UserChoice eq (@ListOfUserChoices)[$index-1]) ) - { - next; # duplicate option and already dealt with it - } - - elsif ($UserChoice !~ /\d/) - { - print "\n\nIgnoring unrecognised option '$UserChoice' at index $index.\n"; - next; #invalid option - ignore - } - - - # install the option - print "\n\nInstalling option $UserChoice ($AllTheOptions[$UserChoice]->[0])\n"; - InstallOption($UserChoice); - - - } - - - - system("rd /q /s $TargetDirectory\\[sdkroot]") if (-e "$TargetDirectory\\[sdkroot]"); - - - CheckBuildPrerequisites(); - CheckKSA(); - CheckSupplementary(); - - #remove target directory at end of Devkit Install - print "\n\Removing target directory\n"; - system("rd /q /s $TargetDirectory"); - - - -} - -# --------------------------------- Start of CheckSupplementary() ---------------------------------------- - - -sub CheckSupplementary() -{#Call InstallSupplementaryKit.pl to test supplementary packages - my $scriptFileSupplementaryKits = "$ENV{ProductPath}\\SupplementaryProducts\\InstallSupplementaryKit.pl"; - my $JarFileDir = "$ENV{ProductPath}\\SupplementaryProducts"; - my $SuppTargetDirectory = "$TargetDirectory\\SuppKit"; - - if (-e $JarFileDir ) { - my @JarFiles = <$JarFileDir\\*.jar>; - if ( scalar(@JarFiles) > 0 ) { - foreach my $JarFile (@JarFiles) { - system("perl $scriptFileSupplementaryKits -p $Platform -t $SuppTargetDirectory -j $JarFile"); - } - } else { - print "Warning: No Supplementary Kits Packages exists in $JarFileDir \n"; - } - } else { - print "Warning: Supplementary Kits Path: $JarFileDir do not exist! \n"; - } -} - - -# --------------------------------- Start of CheckKSA() ---------------------------------------- - - -sub CheckKSA() -{#KSA files added in BuildKit::addKSA(); Only check the existence of Setup.exe - my $KSAFile="$DevKitPackagesDirectory\\Setup.exe"; - if ( ! ( -e $KSAFile ) ) - { - print "\n ERROR: KSA files does not exist: $KSAFile\n"; - die "ERROR: KSA files does not exist: $KSAFile \n"; - } -} - -# --------------------------------- Start of CheckBuildPrerequisites() ---------------------------------------- - - -sub CheckBuildPrerequisites() -# checks target system for: -# Perl 5 -# Java -# path environment variables: -# gcc/bin -# epoc32/tools -# vcvars having been executed (path to link.exe) - -{ - my $DisplayString = ""; - - my $RegObj = 0; - my $Value = ''; - my $Type = 0; - - my $REG_ACTIVE_PERL = "SOFTWARE\\ActiveState\\ActivePerl"; - my $REG_PERL_DIRECTORY = "SOFTWARE\\Perl"; - - my $REG_JAVA_RUNTIME = "SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.3"; # look for 1.3 - my $REG_JAVA_RUNTIME_HOME = "JavaHome"; - my $path = $ENV{"Path"}; - - - # Check Perl key - should be able to assume it's installed as this is a Perl script! - - # look for directory entry first - if ( ( $HKEY_LOCAL_MACHINE->Open("$REG_PERL_DIRECTORY", $RegObj) ) && ( $RegObj->QueryValueEx("", $Type, $Value) ) ) - { - if (! -e $Value) # { print " The Perl directory listed in the registry at $Value does not exist\n"; } - { - $DisplayString = $DisplayString . " Perl installation required\n"; - } - } - else - { - $DisplayString = $DisplayString . " Perl installation required\n"; - } - $RegObj->Close(); - - - # Check Java key - if ( (! $HKEY_LOCAL_MACHINE->Open("$REG_JAVA_RUNTIME", $RegObj) ) || (! $RegObj->QueryValueEx($REG_JAVA_RUNTIME_HOME, $Type, $Value) ) ) - { - $DisplayString = $DisplayString . " Java 1.3 installation required\n"; - } - $RegObj->Close(); - - - - # check whether vcvars has been run (can link.exe be found on path?) - my $success = 0; #FALSE - foreach my $Directory (split(/;/, $path)) - { - if ( ( $Directory =~ m/bin/i ) && (-e "$Directory\\link.exe") ) - { - $success = 1; #TRUE - } - } - if (!$success) - { - $DisplayString = $DisplayString . "Run vcvars.bat\n"; - } - - # print info if anything to show - if ( $DisplayString ne "" ) - { - print "\n\nBuild requirements:\n$DisplayString\n"; - } - - - - -} - -# --------------------------------- Start ofCommandLineInterface() ---------------------------------------- - - -sub CommandLineInterface() -{ - my $help; - if ( (GetOptions( "options|o=s" => \$UserChoices, - "custkit|c=s" => \$CustKitPackagesDirectory, - "devkit|d=s" => \$DevKitPackagesDirectory, - "target|t=s" => \$TargetDirectory, - "help|h|?" => \$help, - "buildfromclean|b" => \$BuildFromClean, - "platform|p=s" => \$Platform ) == 0 ) || ($help == 1) ) - { - Usage(); - exit; - } - - # check values received - - # user options - exit if not numeric or letter A - if ( $UserChoices !~ m/^[Aa0-8]+$/) - { - print "\n ERROR: Non-valid option(s) supplied: $UserChoices\n"; - die "ERROR: Non-valid option(s) supplied: $UserChoices\n"; - } - - - # check that DevKit is in stated directory, exit if not found - my @Packages = <$DevKitPackagesDirectory//com.symbian.devkit.*.sdkpkg>; - if ( scalar(@Packages) == 0 ) - { - print "\n ERROR: DevKit packages not found in directory: $DevKitPackagesDirectory\n"; - die "ERROR: DevKit packages not found in directory: $DevKitPackagesDirectory\n"; - } - - - - # check that target location to write extracted files to is empty or non-existant - - while ( (substr($TargetDirectory, -1, 1) eq '\\') || (substr($TargetDirectory, -1, 1) eq '/') ) - { - chop($TargetDirectory); # remove final backslashes - } - - my @contents = <$TargetDirectory/*.*>; - if ( ( (-e $TargetDirectory) && (scalar(@contents) > 0) ) || ($TargetDirectory eq "" ) ) - { - print "\n ERROR: Non-empty or unspecified target location: $TargetDirectory\n"; - die "ERROR: Non-empty or unspecified target location: $TargetDirectory\n"; - } - - - if ( ($Platform eq "") && ($ENV{'Platform'} eq "") ) - { - Usage(); - print "\nN.B. -platform required\n"; - exit; - } - elsif ( ($Platform eq "") ) - { - $Platform = $ENV{'Platform'} ; - } - - - - - # print values for clarification/logging - print " Installing options: $UserChoices \n"; - print " DevKit in directory: $DevKitPackagesDirectory \n"; - print " Installing to directory: $TargetDirectory \n"; - - - # convert A in user options to numbers(after displaying) - $UserChoices =~ s/[aA]/012345678/g; - -} - - -# --------------------------------- Start of UserInterface() ---------------------------------------- - - -sub UserInterface() -{ - print "\n------------------------------------------------------\n\n"; - my $index = 0; - while ($index < scalar(@AllTheOptions)) - { - # display option number and text for this option - print $index . ". ".$AllTheOptions[$index]->[0]."\n"; - $index++; - } - - print "\n------------------------------------------------------\n\n"; - - # get user's choice - must be numeric or 'A' for all - do - { - print "Enter option numbers to install (no separator) or A for [A]ll: "; - chomp($UserChoices = ); - if ($UserChoices =~ m/[aA]/) - { - $UserChoices = "012345678"; - } - } while ($UserChoices =~ m/[^\d]/) ; - - - # check that Kit is in this directory - my @Packages = ; - while ( scalar(@Packages) == 0 ) - { - # if not, get location of the packages - print "Enter path to the DevKit's packages (*.sdkpkg files) : "; - chomp( $DevKitPackagesDirectory = ); - @Packages = <$DevKitPackagesDirectory//com.symbian.devkit.*.sdkpkg> - } - - - - - # get location to write extracted files to - print "Enter directory to extract files to (must be new or empty): "; - - my $invalid = 1; #TRUE - - do # ensure directory doesn't exist or is empty - { - chomp( $TargetDirectory = ); - while ( (substr($TargetDirectory, -1, 1) eq '\\') || (substr($TargetDirectory, -1, 1) eq '/') ) - { - chop($TargetDirectory); # remove final backslashes - } - - my @contents = <$TargetDirectory/*.*>; - if ( $invalid = ( (-e $TargetDirectory) && (scalar(@contents) > 0) ) || ($TargetDirectory eq "" ) ) - { - print "Invalid selection - enter the name of an empty or new directory : "; - } - } while ( $invalid ) ; - - - # get Platform name - try environment, else ask user - if ($ENV{'Platform'} eq "") - { - print "Enter platform name : "; - chomp( $Platform = ); - } - else - { - $Platform = $ENV{'Platform'} ; - } - - - print "\n------------------------------------------------------\n\n"; - -} - - -# --------------------------------- Start of InstallOption() ---------------------------------------- - -sub InstallOption() -{ - my $Option = $_[0] ; - - # get array of DevKit packages for this option - my $Entry = $AllTheOptions[$Option]->[1]; - - - # for each package, call InstallPackage() to install the files - foreach my $Package (@$Entry) - { - if (! $InstalledOptions{$Package}) - { - $InstalledOptions{$Package} = $Option ; - print " Installing $Package\n"; - InstallPackage ( $Option, $Package, ); - } - else - { - print " Already got $Package\n"; - } - } -} - - -# --------------------------------- Start of InstallPackage() ---------------------------------------- - -sub InstallPackage() -{ - my $Option = $_[0] ; - my $Package = $_[1] ; - - # ensure package exists & is uniquely identified - - # try in DevKit directory first - my $PackageName = $DevKitPackagesDirectory."\\".$Package."_*sdkpkg"; - my @Packages = glob($PackageName); - - # ensure the package exists - if ( scalar(@Packages) == 0 ) - { - # not found, so try the CustKit directory - $PackageName = $CustKitPackagesDirectory."\\".$Package."_*sdkpkg"; - @Packages = glob($PackageName); - if ( scalar(@Packages) == 0 ) - { - print "\n ERROR: Package $Package not found. \n"; - die " ERROR: Package $Package not found. \n"; - } - elsif ( scalar(@Packages) > 1 ) - { - print "\n ERROR: Package $Package name matched duplicate CustKit files \n"; - die " ERROR: Package $Package name matched duplicate CustKit files \n"; - } - } - elsif ( scalar(@Packages) > 1 ) - { - print "\n ERROR: Package $Package name matched duplicate files \n"; - die " ERROR: Package $Package name matched duplicate files \n"; - } - - - # now able to start reading package & copying files - - if (-e $Packages[0]) - { - - system("unzip -q -o $Packages[0] -x package.xml -d \"$TargetDirectory\""); - - } - -} - - - - - - - - -# -------------------------- Start of makepath() ------------------------------ - -sub makepath($) - { - my ($path) = @_; - - if (-d $path) - { - return -1; - } - else - { - return mkpath($path); - } - } - - -# --------------------------------- Start of Usage() ---------------------------------------- - -sub Usage() -{ - print < path to directory containing CustKit packages - -d[evkit] path to directory containing DevKit packages - -o[ptions] 012345678A functionality options (A selects all) - -p[latform] build platform - used to create binaries installation directory path - -t[arget] path to directory to unpack Kit into - -ENDOFUSAGETEXT -}