Commit | Line | Data |
---|---|---|
27da23d5 JH |
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 JH |
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 NC |
15 | @{ do "sdk.pl" or die $@ }; |
16 | my $UID = do "uid.pl" or die $@; | |
17 | my %PORT = %{ do "port.pl" or die $@ }; | |
27da23d5 | 18 | |
d2651550 | 19 | my $ARM = 'armv5';#'thumb'; # TODO |
ed76c0e4 JH |
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 JH |
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 | ||
1ae6ead9 | 75 | open( my $cfg, '<', "symbian/install.cfg" ) |
27da23d5 JH |
76 | or die "$!: symbian/install.cfg: $!\n"; |
77 | while (<$cfg>) { | |
78 | next unless /^lib\s+(.+)/; | |
79 | chomp; | |
80 | my $f = $1; | |
76e603de RGS |
81 | unless (-f "lib/$f") { |
82 | warn qq[$0: No "lib/$f", skipping...\n]; | |
83 | next; | |
84 | } | |
27da23d5 JH |
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"; | |
1ae6ead9 | 101 | if ( open( my $pkg, '<', $lst ) ) { |
27da23d5 JH |
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 JH |
133 | "perlapp" => $UID + 3, |
134 | "perlrecog" => $UID + 4, | |
135 | "perlappmin" => $UID + 5, | |
27da23d5 JH |
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 JH |
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 JH |
164 | defined $S90SDK ? |
165 | qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] : | |
ed76c0e4 JH |
166 | ";Supports Series NN"; |
167 | ||
1ae6ead9 | 168 | open PKG, '>', $pkg or die "$0: failed to create $pkg: $!\n"; |
27da23d5 JH |
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 | ; | |
d2651550 AR |
179 | ;Localised Vendor name |
180 | %{"Vendor-EN"} | |
181 | ; | |
27da23d5 JH |
182 | ; Private key and certificate (unused) |
183 | ; | |
184 | ;* "\u$target.key", "\u$target.cer" | |
185 | ; | |
ed76c0e4 | 186 | $ProductId |
27da23d5 JH |
187 | ; The files to install |
188 | ; | |
189 | $copy | |
190 | __EOF__ | |
191 | close PKG; | |
192 | ||
193 | print "Created $pkg\n"; | |
194 | ||
195 | print "Running makesis...\n"; | |
196 | ||
197 | unlink("$target.sis"); | |
198 | ||
199 | system("makesis $pkg") == 0 | |
200 | || die "$0: makesis $pkg failed: $!\n"; | |
201 | } | |
202 | ||
203 | exit(0); |