diff options
Diffstat (limited to 'bin')
-rw-r--r-- | bin/createpackage.bat | 106 | ||||
-rw-r--r-- | bin/patch_capabilities.pl | 107 |
2 files changed, 213 insertions, 0 deletions
diff --git a/bin/createpackage.bat b/bin/createpackage.bat new file mode 100644 index 0000000..116d52b --- /dev/null +++ b/bin/createpackage.bat @@ -0,0 +1,106 @@ +@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% diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl new file mode 100644 index 0000000..f1d94e0 --- /dev/null +++ b/bin/patch_capabilities.pl @@ -0,0 +1,107 @@ +####################################################################### +# +# A script for setting binary capabilities based on .pkg file contents. +# +# Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +# Contact: Nokia Corporation (qt-info@nokia.com) +# +####################################################################### + +my @capabilitiesToSet = ("LocalServices", "NetworkServices", "ReadUserData", "UserEnvironment", "WriteUserData"); + +# If arguments were given to the script, +if (@ARGV) +{ + # Parse the first given script argument as a ".pkg" file name. + my $pkgFileName = shift(@ARGV); + + # If the specified ".pkg" file exists (and can be read), + if (($pkgFileName =~ m|\.pkg$|i) && -r($pkgFileName)) + { + # If there are more arguments given, parse them as capabilities. + if (@ARGV) + { + @capabilitiesToSet = (); + while (@ARGV) + { + push (@capabilitiesToSet, pop(@ARGV)); + } + } + + # Start with no binaries listed. + my @binaries = (); + + my $tempPkgFileName = $pkgFileName."_@@TEMP@@"; + unlink($tempPkgFileName); + open (NEW_PKG, ">>".$tempPkgFileName); + open (PKG, "<".$pkgFileName); + + # Parse each line. + while (<PKG>) + { + my $line = $_; + my $newLine = $line; + if ( $line =~ m/^\#.*\(0x[0-9|a-f|A-F]*\).*$/) + { + $newLine =~ s/\(0x./\(0xE/; + } + print NEW_PKG $newLine; + + chomp ($line); + + # If the line specifies a file, parse the source and destination locations. + if ($line =~ m|\"([^\"]+)\"\s*\-\s*\"([^\"]+)\"|) + { + my $sourcePath = $1; + my $destinationPath = $2; + + # If the given file is a binary, check the target and binary type (+ the actual filename) from its path. + if ($sourcePath =~ m:/epoc32/release/([^/]+)/(udeb|urel)/(\w+(\.dll|\.exe)):i) + { + push (@binaries, $sourcePath); + } + } + } + + close (PKG); + close (NEW_PKG); + + unlink($pkgFileName); + rename($tempPkgFileName, $pkgFileName); + + print ("\n"); + + my $baseCommandToExecute = "elftran -vid 0x0 -capability \""; + if (@capabilitiesToSet) + { + $baseCommandToExecute .= join(" ", @capabilitiesToSet); + } + $baseCommandToExecute .= "\" "; + + # Actually set the capabilities of the listed binaries. + foreach my $binaryPath(@binaries) + { + # Create the command line for setting the capabilities. + my $commandToExecute = $baseCommandToExecute; + $commandToExecute .= $binaryPath; + + # Actually execute the elftran command to set the capabilities. + system ($commandToExecute." > NUL"); + print ("Executed ".$commandToExecute."\n"); + + ## Create another command line to check that the set capabilities are correct. + #$commandToExecute = "elftran -dump s ".$binaryPath; + } + + print ("\n"); + } +} +else +{ + print("This script can be used to set capabilities of all binaries\n"); + print("specified for deployment in a .pkg file.\n"); + print("If no capabilities are given, the binaries will be given the\n"); + print("capabilities supported by self-signed certificates.\n"); + print("\nUsage: patch_capabilities.pl pkg_filename [capability list]\n"); + print("\nE.g. patch_capabilities.pl myapp_armv5_urel.pkg \"All -TCB\"\n"); +} |