This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for 8348ac19a3c3
[perl5.git] / symbian / config.pl
CommitLineData
27da23d5
JH
1#!/usr/bin/perl -w
2
3# Copyright (c) 2004-2005 Nokia. All rights reserved.
a0fd4948 4# This utility is licensed under the same terms as Perl itself.
27da23d5
JH
5
6use strict;
7use lib "symbian";
8
9print "Configuring...\n";
10print "Configuring with: Perl version $] ($^X)\n";
11
e81465be 12do "sanity.pl" or die $@;
27da23d5 13
e81465be 14my %VERSION = %{ do "version.pl" or die $@ };
27da23d5
JH
15
16printf "Configuring for: Perl version $VERSION{REVISION}.%03d%03d\n",
17 $VERSION{VERSION}, $VERSION{SUBVERSION};
18
19my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
20my $R_V_SV = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
21
ed76c0e4 22my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
e81465be
NC
23 @{ do "sdk.pl" or die $@ };
24my %PORT = %{ do "port.pl" or die $@ };
27da23d5 25
ed76c0e4 26if ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') {
27da23d5
JH
27 ( $SYMBIAN_VERSION, $SDK_VERSION ) = qw(6.1 1.2);
28}
29
30my $WIN = $ENV{WIN} ; # 'wins', 'winscw' (from sdk.pl)
7df62229 31my $ARM = 'thumb'; # 'thumb', 'armv5'
27da23d5 32my $S60SDK = $ENV{S60SDK}; # qw(1.2 2.0 2.1 2.6) (from sdk.pl)
7df62229
AR
33 if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
34 $ARM = 'armv5'; # 'thumb', 'armv5' # Configuration for S60 5th Edition SDK v1.0
35 }
ed76c0e4 36my $S80SDK = $ENV{S80SDK}; # qw(2.0) (from sdk.pl)
53d44271 37my $S90SDK = $ENV{S90SDK}; # qw(1.1) (from sdk.pl)
25ca88e0 38my $UIQSDK = $ENV{UIQSDK}; # qw(2.0 2.1) (from sdk.pl)
27da23d5
JH
39
40my $UREL = $ENV{UREL}; # from sdk.pl
41$UREL =~ s/-ARM-/$ARM/;
42my $UARM = $ENV{UARM}; # from sdk.pl
43
44die "$0: SDK not recognized\n"
ed76c0e4
JH
45 if !defined($SYMBIAN_VERSION) ||
46 !defined($SDK_VERSION) ||
53d44271 47 (!defined($S60SDK) && !defined($S80SDK) && !defined($S90SDK) && !defined($UIQSDK));
27da23d5
JH
48
49die "$0: does not know which Windows compiler to use\n"
50 unless defined $WIN;
51
ed76c0e4 52print "Symbian $SYMBIAN_VERSION SDK $SDK_VARIANT $SDK_VERSION ($WIN) installed at $SYMBIAN_ROOT\n";
27da23d5 53
e81465be 54my $CWD = do "cwd.pl" or die $@;
27da23d5
JH
55print "Build directory $CWD\n";
56
ed76c0e4
JH
57die "$0: '+' in cwd does not work with Series 60 SDK 1.2\n"
58 if defined $S60SDK && $S60SDK eq '1.2' && $CWD =~ /\+/;
27da23d5
JH
59
60my @unclean;
61my @mmp;
62
63sub create_mmp {
64 my ( $target, $type, @x ) = @_;
65 my $miniperl = $target eq 'miniperl';
66 my $perl = $target eq 'perl';
67 my $mmp = "$target.mmp";
68 my $targetpath = $miniperl
69 || $perl ? "TARGETPATH\t\\System\\Apps\\Perl" : "";
1ae6ead9 70 if ( open( my $fh, '>', $mmp ) ) {
27da23d5
JH
71 print "\t$mmp\n";
72 push @mmp, $mmp;
73 push @unclean, $mmp;
74 print $fh <<__EOF__;
75TARGET $target.$type
76TARGETTYPE $type
7df62229
AR
77__EOF__
78 if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
79 print $fh "UID\t0 0xEA3E9181\n" if $miniperl;
80 print $fh "UID\t0 0xED04DD86\n" if $perl;
81 print $fh "UID\t0x1000008d 0xE8667302\n" unless $miniperl || $perl;
82 print $fh "CAPABILITY\tNONE\n";
83 } else {
84 print $targetpath;
85 print $fh "EPOCHEAPSIZE\t1024 8388608";
86 print $fh "EPOCSTACKSIZE\t65536";
87 }
88 print $fh <<__EOF__;
27da23d5
JH
89EXPORTUNFROZEN
90SRCDBG
91__EOF__
ed76c0e4 92 if ($SDK_VARIANT eq 'S60') {
7df62229
AR
93 print $fh "MACRO\t__SERIES60__\n";
94 print $fh "MACRO\t__SERIES60_1X__\n" if $S60SDK =~ /^1\./;
95 print $fh "MACRO\t__SERIES60_2X__\n" if $S60SDK =~ /^2\./;
96 print $fh "MACRO\t__SERIES60_3X__\n" if $S60SDK =~ /^5\./;
ed76c0e4
JH
97 }
98 if ($SDK_VARIANT eq 'S80') {
99 print $fh "MACRO\t__SERIES80__\n";
100 print $fh "MACRO\t__SERIES80_1X__\n" if $S80SDK =~ /^1\./;
101 print $fh "MACRO\t__SERIES80_2X__\n" if $S80SDK =~ /^2\./;
102 }
53d44271
JH
103 if ($SDK_VARIANT eq 'S90') {
104 print $fh "MACRO\t__SERIES90__\n";
105 }
25ca88e0
JH
106 if ($SDK_VARIANT eq 'UIQ') {
107 print $fh "MACRO\t__UIQ__\n";
108 print $fh "MACRO\t__UIQ_1X__\n" if $UIQSDK =~ /^1\./;
109 print $fh "MACRO\t__UIQ_2X__\n" if $UIQSDK =~ /^2\./;
110 }
27da23d5
JH
111 my ( @c, %c );
112 @c = map { glob } qw(*.c); # Find the .c files.
113 @c = map { lc } @c; # Lowercase the names.
114 @c = grep { !/malloc\.c/ } @c; # Use the system malloc.
115 @c = grep { !/main\.c/ } @c; # main.c must be explicit.
116 push @c, map { lc } @x;
117 @c = map { s:^\.\./::; $_ } @c; # Remove the leading ../
118 @c = map { $c{$_}++ } @c; # Uniquefy.
119 @c = sort keys %c; # Beautify.
120
121 for (@c) {
122 print $fh "SOURCE\t\t$_\n";
123 }
124 print $fh <<__EOF__;
125SOURCEPATH $CWD
126USERINCLUDE $CWD
127USERINCLUDE $CWD\\ext\\DynaLoader
128USERINCLUDE $CWD\\symbian
129SYSTEMINCLUDE \\epoc32\\include\\libc
130SYSTEMINCLUDE \\epoc32\\include
131LIBRARY euser.lib
132LIBRARY estlib.lib
d0d72822
JH
133LIBRARY eikcore.lib
134LIBRARY cone.lib
135LIBRARY efsrv.lib
27da23d5
JH
136__EOF__
137 if ( $miniperl || $perl || $type eq 'dll' ) {
138 print $fh <<__EOF__;
139LIBRARY charconv.lib
27da23d5
JH
140LIBRARY hal.lib
141LIBRARY estor.lib
142__EOF__
143 }
53d44271 144 if ($SDK_VARIANT =~ /^S[689]0$/) {
25ca88e0
JH
145 print $fh <<__EOF__;
146LIBRARY commonengine.lib
147__EOF__
148 }
d0d72822
JH
149 if (defined $S60SDK) {
150 print $fh <<__EOF__;
151LIBRARY avkon.lib
152LIBRARY commondialogs.lib
153__EOF__
154 }
53d44271 155 if ((defined $S80SDK) or (defined $S90SDK)) {
d0d72822
JH
156 print $fh <<__EOF__;
157LIBRARY eikctl.lib
158LIBRARY eikcoctl.lib
159LIBRARY eikdlg.lib
160LIBRARY ckndlg.lib
161__EOF__
162 }
163 if (defined $UIQSDK) {
164 print $fh <<__EOF__;
165LIBRARY eikctl.lib
166LIBRARY eikcoctl.lib
167LIBRARY eikdlg.lib
168LIBRARY qikctl.lib
169__EOF__
170 }
27da23d5
JH
171 if ( $type eq 'exe' ) {
172 print $fh <<__EOF__;
173STATICLIBRARY ecrt0.lib
174__EOF__
175 }
176 if ($miniperl) {
177 print $fh <<__EOF__;
178MACRO PERL_MINIPERL
179__EOF__
180 }
181 if ($perl) {
182 print $fh <<__EOF__;
183MACRO PERL_PERL
184__EOF__
185 }
186 print $fh <<__EOF__;
187MACRO PERL_CORE
188MACRO MULTIPLICITY
189MACRO PERL_IMPLICIT_CONTEXT
190__EOF__
191 unless ( $miniperl || $perl ) {
192 print $fh <<__EOF__;
193MACRO PERL_GLOBAL_STRUCT
194MACRO PERL_GLOBAL_STRUCT_PRIVATE
195__EOF__
7df62229
AR
196 }
197 unless ($miniperl || $perl ) {
198 if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
199 print $fh "START RESOURCE\tsymbian\\PerlUi.rss\nEND\n";
200 } else {
201 print $fh "RESOURCE\tsymbian\\PerlUi.rss";
202 }
203 }
27da23d5
JH
204 close $fh;
205 }
206 else {
207 warn "$0: failed to open $mmp for writing: $!\n";
208 }
209}
210
211sub create_bld_inf {
1ae6ead9 212 if ( open( BLD_INF, '>', 'bld.inf' ) ) {
27da23d5
JH
213 print "\tbld.inf\n";
214 push @unclean, "bld.inf";
215 print BLD_INF <<__EOF__;
216PRJ_PLATFORMS
217${WIN} ${ARM}
218PRJ_MMPFILES
219__EOF__
220 for (@mmp) { print BLD_INF $_, "\n" }
221 close BLD_INF;
222 }
223 else {
224 warn "$0: failed to open bld.inf for writing: $!\n";
225 }
226}
227
228my %config;
229
230sub load_config_sh {
1ae6ead9 231 if ( open( CONFIG_SH, '<', 'symbian/config.sh' ) ) {
27da23d5
JH
232 while (<CONFIG_SH>) {
233 if (/^(\w+)=['"]?(.*?)["']?$/) {
234 my ( $var, $val ) = ( $1, $2 );
235 $val =~ s/x.y.z/$R_V_SV/gi;
236 $val =~ s/thumb/$ARM/gi;
53d44271 237 $val = "C:$val" if (defined($S90SDK) and ($val =~ /^(\/|\\\\)system[\/\\]/i));
27da23d5
JH
238 $val = "'$SYMBIAN_VERSION'" if $var eq 'osvers';
239 $val = "'$SDK_VERSION'" if $var eq 'sdkvers';
240 $config{$var} = $val;
241 }
242 }
243 close CONFIG_SH;
244 }
245 else {
246 warn "$0: failed to open symbian\\config.sh for reading: $!\n";
247 }
248}
249
250sub create_config_h {
251 load_config_sh();
1ae6ead9 252 if ( open( CONFIG_H, '>', 'config.h' ) ) {
27da23d5
JH
253 print "\tconfig.h\n";
254 push @unclean, "config.h";
1ae6ead9 255 if ( open( CONFIG_H_SH, '<', 'config_h.SH' ) ) {
27da23d5
JH
256 while (<CONFIG_H_SH>) {
257 last if /\#ifndef _config_h_/;
258 }
259 print CONFIG_H <<__EOF__;
260/*
261 * Package name : perl
262 * Source directory : .
263 * Configuration time:
264 * Configured by :
265 * Target system : symbian
266 */
267
268#ifndef _config_h_
269__EOF__
270 while (<CONFIG_H_SH>) {
271 last if /!GROK!THIS/;
d0d72822 272 s/\$(\w+)/exists $config{$1} ? $config{$1} : (warn "$0: config.sh missing '$1'\n", "")/eg;
27da23d5
JH
273 s/^#undef\s+(\S+).+/#undef $1/g;
274 s:\Q/**/::;
275 print CONFIG_H;
276 }
277 close CONFIG_H_SH;
278 }
279 else {
280 warn "$0: failed to open ../config_h.SH for reading: $!\n";
281 }
282 close CONFIG_H;
283 }
284 else {
285 warn "$0: failed to open config.h for writing: $!\n";
286 }
287}
288
289sub create_DynaLoader_cpp {
290 print "\text\\DynaLoader\\DynaLoader.cpp\n";
291 system(
53d44271 292q[xsubpp ext\DynaLoader\dl_symbian.xs >ext\DynaLoader\DynaLoader.cpp]
27da23d5
JH
293 ) == 0
294 or die "$0: creating DynaLoader.cpp failed: $!\n";
295 push @unclean, 'ext\DynaLoader\DynaLoader.cpp';
296
297}
298
299sub create_symbian_port_h {
300 print "\tsymbian\\symbian_port.h\n";
1ae6ead9 301 if ( open( SYMBIAN_PORT_H, '>', 'symbian/symbian_port.h' ) ) {
ed76c0e4
JH
302 my ($sdkmajor, $sdkminor);
303 if ($SDK_VARIANT eq 'S60') {
304 $S60SDK =~ /^(\d+)\.(\d+)$/;
305 ($sdkmajor, $sdkminor) = ($1, $2);
306 }
307 if ($SDK_VARIANT eq 'S80') {
308 $S80SDK =~ /^(\d+)\.(\d+)$/;
309 ($sdkmajor, $sdkminor) = ($1, $2);
310 }
53d44271
JH
311 if ($SDK_VARIANT eq 'S90') {
312 $S90SDK =~ /^(\d+)\.(\d+)$/;
313 ($sdkmajor, $sdkminor) = ($1, $2);
314 }
25ca88e0
JH
315 if ($SDK_VARIANT eq 'UIQ') {
316 $UIQSDK =~ /^(\d+)\.(\d+)$/;
317 ($sdkmajor, $sdkminor) = ($1, $2);
318 }
27da23d5
JH
319 print SYMBIAN_PORT_H <<__EOF__;
320/* Copyright (c) 2004-2005, Nokia. All rights reserved. */
321
322#ifndef __symbian_port_h__
323#define __symbian_port_h__
324
325#define PERL_SYMBIANPORT_MAJOR $PORT{dll}->{MAJOR}
326#define PERL_SYMBIANPORT_MINOR $PORT{dll}->{MINOR}
327#define PERL_SYMBIANPORT_PATCH $PORT{dll}->{PATCH}
328
ed76c0e4 329#define PERL_SYMBIANSDK_FLAVOR L"$SDK_VARIANT"
27da23d5
JH
330#define PERL_SYMBIANSDK_MAJOR $sdkmajor
331#define PERL_SYMBIANSDK_MINOR $sdkminor
332
333#endif /* #ifndef __symbian_port_h__ */
334__EOF__
335 close(SYMBIAN_PORT_H);
336 push @unclean, 'symbian\symbian_port.h';
337 }
338 else {
339 warn "$0: failed to open symbian/symbian_port.h for writing: $!\n";
340 }
341}
342
343sub create_perlmain_c {
344 print "\tperlmain.c\n";
345 system(
53d44271 346q[perl -ne "print qq[ char *file = __FILE__;\n] if /dXSUB_SYS/;print unless /PERL_UNUSED_CONTEXT/;print qq[ newXS(\"DynaLoader::boot_DynaLoader\", boot_DynaLoader, file);\n] if /dXSUB_SYS/;print qq[EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);\n] if /Do not delete this line/" miniperlmain.c > perlmain.c]
27da23d5
JH
347 ) == 0
348 or die "$0: Creating perlmain.c failed: $!\n";
349 push @unclean, 'perlmain.c';
350}
351
352sub create_PerlApp_pkg {
353 print "\tsymbian\\PerlApp.pkg\n";
1ae6ead9 354 if ( open( PERLAPP_PKG, '>', 'symbian\\PerlApp.pkg' ) ) {
ed76c0e4
JH
355 my $ProductId =
356 defined $S60SDK ?
357qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
358 defined $S80SDK ?
359qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
53d44271
JH
360 defined $S90SDK ?
361qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] :
25ca88e0
JH
362 defined $UIQSDK && $SDK_VERSION =~ /^(\d)\.(\d)$/ ?
363qq[;Supports UIQ v2.1\n(0x101F617B), $1, $2, 0, {"UIQ21ProductID"}\n] :
ed76c0e4 364 ";Supports Series NN";
27da23d5 365 my $APPS = $UREL;
53d44271 366 if (($SDK_VARIANT eq 'S60' && $SDK_VERSION ne '1.2' || $WIN eq 'winscw') || defined $S80SDK || defined $S90SDK) { # Do only if not in S60 1.2 VC.
27da23d5
JH
367 $APPS =~ s!\\epoc32\\release\\(.+)\\$UARM$!\\epoc32\\data\\z\\system\\apps\\PerlApp!i;
368 }
db5886f1 369 # TODO: in S60 3.0 there will be no more recognizers.
ed76c0e4 370 my $mdl = qq["$UREL\\PerlRecog.mdl"-"!:\\system\\recogs\\PerlRecog.mdl";];
53d44271 371 my $AIF = $SDK_VARIANT =~ /^S[689]0/ ? qq["$APPS\\PerlApp.aif"-"!:\\system\\apps\\PerlApp\\PerlApp.aif"] : "";
27da23d5
JH
372 print PERLAPP_PKG <<__EOF__;
373; !!!!!! DO NOT EDIT THIS FILE !!!!!!
374; This file is built by symbian\\config.pl.
375; Any changes made here will be lost!
376;
377; PerlApp.pkg
378;
379; Note that the demo_pl needs to be run to create the demo .pl scripts.
380;
381; Languages
382&EN;
383
384; Standard SIS file header
f26f4a2f 385#{"PerlApp"},(0x102015F6),0,2,0
27da23d5 386
ed76c0e4 387$ProductId
27da23d5
JH
388
389; Files
390"$UREL\\PerlApp.APP"-"!:\\system\\apps\\PerlApp\\PerlApp.app"
ed76c0e4 391$mdl
27da23d5 392"$APPS\\PerlApp.rsc"-"!:\\system\\apps\\PerlApp\\PerlApp.rsc"
db5886f1 393$AIF
27da23d5 394__EOF__
1ae6ead9 395 if ( open( DEMOS, '-|', "perl symbian\\demo_pl list" ) ) {
27da23d5
JH
396 while (<DEMOS>) {
397 chomp;
53d44271
JH
398 if (defined $S90SDK) {
399 print PERLAPP_PKG qq["$_"-"!:\\Mydocs\\Perl\\$_"\n];
400 } else {
401 print PERLAPP_PKG qq["$_"-"!:\\Perl\\$_"\n];
402 }
27da23d5
JH
403 }
404 close(DEMOS);
405 }
406 close(PERLAPP_PKG);
407 }
408 else {
409 die "$0: symbian\\PerlApp.pkg: $!\n";
410 }
411 push @unclean, 'symbian\PerlApp.pkg';
412}
413
414print "Creating...\n";
415create_mmp(
416 'miniperl', 'exe',
417 'miniperlmain.c', 'symbian\symbian_stubs.c',
c8f896e5 418 'symbian\PerlBase.cpp',
d0d72822 419 'symbian\PerlUi.cpp',
c8f896e5
JH
420 'symbian\PerlUtil.cpp',
421 'symbian\symbian_utils.cpp',
27da23d5
JH
422);
423create_mmp(
424 "perl", 'exe',
425 'perlmain.c', 'symbian\symbian_stubs.c',
d0d72822
JH
426 'symbian\symbian_utils.cpp',
427 'symbian\PerlBase.cpp',
428 'symbian\PerlUi.cpp',
c8f896e5 429 'symbian\PerlUtil.cpp',
27da23d5
JH
430 'ext\DynaLoader\DynaLoader.cpp',
431);
432
433create_mmp(
434 "perl$VERSION", 'dll',
435 'symbian\symbian_dll.cpp', 'symbian\symbian_stubs.c',
d0d72822
JH
436 'symbian\symbian_utils.cpp',
437 'symbian\PerlBase.cpp',
438 'symbian\PerlUi.cpp',
c8f896e5 439 'symbian\PerlUtil.cpp',
27da23d5
JH
440 'ext\DynaLoader\DynaLoader.cpp',
441);
442
443create_bld_inf();
444create_config_h();
445create_perlmain_c();
446create_symbian_port_h();
447create_DynaLoader_cpp();
448create_PerlApp_pkg();
449
1ae6ead9 450if ( open( PERLAPP_MMP, '>', 'symbian/PerlApp.mmp' ) ) {
27da23d5 451 my @MACRO;
ed76c0e4 452 my @LIB;
d0d72822
JH
453 push @MACRO, 'PERL_IMPLICIT_CONTEXT';
454 push @MACRO, 'MULTIPLICITY';
ed76c0e4
JH
455 if (defined $S60SDK) {
456 push @MACRO, '__SERIES60__';
457 push @MACRO, '__SERIES60_1X__' if $S60SDK =~ /^1\./;
458 push @MACRO, '__SERIES60_2X__' if $S60SDK =~ /^2\./;
459 push @LIB, <<__EOF__;
460LIBRARY avkon.lib
461LIBRARY commondialogs.lib
462__EOF__
463 }
464 if (defined $S80SDK) {
465 push @MACRO, '__SERIES80__';
466 push @MACRO, '__SERIES80_1X__' if $S80SDK =~ /^1\./;
467 push @MACRO, '__SERIES80_2X__' if $S80SDK =~ /^2\./;
468 push @LIB, <<__EOF__;
469LIBRARY eikctl.lib
470LIBRARY eikcoctl.lib
c7a4d1c0 471LIBRARY eikdlg.lib
ed76c0e4
JH
472LIBRARY ckndlg.lib
473__EOF__
474 }
53d44271
JH
475 if (defined $S90SDK) {
476 push @MACRO, '__SERIES90__';
477 push @LIB, <<__EOF__;
478LIBRARY eikctl.lib
479LIBRARY eikcoctl.lib
480LIBRARY eikdlg.lib
481LIBRARY ckndlg.lib
482__EOF__
483 }
25ca88e0
JH
484 if (defined $UIQSDK) {
485 push @MACRO, '__UIQ__';
486 push @MACRO, '__UIQ_1X__' if $UIQSDK =~ /^1\./;
487 push @MACRO, '__UIQ_2X__' if $UIQSDK =~ /^2\./;
488 push @LIB, <<__EOF__;
489LIBRARY eikctl.lib
490LIBRARY eikcoctl.lib
491LIBRARY eikdlg.lib
492LIBRARY qikctl.lib
493__EOF__
494 }
27da23d5
JH
495 print PERLAPP_MMP <<__EOF__;
496// !!!!!! DO NOT EDIT THIS FILE !!!!!!
497// This file is built by symbian\\config.pl.
498// Any changes made here will be lost!
499TARGET PerlApp.app
500TARGETTYPE app
501UID 0x100039CE 0x102015F6
502TARGETPATH \\system\\apps\\PerlApp
503SRCDBG
504EXPORTUNFROZEN
505SOURCEPATH .
506SOURCE PerlApp.cpp
507
27da23d5
JH
508USERINCLUDE .
509USERINCLUDE ..
510USERINCLUDE \\symbian\\perl\\$R_V_SV\\include
511
512SYSTEMINCLUDE \\epoc32\\include
513SYSTEMINCLUDE \\epoc32\\include\\libc
514
515LIBRARY apparc.lib
27da23d5
JH
516LIBRARY bafl.lib
517LIBRARY charconv.lib
d0d72822 518LIBRARY cone.lib
27da23d5 519LIBRARY efsrv.lib
d0d72822 520LIBRARY eikcore.lib
27da23d5
JH
521LIBRARY estlib.lib
522LIBRARY euser.lib
523LIBRARY perl$VERSION.lib
ed76c0e4 524@LIB
d0d72822 525RESOURCE perlapp.rss
27da23d5
JH
526__EOF__
527 if (@MACRO) {
528 for my $macro (@MACRO) {
529 print PERLAPP_MMP <<__EOF__;
530MACRO $macro
531__EOF__
532 }
533 }
53d44271 534 if ($SDK_VARIANT =~ /^S[689]0$/) {
25ca88e0
JH
535 print PERLAPP_MMP <<__EOF__;
536AIF PerlApp.aif . PerlAppAif.rss
537__EOF__
538 }
27da23d5
JH
539 close(PERLAPP_MMP);
540 push @unclean, 'symbian\PerlApp.mmp';
541}
542else {
543 warn "$0: failed to create symbian\\PerlApp.mmp";
544}
545
1ae6ead9 546if ( open( MAKEFILE, '>', 'Makefile' ) ) {
27da23d5 547 my $perl = "perl$VERSION";
ed76c0e4 548 my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$WIN\\$perl.def";
27da23d5 549 my $windef2 = "..\\BWINS\\${perl}u.def";
ed76c0e4 550 my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$ARM\\$perl.def";
27da23d5 551 my $armdef2 = "..\\BMARM\\${perl}u.def";
d0d72822 552 my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN";
27da23d5
JH
553 print "\tMakefile\n";
554 print MAKEFILE <<__EOF__;
555help:
556 \@echo === Perl for Symbian ===
557 \@echo Useful targets:
558 \@echo all win arm clean
559 \@echo perldll.sis perlext.sis perlsdk.zip
560
561WIN = ${WIN}
562ARM = ${ARM}
563
564all: build
565
ed76c0e4 566build: rename_makedef build_${WIN} build_arm
27da23d5
JH
567
568@unclean: symbian\\config.pl
569 perl symbian\\config.pl
570
d0d72822 571build_${WIN}: abld.bat perldll_${WIN}
ed76c0e4 572
d0d72822 573build_vc6: abld.bat perldll_wins
27da23d5 574
d0d72822 575build_vc7: abld.bat perldll_wins
c7a4d1c0 576
d0d72822 577build_cw: abld.bat perldll_winscw
27da23d5 578
d0d72822 579build_arm: abld.bat perl_arm miniperl_arm perldll_arm
27da23d5 580
d0d72822 581miniperl_win miniperl_${WIN}: miniperl.mmp abld.bat rename_makedef
ed76c0e4 582 abld build ${WIN} udeb miniperl
27da23d5 583
d0d72822 584miniperl_arm: miniperl.mmp abld.bat rename_makedef
27da23d5
JH
585 abld build \$(ARM) $UARM miniperl
586
ed76c0e4 587miniperl: miniperl_${WIN} miniperl_arm
27da23d5 588
ed76c0e4 589perl: perl_${WIN} perl_arm
27da23d5 590
d0d72822 591perl_win perl_${WIN}: perl.mmp abld.bat rename_makedef
ed76c0e4 592 abld build ${WIN} perl
27da23d5 593
d0d72822 594perl_arm: perl.mmp abld.bat rename_makedef
27da23d5
JH
595 abld build \$(ARM) $UARM perl
596
ed76c0e4 597perldll_win perldll_${WIN}: perl${VERSION}_${WIN} freeze_${WIN} perl${VERSION}_${WIN}
27da23d5 598
ed76c0e4
JH
599perl${VERSION}_win perl${VERSION}_${WIN}: perl$VERSION.mmp abld.bat rename_makedef
600 abld build ${WIN} perl$VERSION
27da23d5
JH
601
602perldll_arm: perl${VERSION}_arm freeze_arm perl${VERSION}_arm
603
d0d72822 604perl${VERSION}_arm: perl$VERSION.mmp abld.bat rename_makedef
27da23d5
JH
605 abld build \$(ARM) $UARM perl$VERSION
606
ed76c0e4 607perldll perl$VERSION: perldll_${WIN} perldll_arm
27da23d5 608
ed76c0e4 609win ${WIN}: miniperl_${WIN} perl_${WIN} perldll_${WIN}
27da23d5 610
ed76c0e4 611thumb arm: miniperl_arm perl_arm perldll_arm
27da23d5
JH
612
613rename_makedef:
614 -ren makedef.pl nomakedef.pl
615
616# Symbian SDK has a makedef.pl of its own,
617# and we don't need Perl's.
618rerename_makedef:
619 -ren nomakedef.pl makedef.pl
620
d0d72822
JH
621symbian\\PerlUi.rss: symbian\\PerlUi$SDK_VARIANT.rss
622 copy symbian\\PerlUi$SDK_VARIANT.rss symbian\\PerlUi.rss
27da23d5 623
d0d72822
JH
624abld.bat abld: bld.inf symbian\\PerlUi.rss
625 bldmake bldfiles
27da23d5
JH
626
627vc6: win.mf vc6.mf build_vc6
628
c7a4d1c0
JH
629vc7: win.mf vc7.mf build_vc7
630
ed76c0e4 631cw: win.mf cw.mf build_cw
27da23d5 632
ed76c0e4 633${WIN}_miniperl.mf: abld.bat symbian\\config.pl
d0d72822 634 abld makefile ${MF} miniperl
ed76c0e4 635 echo > ${WIN}_miniperl.mf
27da23d5 636
ed76c0e4 637${WIN}_perl.mf: abld.bat symbian\\config.pl
d0d72822 638 abld makefile ${MF} perl
ed76c0e4 639 echo > ${WIN}_perl.mf
27da23d5 640
ed76c0e4 641${WIN}_${VERSION}.mf: abld.bat symbian\\config.pl
d0d72822 642 abld makefile ${MF} perl${VERSION}
ed76c0e4 643 echo > ${WIN}_${VERSION}.mf
27da23d5 644
ed76c0e4
JH
645symbian\\${WIN}.mf:
646 cd symbian; make ${WIN}.mf
647
648${WIN}.mf: ${WIN}_miniperl.mf ${WIN}_perl.mf ${WIN}_${VERSION}.mf symbian\\${WIN}.mf
27da23d5
JH
649
650arm_miniperl.mf: abld.bat symbian\\config.pl
27da23d5
JH
651 echo > arm_miniperl.mf
652
653arm_perl.mf: abld.bat symbian\\config.pl
27da23d5
JH
654 echo > arm_perl.mf
655
656arm_${VERSION}.mf: abld.bat symbian\\config.pl
27da23d5
JH
657 echo > arm_${VERSION}.mf
658
659arm.mf: arm_miniperl.mf arm_perl.mf arm_${VERSION}.mf
660
ed76c0e4
JH
661win.mf: vc6.mf cw.mf
662 echo > win.mf
663
27da23d5
JH
664vc6.mf: abld.bat symbian\\config.pl
665 abld makefile vc6
666 echo > vc6.mf
667
c7a4d1c0
JH
668vc7.mf: abld.bat symbian\\config.pl
669 abld makefile vc7
670 echo > vc7.mf
671
ed76c0e4
JH
672cw.mf: abld.bat symbian\\config.pl
673 abld makefile cw_ide
674 echo > cw.mf
675
27da23d5
JH
676PM = lib\\Config.pm lib\\Cross.pm lib\\lib.pm ext\\DynaLoader\\DynaLoader.pm ext\\DynaLoader\\XSLoader.pm ext\\Errno\\Errno.pm
677POD = lib\\Config.pod
678
679pm: \$(PM)
680
681XLIB = -Ixlib\\symbian
682
683XSBOPT = --win=\$(WIN) --arm=\$(ARM)
684
685lib\\Config.pm:
686 copy symbian\\config.sh config.sh
53d44271
JH
687__EOF__
688 if (defined $S90SDK) {
689 print MAKEFILE <<__EOF__;
690 perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g; s!='(\\\\\\\\system)!='C:\\1!" config.sh
691__EOF__
692 } else {
693 print MAKEFILE <<__EOF__;
27da23d5 694 perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g" config.sh
53d44271
JH
695__EOF__
696 };
697 print MAKEFILE <<__EOF__;
27da23d5
JH
698 perl \$(XLIB) configpm --cross=symbian
699 copy xlib\\symbian\\Config.pm lib\\Config.pm
700 perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" lib\\Config.pm
701 perl -pi.bak -e "s:5\\.\\d+\\.\\d+:$R_V_SV:g" lib\\Config.pm
702 -perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" xlib\\symbian\\Config_heavy.pl
703
704lib\\lib.pm:
705 perl lib\\lib_pm.PL
706
707ext\\DynaLoader\\DynaLoader.pm:
708 -del /f ext\\DynaLoader\\DynaLoader.pm
709 perl -Ixlib\\symbian ext\\DynaLoader\\DynaLoader_pm.PL
710 perl -pi.bak -e "s/__END__//" DynaLoader.pm
711 copy /y DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm
712 -del /f DynaLoader.pm DynaLoader.pm.bak
713
714ext\\DynaLoader\\XSLoader.pm:
715 perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) XSLoader
716
717ext\\Errno\\Errno.pm:
718 perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) Errno
719
720miniperlexe.sis: miniperl_arm symbian\\makesis.pl
721 perl \$(XLIB) symbian\\makesis.pl miniperl
722
723perlexe.sis: perl_arm symbian\\makesis.pl
724 perl \$(XLIB) symbian\\makesis.pl perl
725
726
727allsis: all miniperlexe.sis perlexe.sis perldll.sis perllib.sis perlext.sis perlapp.sis
728
729perldll.sis perl$VERSION.sis: perldll_arm pm symbian\\makesis.pl
730 perl \$(XLIB) symbian\\makesis.pl perl${VERSION}dll
731
c8f896e5 732perl${VERSION}lib.sis perllib.sis: \$(PM)
27da23d5
JH
733 perl \$(XLIB) symbian\\makesis.pl perl${VERSION}lib
734
c8f896e5 735perl${VERSION}ext.sis perlext.sis: perldll_arm buildext_sis
27da23d5
JH
736 perl symbian\\makesis.pl perl${VERSION}ext
737
48462a74 738EXT = Compress::Raw::Zlib Cwd Data::Dumper Devel::Peek Digest::MD5 Errno Fcntl File::Glob Filter::Util::Call IO List::Util MIME::Base64 PerlIO::scalar PerlIO::via SDBM_File Socket Storable Time::HiRes XSLoader attributes
27da23d5 739
c042ae3a 740buildext: perldll symbian\\xsbuild.pl lib\\Config.pm
27da23d5
JH
741 perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) \$(EXT)
742
25ca88e0
JH
743buildextcpp: perldll symbian\\xsbuild.pl lib\\Config.pm
744 perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) \$(EXT)
745
c042ae3a 746buildext_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm
27da23d5
JH
747 perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --sis \$(EXT)
748
25ca88e0
JH
749buildextcpp_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm
750 perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) --sis \$(EXT)
751
27da23d5
JH
752cleanext: symbian\\xsbuild.pl
753 perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT)
754
755distcleanext: symbian\\xsbuild.pl
756 perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT)
757
758sis makesis: miniperl perl perldll pm buildext perlapp.sis
759 perl \$(XLIB) symbian\\makesis.pl
760
761APIDIR = \\Symbian\\perl\\$R_V_SV
762
763sdkinstall:
764 -mkdir \\Symbian\\perl
765 -mkdir \\Symbian\\perl\\$R_V_SV
766 -mkdir \$(APIDIR)\\include
767 -mkdir \$(APIDIR)\\include\\symbian
768 -mkdir \$(APIDIR)\\lib
769 -mkdir \$(APIDIR)\\lib\\ExtUtils
770 -mkdir \$(APIDIR)\\pod
771 -mkdir \$(APIDIR)\\bin
772 -mkdir \$(BINDIR)
773 copy /y *.h \$(APIDIR)\\include
25ca88e0 774 -copy /y *.inc \$(APIDIR)\\include
27da23d5
JH
775 copy /y lib\\ExtUtils\\xsubpp \$(APIDIR)\\lib\\ExtUtils
776 copy /y lib\\ExtUtils\\typemap \$(APIDIR)\\lib\\ExtUtils
c8f896e5 777 copy /y lib\\ExtUtils\\ParseXS.pm \$(APIDIR)\\lib\\ExtUtils
27da23d5 778 copy /y symbian\\xsbuild.pl \$(APIDIR)\\bin
c8f896e5 779 copy /y symbian\\sisify.pl \$(APIDIR)\\bin
27da23d5 780 copy /y symbian\\PerlBase.h \$(APIDIR)\\include
d0d72822 781 copy /y symbian\\PerlUi.h \$(APIDIR)\\include
c8f896e5 782 copy /y symbian\\PerlUtil.h \$(APIDIR)\\include
27da23d5
JH
783 copy /y symbian\\symbian*.h \$(APIDIR)\\include\\symbian
784 copy /y symbian\\PerlBase.pod \$(APIDIR)\\pod
c8f896e5 785 copy /y symbian\\PerlUtil.pod \$(APIDIR)\\pod
27da23d5 786
ed76c0e4 787RELDIR = $SYMBIAN_ROOT\\epoc32\\release
27da23d5
JH
788RELWIN = \$(RELDIR)\\\$(WIN)\\udeb
789RELARM = \$(RELDIR)\\\$(ARM)\\$UARM
c8f896e5 790SDKZIP = perl${VERSION}sdk.zip
27da23d5 791
c8f896e5
JH
792
793\$(SDKZIP) perlsdk.zip: perldll sdkinstall
794 -del /f perl${VERSION}sdk.zip
27da23d5
JH
795 zip -r perl${VERSION}sdk.zip \$(RELWIN)\\perl$VERSION.* \$(RELARM)\\perl$VERSION.* \$(APIDIR)
796 \@echo perl${VERSION}sdk.zip created.
797
c8f896e5
JH
798PERLSIS = perl${VERSION}.SIS perl${VERSION}lib.SIS perl${VERSION}ext.SIS
799ALLSIS = \$(PERLSIS) perlapp.sis
800ETC = README.symbian symbian\\PerlBase.pod symbian\\PerlUtil.pod symbian\\sisify.pl symbian\\TODO
801
802perl${VERSION}dist.zip perldist.zip: \$(ALLSIS) \$(SDKZIP) \$(ETC)
803 -del /f perl${VERSION}dist.zip
804 zip -r perl${VERSION}dist.zip \$(ALLSIS) \$(SDKZIP) \$(ETC)
805
ed76c0e4 806perlapp: sdkinstall perlapp_${WIN} perlapp_arm
27da23d5 807
c7a4d1c0
JH
808perlapp_arm_minimal sisify_hex perlappmin.hex perlrscmin.hex: sdkinstall config.h
809 cd symbian; make perlapp_arm USERDEFS=-DCreatePerlAppMinimal
810 perl symbian\\hexdump.pl
811
ed76c0e4
JH
812perlapp_win perlapp_${WIN}: config.h
813 cd symbian; make perlapp_${WIN}
27da23d5
JH
814
815perlapp_arm: config.h
816 cd symbian; make perlapp_arm
817
c7a4d1c0
JH
818perlapp_arm_clean:
819 cd symbian; make clean
820
27da23d5
JH
821perlapp_demo_extract:
822 cd symbian; make perlapp_demo_extract
823
824perlapp.sis: perlapp_arm
825 cd symbian; make perlapp.sis
826
827perlapp.zip:
c8f896e5 828 cd symbian; zip perlapp.zip PerlApp.* PerlRecog.* PerlBase.* PerlUtil.* demo_pl
27da23d5
JH
829
830zip: perlsdk.zip perlapp.zip
831
ed76c0e4 832freeze: freeze_${WIN} freeze_arm
27da23d5 833
ed76c0e4
JH
834freeze_${WIN}:
835 abld freeze ${WIN} perl$VERSION
27da23d5
JH
836
837freeze_arm:
838 abld freeze \$(ARM) perl$VERSION
839
ed76c0e4 840defrost: defrost_${WIN} defrost_arm
27da23d5 841
ed76c0e4 842defrost_${WIN}:
27da23d5
JH
843 -del /f $windef1
844 -del /f $windef2
845
846defrost_arm:
847 -del /f $armdef1
848 -del /f $armdef2
849
ed76c0e4
JH
850clean_${WIN}: abld.bat
851 abld clean ${WIN}
27da23d5
JH
852
853clean_arm: abld.bat
854 abld clean \$(ARM)
855
ed76c0e4 856clean: clean_${WIN} clean_arm rerename_makedef
27da23d5
JH
857 -del /f \$(PM)
858 -del /f \$(POD)
859 -del /f lib\\Config.pm.bak
860 -del /f xlib\\symbian\\Config_heavy.pl
861 -rmdir /s /q xlib
862 -del /f config.sh
863 -del /f DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm
864 -del /f ext\\DynaLoader\\Makefile
865 -del /f ext\\SDBM_File\\sdbm\\Makefile
866 -del /f symbian\\*.lst
867 -del /f abld.bat @unclean *.pkg *.sis *.zip
868 -del /f symbian\\abld.bat symbian\\*.sis symbian\\*.zip
869 -del /f symbian\\perl5*.pkg symbian\\miniperl.pkg
c7a4d1c0 870 -del arm_*.mf ${WIN}_*.mf vc*.mf cw*.mf
db5886f1
JH
871 -del symbian\\Makefile
872 -del symbian\\PerlUi.rss symbian\\PerlApp.rss
c7a4d1c0 873 -del perlappmin.hex perlrscmin.hex
27da23d5
JH
874 -perl symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT)
875 -rmdir /s /q perl${VERSION}_Data
876 -cd symbian; make clean
877
878reallyclean: abld.bat
879 abld reallyclean
880
881distclean: defrost reallyclean clean
882 -perl symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT)
883 -del /f config.h config.sh.bak symbian\\symbian_port.h
884 -del /f Makefile symbian\\PerlApp.mmp
885 -del /f BMARM\\*.def
886 -del /f *.cwlink *.resources *.pref
887 -del /f perl${VERSION}.xml perl${VERSION}.mcp uid.cpp
888 -rmdir /s /q BMARM
889 cd symbian; make distclean
890 -del /f symbian\\Makefile
891__EOF__
892 close MAKEFILE;
893}
894else {
895 warn "$0: failed to create Makefile: $!\n";
896}
897
1ae6ead9 898if ( open( MAKEFILE, '>', 'symbian/Makefile')) {
ed76c0e4 899 my $wrap = defined $S60SDK && $S60SDK eq '1.2' && $WIN ne '${WIN}cw';
27da23d5
JH
900 my $ABLD = $wrap ? 'perl b.pl': 'abld';
901 print "\tsymbian/Makefile\n";
d0d72822 902 my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN";
27da23d5
JH
903 print MAKEFILE <<__EOF__;
904WIN = $WIN
905ARM = $ARM
906ABLD = $ABLD
d0d72822 907MF = $MF
27da23d5
JH
908
909abld.bat:
910 bldmake bldfiles
911
ed76c0e4 912perlapp_${WIN}: abld.bat ..\\config.h PerlApp.h PerlApp.cpp
d0d72822 913 copy PerlUi$SDK_VARIANT.rss PerlApp.rss
27da23d5 914 bldmake bldfiles
ed76c0e4 915 \$(ABLD) build ${WIN} udeb
27da23d5
JH
916
917perlapp_arm: ..\\config.h PerlApp.h PerlApp.cpp
d0d72822 918 copy PerlUi$SDK_VARIANT.rss PerlApp.rss
27da23d5 919 bldmake bldfiles
ed76c0e4 920 \$(ABLD) build ${ARM} $UARM
27da23d5 921
d0d72822
JH
922$MF:
923 abld makefile $MF
924
27da23d5
JH
925win.mf:
926 bldmake bldfiles
d0d72822 927 abld makefile $MF
27da23d5
JH
928
929perlapp_demo_extract:
930 perl demo_pl extract
931
932perlapp.sis: perlapp_arm perlapp_demo_extract
933 -del /f perlapp.SIS
934 makesis perlapp.pkg
935 copy /y perlapp.SIS ..\\perlapp.SIS
936
937clean:
938 -perl demo_pl cleanup
939 -del /f perlapp.sis
940 -del /f b.pl
d0d72822 941 -del PerlApp.rss
c7a4d1c0
JH
942 abld clean $WIN
943 abld clean thumb
db5886f1 944 -del Makefile
27da23d5
JH
945
946distclean: clean
947 -del /f *.cwlink *.resources *.pref
948 -del /f PerlApp.xml PerlApp.mcp uid.cpp
949 -rmdir /s /q PerlApp_Data
950 -del /f abld.bat
951__EOF__
952 close(MAKEFILE);
953 if ($wrap) {
1ae6ead9 954 if ( open( B_PL, '>', 'symbian/b.pl')) {
27da23d5
JH
955 print B_PL <<'__EOF__';
956# abld.pl wrapper.
957
958# nmake doesn't like MFLAGS and MAKEFLAGS being set to -w and w.
959delete $ENV{MFLAGS};
960delete $ENV{MAKEFLAGS};
961
962system("abld @ARGV");
963__EOF__
964 close(B_PL);
965 } else {
966 warn "$0: failed to create symbian/b.pl: $!\n";
967 }
968 }
969} else {
970 warn "$0: failed to create symbian/Makefile: $!\n";
971}
972
973print "Deleting...\n";
974for my $config (
975 # Do not delete config.h here.
976 "config.sh",
977 "lib\\Config.pm",
978 "xlib\\symbian\\Config.pm",
979 "xlib\\symbian\\Config_heavy.pl",
db5886f1
JH
980 "symbian\\PerlUi.rss",
981 "symbian\\PerlApp.rss",
27da23d5
JH
982 ) {
983 print "\t$config\n";
984 unlink($config);
985}
986
987print <<__EOM__;
988Configuring done.
989Now you can run:
990 make all
991 make allsis
992__EOM__
993
9941; # Happy End.