From f189e00fb98f3f5cf5353c69ffe77f206304666b Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Thu, 27 Aug 2009 08:04:32 +0300 Subject: Support for template PKG file. This commit changes qmake to generate only one template pkg file, instead of one for each supported platform and build. Due to this change createpackage.bat script now need to be called with two additional parameters - platform and target. Example of needed changes: Instead of old way: >createpackage.bat [-i] pkgfile [certificate key [passphrase]] The new implementation works as: >createpackage.bat [-i] pkgfile platform build [certificate key [passphrase]] In addition createpackage.bat backend is replaced by createpackage.pl, it takes care of preprocesing the pkg file, i.e. expanding the variables with their values and calling the makesis and signsis with right parameters. Perl is used to make implementation more cross-platform. Task: 259037 RevBy: Miikka Heikkinen --- bin/createpackage.bat | 105 +------------- bin/createpackage.pl | 156 +++++++++++++++++++++ .../symbian/initprojectdeploy_symbian.cpp | 2 +- qmake/generators/symbian/symmake.cpp | 23 +-- qmake/generators/symbian/symmake.h | 2 +- 5 files changed, 165 insertions(+), 123 deletions(-) create mode 100644 bin/createpackage.pl diff --git a/bin/createpackage.bat b/bin/createpackage.bat index 116d52b..b5ede18 100644 --- a/bin/createpackage.bat +++ b/bin/createpackage.bat @@ -1,106 +1,3 @@ @echo off - -set installsigned_old=%installsigned% -set pkgfile_old=%pkgfile% -set basename_old=%basename% -set signsis1_old=%signsis1% -set signsis2_old=%signsis2% -set signsis3_old=%signsis3% -set unsigned_sis_name_old=%unsigned_sis_name% -set signed_sis_name_old=%signed_sis_name% -set scriptpath_old=%scriptpath% -set certificate_old=%certificate% - -rem Help text -if "%1"=="" ( - echo Convenience script for creating signed packages you can install on your phone. - echo Usage: createpackage.bat [-i] myexample_armv5_udeb.pkg [certificate key [passphrase]] - echo. - echo If no certificate and key files are provided, either a RnD certificate or - echo a self-signed certificate from Qt installation root directory is used. - echo. - echo To install the package right away using PC suite, use -i argument. - goto done -) - -if "%1"=="-i" ( - set installsigned=true - set pkgfile=%2 - set basename=%~n2 - set signsis1=%3 - set signsis2=%4 - set signsis3=%5 -) else ( - set installsigned=false - set pkgfile=%1 - set basename=%~n1 - set signsis1=%2 - set signsis2=%3 - set signsis3=%4 -) - -set unsigned_sis_name=%basename%_unsigned.sis -set signed_sis_name=%basename%.sis - -rem Get absolute path to this script set scriptpath=%~dp0 - -rem Check the .pkg actually exists. -if not exist %pkgfile% ( - echo Error: Package description file '%pkgfile%' does not exist. - goto done -) - -rem Remove any existing .sis packages -if exist %signed_sis_name% del %signed_sis_name% -if exist %unsigned_sis_name% del %unsigned_sis_name% - -rem Create .sis package -makesis %pkgfile% %unsigned_sis_name% - -rem If no certificate is given, check default options -if x%signsis1% == x ( - rem If RnD certificate is not found, sign with self signed certificate - if not exist %scriptpath%..\rd.cer ( - set certificate=Self signed - signsis %unsigned_sis_name% %signed_sis_name% %scriptpath%..\selfsigned.cer %scriptpath%..\selfsigned.key - goto install - ) - - rem Sign with RnD certificate - set certificate=RnD - signsis %unsigned_sis_name% %signed_sis_name% %scriptpath%..\rd.cer %scriptpath%..\rd-key.pem -) else ( - if x%signsis2% == x ( - echo Custom certificate key file parameter missing. - goto cleanup - ) - - set certificate=%signsis1% - signsis %unsigned_sis_name% %signed_sis_name% %signsis1% %signsis2% %signsis3% -) - -:install -if exist %signed_sis_name% ( - echo Successfully created %signed_sis_name% using certificate %certificate% - if "%installsigned%" == "true" ( - echo Installing %signed_sis_name%... - call %signed_sis_name% - ) -) - -:cleanup -if exist %unsigned_sis_name% del %unsigned_sis_name% - -:done - -set installsigned=%installsigned_old% -set pkgfile=%pkgfile_old% -set basename=%basename_old% -set signsis1=%signsis1_old% -set signsis2=%signsis2_old% -set signsis3=%signsis3_old% -set unsigned_sis_name=%unsigned_sis_name_old% -set signed_sis_name=%signed_sis_name_old% -set scriptpath=%scriptpath_old% -set certificate=%certificate_old% +perl %scriptpath%createpackage.pl %* \ No newline at end of file diff --git a/bin/createpackage.pl b/bin/createpackage.pl new file mode 100644 index 0000000..8501174 --- /dev/null +++ b/bin/createpackage.pl @@ -0,0 +1,156 @@ +#!\usr\bin\perl +############################################################################################ +# +# Convenience script for creating signed packages you can install on your phone. +# +# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +# Contact: Qt Software Information (qt-info@nokia.com) +# +############################################################################################ + +use strict; + +# use a command-line parsing module +use Getopt::Long; +# Use file name parsing module +use File::Basename; + +sub Usage() { + print "\n"; + print "==========================================================================================\n"; + print "Convenience script for creating signed packages you can install on your phone.\n"; + print "\n"; + print "Usage: createpackage.pl [-i] templatepkg platform target [certificate key [passphrase]]\n"; + print "\n"; + print "Where parameters are as follows:\n"; + print " [-i|install] = Install the package right away using PC suite\n"; + print " templatepkg = Name of .pkg file template\n"; + print " platform = One of the supported platform\n"; + print " GCCE | ARMV5 | ARMV6 | ARMV7\n"; + print " target = Either UDEB or UREL\n"; + print " certificate = The certificate file used for signing\n"; + print " key = The certificate's private key file\n"; + print " passphrase = The certificate's private key file's passphrase\n"; + print "\n"; + print "If no certificate and key files are provided, either a RnD certificate or\n"; + print "a self-signed certificate from Qt installation root directory is used.\n"; + print "\n"; + print "==========================================================================================\n"; + exit(); +} + +# Read given options +my $install = ""; +unless (GetOptions('i|install' => \$install)){ + Usage(); +} + +# Read params to variables +my $templatepkg = $ARGV[0]; +my $platform = uc $ARGV[1]; +my $target = uc $ARGV[2]; +my $visualtarget = $target; +$visualtarget =~ s/udeb/debug/i; +$visualtarget =~ s/urel/release/i; + +my $certificate = $ARGV[3]; +my $key = $ARGV[4]; +my $passphrase = $ARGV[5]; + +# Generate output pkg basename (i.e. file name without extension) +my $pkgoutputbasename = $templatepkg; +$pkgoutputbasename =~ s/_template\.pkg/_$visualtarget-$platform/g; +$pkgoutputbasename = lc($pkgoutputbasename); + +# Store output file names to variables +my $pkgoutput = lc($pkgoutputbasename.".pkg"); +my $unsigned_sis_name = $pkgoutputbasename."_unsigned.sis"; +my $signed_sis_name = $pkgoutputbasename.".sis"; + +# Store some utility variables +my $scriptpath = dirname(__FILE__); +my $certtext = $certificate; +my $certpath = $scriptpath; +$certpath =~ s-^(.*[^\\])$-$1\\-o; # ensure path ends with a backslash +$certpath = $certpath."../"; # certificates are one step up in hierarcy +$certpath =~ s-/-\\-go; # for those working with UNIX shells + +# Check some pre-conditions and print error messages if needed +unless (length($templatepkg) && length($platform) && length($target)) { + print "\nError: Template PKG filename, platform or target is not defined!\n"; + Usage(); +} + +# Check template exist +stat($templatepkg); +unless( -e _ ) { + print "\nError: Package description file '$templatepkg' does not exist!\n"; + Usage(); +} + +# Check certifcate preconditions and set default certificate variables if needed +if (length($certificate)) { + unless(length($key)) { + print "\nError: Custom certificate key file parameter missing.!\n"; + Usage(); + } +} else { + #If no certificate is given, check default options + $certtext = "RnD"; + $certificate = $certpath."rd.cer"; + $key = $certpath."rd-key.pem"; + + stat($certificate); + unless( -e _ ) { + $certtext = "Self Signed"; + $certificate = $certpath."selfsigned.cer"; + $key = $certpath."selfsigned.key"; + } +} + +# Remove any existing .sis packages +unlink $unsigned_sis_name; +unlink $signed_sis_name; +unlink $pkgoutput; + +# Preprocess PKG +local $/; +# read template file +open( TEMPLATE, $templatepkg) or die "Error '$templatepkg': $!\n"; +$_=