exampleapps/alfexstickers/sis/sisTool.pl
author hgs
Wed, 03 Nov 2010 19:29:22 +0200
changeset 64 9f8c0686fb49
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
hgs
parents:
diff changeset
     1
#
hgs
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
# All rights reserved.
hgs
parents:
diff changeset
     4
# This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
# which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
#
hgs
parents:
diff changeset
     9
# Initial Contributors:
hgs
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
#
hgs
parents:
diff changeset
    12
# Contributors:
hgs
parents:
diff changeset
    13
#
hgs
parents:
diff changeset
    14
# Description: 
hgs
parents:
diff changeset
    15
#
hgs
parents:
diff changeset
    16
hgs
parents:
diff changeset
    17
sub updateVersion ;
hgs
parents:
diff changeset
    18
sub signSis ;
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
my @args = @ARGV;
hgs
parents:
diff changeset
    21
# signing related variables
hgs
parents:
diff changeset
    22
my $certPath = "\\s60_RnD\\RD_RootCA";
hgs
parents:
diff changeset
    23
my $certificate = "rd.cer";
hgs
parents:
diff changeset
    24
my $key = "rd-key.pem";
hgs
parents:
diff changeset
    25
my $version = "10.1";
hgs
parents:
diff changeset
    26
my $packageFile = undef;
hgs
parents:
diff changeset
    27
my $sisFile = undef;
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
# path to copy signed sis (if optional -c argument used)
hgs
parents:
diff changeset
    30
my $copyPath = undef;
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
# 
hgs
parents:
diff changeset
    33
my $updateDllVersion = 0;
hgs
parents:
diff changeset
    34
    
hgs
parents:
diff changeset
    35
# print help if needed
hgs
parents:
diff changeset
    36
if ( scalar(@args) == 0 || 
hgs
parents:
diff changeset
    37
     $args[0] =~ /-[h,\?]/i )
