This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
update t/porting/filenames.t to check for path components contaning two
[perl5.git] / symbian / makesis.pl
CommitLineData
27da23d5
JH
1#!/usr/bin/perl -w
2
3# Copyright (c) 2004-2005 Nokia. All rights reserved.
4
5use strict;
6use lib "symbian";
7
e81465be 8do "sanity.pl" or die $@;
27da23d5 9
e81465be 10my %VERSION = %{ do "version.pl" or die $@ };
27da23d5
JH
11my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
12my $R_V_SV = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
13
ed76c0e4 14my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
e81465be
NC
15 @{ do "sdk.pl" or die $@ };
16my $UID = do "uid.pl" or die $@;
17my %PORT = %{ do "port.pl" or die $@ };
27da23d5 18
d2651550 19my $ARM = 'armv5';#'thumb'; # TODO
ed76c0e4
JH
20my $S60SDK = $ENV{S60SDK}; # from sdk.pl
21my $S80SDK = $ENV{S80SDK}; # from sdk.pl
53d44271 22my $S90SDK = $ENV{S90SDK}; # from sdk.pl
27da23d5
JH
23
24my $UREL = $ENV{UREL}; # from sdk.pl
25$UREL =~ s/-ARM-/$ARM/;
26
27my $app = '!:\System\Apps\Perl';
28my $lib = '!:\System\Libs';
29
30my @target = @ARGV
31 ? @ARGV
32 : (
33 "miniperl", "perl",
34 "perl${VERSION}dll", "perl${VERSION}lib",
35 "perl${VERSION}ext"
36 );
37
38my %suffix;
39@suffix{ "miniperl", "perl", "perl$VERSION" } = ( "exe", "exe", "dll", );
40
41for 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
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";
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
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 ?
161qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
162 defined $S80SDK ?
163qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
53d44271
JH
164 defined $S90SDK ?
165qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] :
ed76c0e4
JH
166 ";Supports Series NN";
167
27da23d5
JH
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;
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
203exit(0);