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