hgs
parents:
diff changeset
    38
    {
hgs
parents:
diff changeset
    39
print <<HELP;
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
-------------------------------------------------------------------------
hgs
parents:
diff changeset
    42
======= Script for making and signing an installation (.sis) file =======
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
Usage: sisTool <package-file-w/o-ext> [-d<version>] [-c<destination-path>] 
hgs
parents:
diff changeset
    45
               [-s<stub-package-file-w/o-ext>]
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
 -d changes minor DLL version number - needed when eclipsing DLLs in ROM.
hgs
parents:
diff changeset
    48
 -c copies target file to specific destination
hgs
parents:
diff changeset
    49
 -s also creates stub SIS. File name is not needed if it same as base file
hgs
parents:
diff changeset
    50
    name followed by "_stub" (e.g. pkg files for eclipsing SIS and stub SIS
hgs
parents:
diff changeset
    51
    are component.pkg and component_stub.pkg respectively).
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
Examples:
hgs
parents:
diff changeset
    54
=========
hgs
parents:
diff changeset
    55
sisTool myPackage -d2
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
  Creates and signs(* 'myPackage.sis' from 'myPackage.pkg'.
hgs
parents:
diff changeset
    58
  Before creating sis file myPackage.pkg is searched for DLLs
hgs
parents:
diff changeset
    59
  and their version numbers are changed to 10.2 (i.e. minor
hgs
parents:
diff changeset
    60
  version is changed - default major version number is 10).
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
sisTool myPackage -d -s
hgs
parents:
diff changeset
    63
  
hgs
parents:
diff changeset
    64
  Same as first example but uses default minor version number (=1)
hgs
parents:
diff changeset
    65
  for DLLs, and creates stub sis with name myPackage_stub.sis.
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
                                                     
hgs
parents:
diff changeset
    68
(* Uses R&D certificate 'rd.cer' from \\S60\\s60_RnD\\RD_RootCA
hgs
parents:
diff changeset
    69
HELP
hgs
parents:
diff changeset
    70
    exit;
hgs
parents:
diff changeset
    71
    }
hgs
parents:
diff changeset
    72
$packageFile = shift;
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
foreach ( @args ) {
hgs
parents:
diff changeset
    75
    # check if dll version number should be updated
hgs
parents:
diff changeset
    76
    if ( /-d(\d+)?\b/ ) {
hgs
parents:
diff changeset
    77
        $version = $1 ;
hgs
parents:
diff changeset
    78
        $version = 1 if ( not defined $version );            
hgs
parents:
diff changeset
    79
        $updateDllVersion = 1;
hgs
parents:
diff changeset
    80
        }
hgs
parents:
diff changeset
    81
    # check if stub SIS should be created
hgs
parents:
diff changeset
    82
    elsif ( /-s((\w|\.|\\|_|:|-)+)?/ )
hgs
parents:
diff changeset
    83
        {
hgs
parents:
diff changeset
    84
        my $stubPkgFile = "${packageFile}_stub.pkg";
hgs
parents:
diff changeset
    85
        if ( defined $1 ) {
hgs
parents:
diff changeset
    86
            # user defined stub
hgs
parents:
diff changeset
    87
            $stubPkgFile = $1; 
hgs
parents:
diff changeset
    88
            $stubPkgFile = $stubPkgFile . ".pkg" if $stubPkgFile !~ /\.pkg$/; 
hgs
parents:
diff changeset
    89
            }        
hgs
parents:
diff changeset
    90
        my $cmd = "makesis -s $stubPkgFile";
hgs
parents:
diff changeset
    91
        print "\n";
hgs
parents:
diff changeset
    92
        system "$cmd";
hgs
parents:
diff changeset
    93
        print "\n";
hgs
parents:
diff changeset
    94
        }
hgs
parents:
diff changeset
    95
    $copyPath = $1 if /-c(\S+)/;
hgs
parents:
diff changeset
    96
    }
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
if ( defined($packageFile) ) {
hgs
parents:
diff changeset
    99
    ( -e "$packageFile.pkg" ) or die "package file '$packageFile' not found.\n";
hgs
parents:
diff changeset
   100
    
hgs
parents:
diff changeset
   101
    # Update version number of DLLs listed in pkg-file.
hgs
parents:
diff changeset
   102
    updateVersion if $updateDllVersion;
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
    my $cmd = "makesis $packageFile\.pkg\n";
hgs
parents:
diff changeset
   105
   
hgs
parents:
diff changeset
   106
    if ( !defined( $sisFile ) ) {
hgs
parents:
diff changeset
   107
        $sisFile = "$packageFile.sis";
hgs
parents:
diff changeset
   108
        }
hgs
parents:
diff changeset
   109
    #################
hgs
parents:
diff changeset
   110
    # Do create sis #
hgs
parents:
diff changeset
   111
    #################
hgs
parents:
diff changeset
   112
    
hgs
parents:
diff changeset
   113
    my $err = system "$cmd";
hgs
parents:
diff changeset
   114
    die "\nFailed making sis file $!" if $err;
hgs
parents:
diff changeset
   115
    signSis;
hgs
parents:
diff changeset
   116
    if ( defined( $copyPath ) )
hgs
parents:
diff changeset
   117
        {
hgs
parents:
diff changeset
   118
        system "xcopy $sisFile $copyPath 2>&1";
hgs
parents:
diff changeset
   119
        }
hgs
parents:
diff changeset
   120
    }
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
sub signSis {
hgs
parents:
diff changeset
   123
    # sign a sis file
hgs
parents:
diff changeset
   124
    my $signedFile = "${sisFile}S\.sis";
hgs
parents:
diff changeset
   125
    ( -e "$certPath\\$certificate" ) or die <<NOCERT;
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
    
hgs
parents:
diff changeset
   128
Certificate could not be found from $certPath\\$certificate
hgs
parents:
diff changeset
   129
Check and modifiy the path in line ~17 in the script if needed.
hgs
parents:
diff changeset
   130
NOCERT
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
    my $cmd = "signsis -s $packageFile.sis $signedFile $certPath\\$certificate $certPath\\$key";        
hgs
parents:
diff changeset
   133
    if ( system ( "$cmd" ) == 0 )
hgs
parents:
diff changeset
   134
        {        
hgs
parents:
diff changeset
   135
        # delete original unsigned sis file
hgs
parents:
diff changeset
   136
        system "del $sisFile";
hgs
parents:
diff changeset
   137
        system "ren $signedFile $sisFile";
hgs
parents:
diff changeset
   138
        print "\nSigned with R&D certificate\n";
hgs
parents:
diff changeset
   139
        if ( defined ( $copyPath ) ) {
hgs
parents:
diff changeset
   140
            # copy signed sis to specified directory
hgs
parents:
diff changeset
   141
            system "xcopy $sisFile $copyPath";
hgs
parents:
diff changeset
   142
            }
hgs
parents:
diff changeset
   143
        }        
hgs
parents:
diff changeset
   144
    }
hgs
parents:
diff changeset
   145
    
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
sub updateVersion {
hgs
parents:
diff changeset
   148
    open PACKAGE, "<$packageFile.pkg";    
hgs
parents:
diff changeset
   149
    foreach ( <PACKAGE> )
hgs
parents:
diff changeset
   150
        {
hgs
parents:
diff changeset
   151
        if ( /\"(.*?\.dll)\"/i ) 
hgs
parents:
diff changeset
   152
            {                        
hgs
parents:
diff changeset
   153
            system "elftran -version 10\.$version $1";
hgs
parents:
diff changeset
   154
            system "elftran -compressionmethod bytepair $1";
hgs
parents:
diff changeset
   155
            print STDOUT "\nUpdated version number of\n$1 to 10.$version\n";
hgs
parents:
diff changeset
   156
            }
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
    close PACKAGE;  
hgs
parents:
diff changeset
   159
    }