Commit | Line | Data |
27da23d5 |
1 | #!/usr/bin/perl -w |
2 | |
3 | # Copyright (c) 2004-2005 Nokia. All rights reserved. |
4 | |
5 | use strict; |
6 | use lib "symbian"; |
7 | |
e81465be |
8 | do "sanity.pl" or die $@; |
27da23d5 |
9 | |
e81465be |
10 | my %VERSION = %{ do "version.pl" or die $@ }; |
27da23d5 |
11 | my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}"; |
12 | my $R_V_SV = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}"; |
13 | |
ed76c0e4 |
14 | my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) = |
e81465be |
15 | @{ do "sdk.pl" or die $@ }; |
16 | my $UID = do "uid.pl" or die $@; |
17 | my %PORT = %{ do "port.pl" or die $@ }; |
27da23d5 |
18 | |
19 | my $ARM = 'thumb'; # TODO |
ed76c0e4 |
20 | my $S60SDK = $ENV{S60SDK}; # from sdk.pl |
21 | my $S80SDK = $ENV{S80SDK}; # from sdk.pl |
53d44271 |
22 | my $S90SDK = $ENV{S90SDK}; # from sdk.pl |
27da23d5 |
23 | |
24 | my $UREL = $ENV{UREL}; # from sdk.pl |
25 | $UREL =~ s/-ARM-/$ARM/; |
26 | |
27 | my $app = '!:\System\Apps\Perl'; |
28 | my $lib = '!:\System\Libs'; |
29 | |
30 | my @target = @ARGV |
31 | ? @ARGV |
32 | : ( |
33 | "miniperl", "perl", |
34 | "perl${VERSION}dll", "perl${VERSION}lib", |
35 | "perl${VERSION}ext" |
36 | ); |
37 | |
38 | my %suffix; |
39 | @suffix{ "miniperl", "perl", "perl$VERSION" } = ( "exe", "exe", "dll", ); |
40 | |
41 | for my $target (@target) { |
42 | $target = "perl${VERSION}" if $target eq "perl${VERSION}dll"; |
43 | |
44 | my %copy; |
45 | my $pkg = "$target.pkg"; |
46 | print "\nCreating $pkg...\n"; |
47 | |
48 | my $suffix = $suffix{$target} || ""; |
49 | my $dst = $suffix eq "dll" ? $lib : $app; |
50 | |
51 | my $srctarget = "$UREL\\$target.$suffix"; |
52 | |
53 | if ( $target =~ /^(miniperl|perl|perl${VERSION}(?:dll)?)$/ ) { |
54 | $copy{$srctarget} = "$dst\\$target.$suffix"; |
55 | print "\t$target.$suffix\n"; |
56 | } |
57 | if ( $target eq "perl${VERSION}lib" ) { |
58 | print "Libraries...\n"; |
59 | |
60 | print "\tConfig.pm\n"; |
61 | $copy{"lib\\Config.pm"} = |
62 | "$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config.pm"; |
63 | |
64 | print "\tConfig_heavy.pl\n"; |
65 | $copy{"xlib\\symbian\\Config_heavy.pl"} = |
66 | "$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config_heavy.pl"; |
67 | |
68 | print "\tDynaLoader.pm\n"; |
69 | $copy{"ext\\DynaLoader\\DynaLoader.pm"} = |
70 | "$lib\\Perl\\$R_V_SV\\DynaLoader.pm"; |
71 | |
72 | print "\tErrno.pm\n"; |
73 | $copy{"ext\\Errno\\Errno.pm"} = "$lib\\Perl\\$R_V_SV\\Errno.pm"; |
74 | |
75 | open( my $cfg, "symbian/install.cfg" ) |
76 | or die "$!: symbian/install.cfg: $!\n"; |
77 | while (<$cfg>) { |
78 | next unless /^lib\s+(.+)/; |
79 | chomp; |
80 | my $f = $1; |
76e603de |
81 | unless (-f "lib/$f") { |
82 | warn qq[$0: No "lib/$f", skipping...\n]; |
83 | next; |
84 | } |
27da23d5 |
85 | $f =~ s:/:\\:g; |
86 | $copy{"lib\\$f"} = "$lib\\Perl\\$R_V_SV\\$f"; |
87 | print "\t$f\n"; |
88 | } |
89 | close($cfg); |
90 | } |
91 | |
92 | if ( $target eq "perl${VERSION}ext" ) { |
93 | my @lst = glob("symbian/*.lst"); |
94 | print "Extensions...\n"; |
95 | print "\t(none found)\n" unless @lst; |
96 | for my $lst (@lst) { |
97 | $lst =~ m:^symbian/(.+)\.:; |
98 | my $ext = $1; |
99 | $ext =~ s!-!::!g; |
100 | print "\t$ext\n"; |
101 | if ( open( my $pkg, $lst ) ) { |
102 | while (<$pkg>) { |
103 | if (m!^"(.+)"-"(.+)"$!) { |
104 | my ( $src, $dst ) = ( $1, $2 ); |
105 | $copy{$src} = $dst; |
106 | } |
107 | else { |
108 | warn "$0: $lst: $.: unknown syntax\n"; |
109 | } |
110 | } |
111 | close($pkg); |
112 | } |
113 | else { |
114 | warn "$0: $lst: $!\n"; |
115 | } |
116 | } |
117 | } |
118 | |
119 | for my $file ( keys %copy ) { |
120 | warn "$0: $file does not exist\n" unless -f $file; |
121 | } |
122 | |
123 | my @copy = map { qq["$_"-"$copy{$_}"] } sort keys %copy; |
124 | my $copy = join( "\n", @copy ); |
125 | |
126 | my %UID = ( |
127 | "miniperl" => 0, |
128 | "perl" => 0, |
129 | "perl${VERSION}" => $UID + 0, |
130 | "perl${VERSION}dll" => $UID + 0, |
131 | "perl${VERSION}ext" => $UID + 1, |
132 | "perl${VERSION}lib" => $UID + 2, |
c7a4d1c0 |
133 | "perlapp" => $UID + 3, |
134 | "perlrecog" => $UID + 4, |
135 | "perlappmin" => $UID + 5, |
27da23d5 |
136 | ); |
137 | |
138 | die "$0: target has no UID\n" unless defined $UID{$target}; |
139 | |
140 | my $uid = sprintf( "0x%08X", $UID{$target} ); |
141 | |
142 | my ( $MAJOR, $MINOR, $PATCH ) = ( 0, 0, 0 ); |
143 | |
144 | if ( $target =~ m:^perl$VERSION(dll|ext|lib)?$: ) { |
145 | my $pkg = defined $1 ? $1 : "dll"; |
146 | $MAJOR = $PORT{$pkg}->{MAJOR}; |
147 | $MINOR = $PORT{$pkg}->{MINOR}; |
148 | $PATCH = $PORT{$pkg}->{PATCH}; |
149 | } |
150 | |
151 | die "$0: Bad version for $target\n" |
152 | unless defined $MAJOR |
153 | && ( $MAJOR eq 0 || $MAJOR > 0 ) |
154 | && defined $MINOR |
155 | && ( $MINOR eq 0 || $MINOR > 0 ) |
156 | && defined $PATCH |
157 | && ( $PATCH eq 0 || $PATCH > 0 ); |
158 | |
ed76c0e4 |
159 | my $ProductId = |
160 | defined $S60SDK ? |
161 | qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] : |
162 | defined $S80SDK ? |
163 | qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] : |
53d44271 |
164 | defined $S90SDK ? |
165 | qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] : |
ed76c0e4 |
166 | ";Supports Series NN"; |
167 | |
27da23d5 |
168 | open PKG, ">$pkg" or die "$0: failed to create $pkg: $!\n"; |
169 | print PKG <<__EOF__; |
170 | ; \u$target installation script |
171 | ; |
172 | ; The supported languages |
173 | &EN; |
174 | ; |
175 | ; The installation name and header data |
176 | ; |
177 | #{"\u$target"},($uid),$MAJOR,$MINOR,$PATCH |
178 | ; |
179 | ; Private key and certificate (unused) |
180 | ; |
181 | ;* "\u$target.key", "\u$target.cer" |
182 | ; |
ed76c0e4 |
183 | $ProductId |
27da23d5 |
184 | ; The files to install |
185 | ; |
186 | $copy |
187 | __EOF__ |
188 | close PKG; |
189 | |
190 | print "Created $pkg\n"; |
191 | |
192 | print "Running makesis...\n"; |
193 | |
194 | unlink("$target.sis"); |
195 | |
196 | system("makesis $pkg") == 0 |
197 | || die "$0: makesis $pkg failed: $!\n"; |
198 | } |
199 | |
200 | exit(0); |