204 lines
5.4 KiB
Perl
204 lines
5.4 KiB
Perl
#!/usr/bin/perl -w
|
|
|
|
# Copyright (c) 2004-2005 Nokia. All rights reserved.
|
|
|
|
use strict;
|
|
use lib "symbian";
|
|
|
|
do "sanity.pl" or die $@;
|
|
|
|
my %VERSION = %{ do "version.pl" or die $@ };
|
|
my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
|
|
my $R_V_SV = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
|
|
|
|
my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
|
|
@{ do "sdk.pl" or die $@ };
|
|
my $UID = do "uid.pl" or die $@;
|
|
my %PORT = %{ do "port.pl" or die $@ };
|
|
|
|
my $ARM = 'armv5';#'thumb'; # TODO
|
|
my $S60SDK = $ENV{S60SDK}; # from sdk.pl
|
|
my $S80SDK = $ENV{S80SDK}; # from sdk.pl
|
|
my $S90SDK = $ENV{S90SDK}; # from sdk.pl
|
|
|
|
my $UREL = $ENV{UREL}; # from sdk.pl
|
|
$UREL =~ s/-ARM-/$ARM/;
|
|
|
|
my $app = '!:\System\Apps\Perl';
|
|
my $lib = '!:\System\Libs';
|
|
|
|
my @target = @ARGV
|
|
? @ARGV
|
|
: (
|
|
"miniperl", "perl",
|
|
"perl${VERSION}dll", "perl${VERSION}lib",
|
|
"perl${VERSION}ext"
|
|
);
|
|
|
|
my %suffix;
|
|
@suffix{ "miniperl", "perl", "perl$VERSION" } = ( "exe", "exe", "dll", );
|
|
|
|
for my $target (@target) {
|
|
$target = "perl${VERSION}" if $target eq "perl${VERSION}dll";
|
|
|
|
my %copy;
|
|
my $pkg = "$target.pkg";
|
|
print "\nCreating $pkg...\n";
|
|
|
|
my $suffix = $suffix{$target} || "";
|
|
my $dst = $suffix eq "dll" ? $lib : $app;
|
|
|
|
my $srctarget = "$UREL\\$target.$suffix";
|
|
|
|
if ( $target =~ /^(miniperl|perl|perl${VERSION}(?:dll)?)$/ ) {
|
|
$copy{$srctarget} = "$dst\\$target.$suffix";
|
|
print "\t$target.$suffix\n";
|
|
}
|
|
if ( $target eq "perl${VERSION}lib" ) {
|
|
print "Libraries...\n";
|
|
|
|
print "\tConfig.pm\n";
|
|
$copy{"lib\\Config.pm"} =
|
|
"$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config.pm";
|
|
|
|
print "\tConfig_heavy.pl\n";
|
|
$copy{"xlib\\symbian\\Config_heavy.pl"} =
|
|
"$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config_heavy.pl";
|
|
|
|
print "\tDynaLoader.pm\n";
|
|
$copy{"ext\\DynaLoader\\DynaLoader.pm"} =
|
|
"$lib\\Perl\\$R_V_SV\\DynaLoader.pm";
|
|
|
|
print "\tErrno.pm\n";
|
|
$copy{"ext\\Errno\\Errno.pm"} = "$lib\\Perl\\$R_V_SV\\Errno.pm";
|
|
|
|
open( my $cfg, '<', "symbian/install.cfg" )
|
|
or die "$!: symbian/install.cfg: $!\n";
|
|
while (<$cfg>) {
|
|
next unless /^lib\s+(.+)/;
|
|
chomp;
|
|
my $f = $1;
|
|
unless (-f "lib/$f") {
|
|
warn qq[$0: No "lib/$f", skipping...\n];
|
|
next;
|
|
}
|
|
$f =~ s:/:\\:g;
|
|
$copy{"lib\\$f"} = "$lib\\Perl\\$R_V_SV\\$f";
|
|
print "\t$f\n";
|
|
}
|
|
close($cfg);
|
|
}
|
|
|
|
if ( $target eq "perl${VERSION}ext" ) {
|
|
my @lst = glob("symbian/*.lst");
|
|
print "Extensions...\n";
|
|
print "\t(none found)\n" unless @lst;
|
|
for my $lst (@lst) {
|
|
$lst =~ m:^symbian/(.+)\.:;
|
|
my $ext = $1;
|
|
$ext =~ s!-!::!g;
|
|
print "\t$ext\n";
|
|
if ( open( my $pkg, '<', $lst ) ) {
|
|
while (<$pkg>) {
|
|
if (m!^"(.+)"-"(.+)"$!) {
|
|
my ( $src, $dst ) = ( $1, $2 );
|
|
$copy{$src} = $dst;
|
|
}
|
|
else {
|
|
warn "$0: $lst: $.: unknown syntax\n";
|
|
}
|
|
}
|
|
close($pkg);
|
|
}
|
|
else {
|
|
warn "$0: $lst: $!\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
for my $file ( keys %copy ) {
|
|
warn "$0: $file does not exist\n" unless -f $file;
|
|
}
|
|
|
|
my @copy = map { qq["$_"-"$copy{$_}"] } sort keys %copy;
|
|
my $copy = join( "\n", @copy );
|
|
|
|
my %UID = (
|
|
"miniperl" => 0,
|
|
"perl" => 0,
|
|
"perl${VERSION}" => $UID + 0,
|
|
"perl${VERSION}dll" => $UID + 0,
|
|
"perl${VERSION}ext" => $UID + 1,
|
|
"perl${VERSION}lib" => $UID + 2,
|
|
"perlapp" => $UID + 3,
|
|
"perlrecog" => $UID + 4,
|
|
"perlappmin" => $UID + 5,
|
|
);
|
|
|
|
die "$0: target has no UID\n" unless defined $UID{$target};
|
|
|
|
my $uid = sprintf( "0x%08X", $UID{$target} );
|
|
|
|
my ( $MAJOR, $MINOR, $PATCH ) = ( 0, 0, 0 );
|
|
|
|
if ( $target =~ m:^perl$VERSION(dll|ext|lib)?$: ) {
|
|
my $pkg = defined $1 ? $1 : "dll";
|
|
$MAJOR = $PORT{$pkg}->{MAJOR};
|
|
$MINOR = $PORT{$pkg}->{MINOR};
|
|
$PATCH = $PORT{$pkg}->{PATCH};
|
|
}
|
|
|
|
die "$0: Bad version for $target\n"
|
|
unless defined $MAJOR
|
|
&& ( $MAJOR eq 0 || $MAJOR > 0 )
|
|
&& defined $MINOR
|
|
&& ( $MINOR eq 0 || $MINOR > 0 )
|
|
&& defined $PATCH
|
|
&& ( $PATCH eq 0 || $PATCH > 0 );
|
|
|
|
my $ProductId =
|
|
defined $S60SDK ?
|
|
qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
|
|
defined $S80SDK ?
|
|
qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
|
|
defined $S90SDK ?
|
|
qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] :
|
|
";Supports Series NN";
|
|
|
|
open PKG, '>', $pkg or die "$0: failed to create $pkg: $!\n";
|
|
print PKG <<__EOF__;
|
|
; \u$target installation script
|
|
;
|
|
; The supported languages
|
|
&EN;
|
|
;
|
|
; The installation name and header data
|
|
;
|
|
#{"\u$target"},($uid),$MAJOR,$MINOR,$PATCH
|
|
;
|
|
;Localised Vendor name
|
|
%{"Vendor-EN"}
|
|
;
|
|
; Private key and certificate (unused)
|
|
;
|
|
;* "\u$target.key", "\u$target.cer"
|
|
;
|
|
$ProductId
|
|
; The files to install
|
|
;
|
|
$copy
|
|
__EOF__
|
|
close PKG;
|
|
|
|
print "Created $pkg\n";
|
|
|
|
print "Running makesis...\n";
|
|
|
|
unlink("$target.sis");
|
|
|
|
system("makesis $pkg") == 0
|
|
|| die "$0: makesis $pkg failed: $!\n";
|
|
}
|
|
|
|
exit(0);
|