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