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