#!/usr/bin/perl -w # Copyright (c) 2004-2005 Nokia. All rights reserved. # This utility is licensed under the same terms as Perl itself. use strict; use lib "symbian"; print "Configuring...\n"; print "Configuring with: Perl version $] ($^X)\n"; do "sanity.pl" or die $@; my %VERSION = %{ do "version.pl" or die $@ }; printf "Configuring for: Perl version $VERSION{REVISION}.%03d%03d\n", $VERSION{VERSION}, $VERSION{SUBVERSION}; my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}"; my $R_V_SV = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}"; my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) = @{ do "sdk.pl" or die $@ }; my %PORT = %{ do "port.pl" or die $@ }; if ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') { ( $SYMBIAN_VERSION, $SDK_VERSION ) = qw(6.1 1.2); } my $WIN = $ENV{WIN} ; # 'wins', 'winscw' (from sdk.pl) my $ARM = 'thumb'; # 'thumb', 'armv5' my $S60SDK = $ENV{S60SDK}; # qw(1.2 2.0 2.1 2.6) (from sdk.pl) if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) { $ARM = 'armv5'; # 'thumb', 'armv5' # Configuration for S60 5th Edition SDK v1.0 } my $S80SDK = $ENV{S80SDK}; # qw(2.0) (from sdk.pl) my $S90SDK = $ENV{S90SDK}; # qw(1.1) (from sdk.pl) my $UIQSDK = $ENV{UIQSDK}; # qw(2.0 2.1) (from sdk.pl) my $UREL = $ENV{UREL}; # from sdk.pl $UREL =~ s/-ARM-/$ARM/; my $UARM = $ENV{UARM}; # from sdk.pl die "$0: SDK not recognized\n" if !defined($SYMBIAN_VERSION) || !defined($SDK_VERSION) || (!defined($S60SDK) && !defined($S80SDK) && !defined($S90SDK) && !defined($UIQSDK)); die "$0: does not know which Windows compiler to use\n" unless defined $WIN; print "Symbian $SYMBIAN_VERSION SDK $SDK_VARIANT $SDK_VERSION ($WIN) installed at $SYMBIAN_ROOT\n"; my $CWD = do "cwd.pl" or die $@; print "Build directory $CWD\n"; die "$0: '+' in cwd does not work with Series 60 SDK 1.2\n" if defined $S60SDK && $S60SDK eq '1.2' && $CWD =~ /\+/; my @unclean; my @mmp; sub create_mmp { my ( $target, $type, @x ) = @_; my $miniperl = $target eq 'miniperl'; my $perl = $target eq 'perl'; my $mmp = "$target.mmp"; my $targetpath = $miniperl || $perl ? "TARGETPATH\t\\System\\Apps\\Perl" : ""; if ( open( my $fh, ">$mmp" ) ) { print "\t$mmp\n"; push @mmp, $mmp; push @unclean, $mmp; print $fh <<__EOF__; TARGET $target.$type TARGETTYPE $type __EOF__ if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) { print $fh "UID\t0 0xEA3E9181\n" if $miniperl; print $fh "UID\t0 0xED04DD86\n" if $perl; print $fh "UID\t0x1000008d 0xE8667302\n" unless $miniperl || $perl; print $fh "CAPABILITY\tNONE\n"; } else { print $targetpath; print $fh "EPOCHEAPSIZE\t1024 8388608"; print $fh "EPOCSTACKSIZE\t65536"; } print $fh <<__EOF__; EXPORTUNFROZEN SRCDBG __EOF__ if ($SDK_VARIANT eq 'S60') { print $fh "MACRO\t__SERIES60__\n"; print $fh "MACRO\t__SERIES60_1X__\n" if $S60SDK =~ /^1\./; print $fh "MACRO\t__SERIES60_2X__\n" if $S60SDK =~ /^2\./; print $fh "MACRO\t__SERIES60_3X__\n" if $S60SDK =~ /^5\./; } if ($SDK_VARIANT eq 'S80') { print $fh "MACRO\t__SERIES80__\n"; print $fh "MACRO\t__SERIES80_1X__\n" if $S80SDK =~ /^1\./; print $fh "MACRO\t__SERIES80_2X__\n" if $S80SDK =~ /^2\./; } if ($SDK_VARIANT eq 'S90') { print $fh "MACRO\t__SERIES90__\n"; } if ($SDK_VARIANT eq 'UIQ') { print $fh "MACRO\t__UIQ__\n"; print $fh "MACRO\t__UIQ_1X__\n" if $UIQSDK =~ /^1\./; print $fh "MACRO\t__UIQ_2X__\n" if $UIQSDK =~ /^2\./; } my ( @c, %c ); @c = map { glob } qw(*.c); # Find the .c files. @c = map { lc } @c; # Lowercase the names. @c = grep { !/malloc\.c/ } @c; # Use the system malloc. @c = grep { !/madly\.c/ } @c; # mad is undef. @c = grep { !/main\.c/ } @c; # main.c must be explicit. push @c, map { lc } @x; @c = map { s:^\.\./::; $_ } @c; # Remove the leading ../ @c = map { $c{$_}++ } @c; # Uniquefy. @c = sort keys %c; # Beautify. for (@c) { print $fh "SOURCE\t\t$_\n"; } print $fh <<__EOF__; SOURCEPATH $CWD USERINCLUDE $CWD USERINCLUDE $CWD\\ext\\DynaLoader USERINCLUDE $CWD\\symbian SYSTEMINCLUDE \\epoc32\\include\\libc SYSTEMINCLUDE \\epoc32\\include LIBRARY euser.lib LIBRARY estlib.lib LIBRARY eikcore.lib LIBRARY cone.lib LIBRARY efsrv.lib __EOF__ if ( $miniperl || $perl || $type eq 'dll' ) { print $fh <<__EOF__; LIBRARY charconv.lib LIBRARY hal.lib LIBRARY estor.lib __EOF__ } if ($SDK_VARIANT =~ /^S[689]0$/) { print $fh <<__EOF__; LIBRARY commonengine.lib __EOF__ } if (defined $S60SDK) { print $fh <<__EOF__; LIBRARY avkon.lib LIBRARY commondialogs.lib __EOF__ } if ((defined $S80SDK) or (defined $S90SDK)) { print $fh <<__EOF__; LIBRARY eikctl.lib LIBRARY eikcoctl.lib LIBRARY eikdlg.lib LIBRARY ckndlg.lib __EOF__ } if (defined $UIQSDK) { print $fh <<__EOF__; LIBRARY eikctl.lib LIBRARY eikcoctl.lib LIBRARY eikdlg.lib LIBRARY qikctl.lib __EOF__ } if ( $type eq 'exe' ) { print $fh <<__EOF__; STATICLIBRARY ecrt0.lib __EOF__ } if ($miniperl) { print $fh <<__EOF__; MACRO PERL_MINIPERL __EOF__ } if ($perl) { print $fh <<__EOF__; MACRO PERL_PERL __EOF__ } print $fh <<__EOF__; MACRO PERL_CORE MACRO MULTIPLICITY MACRO PERL_IMPLICIT_CONTEXT __EOF__ unless ( $miniperl || $perl ) { print $fh <<__EOF__; MACRO PERL_GLOBAL_STRUCT MACRO PERL_GLOBAL_STRUCT_PRIVATE __EOF__ } unless ($miniperl || $perl ) { if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) { print $fh "START RESOURCE\tsymbian\\PerlUi.rss\nEND\n"; } else { print $fh "RESOURCE\tsymbian\\PerlUi.rss"; } } close $fh; } else { warn "$0: failed to open $mmp for writing: $!\n"; } } sub create_bld_inf { if ( open( BLD_INF, ">bld.inf" ) ) { print "\tbld.inf\n"; push @unclean, "bld.inf"; print BLD_INF <<__EOF__; PRJ_PLATFORMS ${WIN} ${ARM} PRJ_MMPFILES __EOF__ for (@mmp) { print BLD_INF $_, "\n" } close BLD_INF; } else { warn "$0: failed to open bld.inf for writing: $!\n"; } } my %config; sub load_config_sh { if ( open( CONFIG_SH, "symbian/config.sh" ) ) { while () { if (/^(\w+)=['"]?(.*?)["']?$/) { my ( $var, $val ) = ( $1, $2 ); $val =~ s/x.y.z/$R_V_SV/gi; $val =~ s/thumb/$ARM/gi; $val = "C:$val" if (defined($S90SDK) and ($val =~ /^(\/|\\\\)system[\/\\]/i)); $val = "'$SYMBIAN_VERSION'" if $var eq 'osvers'; $val = "'$SDK_VERSION'" if $var eq 'sdkvers'; $config{$var} = $val; } } close CONFIG_SH; } else { warn "$0: failed to open symbian\\config.sh for reading: $!\n"; } } sub create_config_h { load_config_sh(); if ( open( CONFIG_H, ">config.h" ) ) { print "\tconfig.h\n"; push @unclean, "config.h"; if ( open( CONFIG_H_SH, "config_h.SH" ) ) { while () { last if /\#ifndef _config_h_/; } print CONFIG_H <<__EOF__; /* * Package name : perl * Source directory : . * Configuration time: * Configured by : * Target system : symbian */ #ifndef _config_h_ __EOF__ while () { last if /!GROK!THIS/; s/\$(\w+)/exists $config{$1} ? $config{$1} : (warn "$0: config.sh missing '$1'\n", "")/eg; s/^#undef\s+(\S+).+/#undef $1/g; s:\Q/**/::; print CONFIG_H; } close CONFIG_H_SH; } else { warn "$0: failed to open ../config_h.SH for reading: $!\n"; } close CONFIG_H; } else { warn "$0: failed to open config.h for writing: $!\n"; } } sub create_DynaLoader_cpp { print "\text\\DynaLoader\\DynaLoader.cpp\n"; system( q[xsubpp ext\DynaLoader\dl_symbian.xs >ext\DynaLoader\DynaLoader.cpp] ) == 0 or die "$0: creating DynaLoader.cpp failed: $!\n"; push @unclean, 'ext\DynaLoader\DynaLoader.cpp'; } sub create_symbian_port_h { print "\tsymbian\\symbian_port.h\n"; if ( open( SYMBIAN_PORT_H, ">symbian/symbian_port.h" ) ) { my ($sdkmajor, $sdkminor); if ($SDK_VARIANT eq 'S60') { $S60SDK =~ /^(\d+)\.(\d+)$/; ($sdkmajor, $sdkminor) = ($1, $2); } if ($SDK_VARIANT eq 'S80') { $S80SDK =~ /^(\d+)\.(\d+)$/; ($sdkmajor, $sdkminor) = ($1, $2); } if ($SDK_VARIANT eq 'S90') { $S90SDK =~ /^(\d+)\.(\d+)$/; ($sdkmajor, $sdkminor) = ($1, $2); } if ($SDK_VARIANT eq 'UIQ') { $UIQSDK =~ /^(\d+)\.(\d+)$/; ($sdkmajor, $sdkminor) = ($1, $2); } print SYMBIAN_PORT_H <<__EOF__; /* Copyright (c) 2004-2005, Nokia. All rights reserved. */ #ifndef __symbian_port_h__ #define __symbian_port_h__ #define PERL_SYMBIANPORT_MAJOR $PORT{dll}->{MAJOR} #define PERL_SYMBIANPORT_MINOR $PORT{dll}->{MINOR} #define PERL_SYMBIANPORT_PATCH $PORT{dll}->{PATCH} #define PERL_SYMBIANSDK_FLAVOR L"$SDK_VARIANT" #define PERL_SYMBIANSDK_MAJOR $sdkmajor #define PERL_SYMBIANSDK_MINOR $sdkminor #endif /* #ifndef __symbian_port_h__ */ __EOF__ close(SYMBIAN_PORT_H); push @unclean, 'symbian\symbian_port.h'; } else { warn "$0: failed to open symbian/symbian_port.h for writing: $!\n"; } } sub create_perlmain_c { print "\tperlmain.c\n"; system( q[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] ) == 0 or die "$0: Creating perlmain.c failed: $!\n"; push @unclean, 'perlmain.c'; } sub create_PerlApp_pkg { print "\tsymbian\\PerlApp.pkg\n"; if ( open( PERLAPP_PKG, ">symbian\\PerlApp.pkg" ) ) { my $ProductId = defined $S60SDK ? qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] : defined $S80SDK ? qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] : defined $S90SDK ? qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] : defined $UIQSDK && $SDK_VERSION =~ /^(\d)\.(\d)$/ ? qq[;Supports UIQ v2.1\n(0x101F617B), $1, $2, 0, {"UIQ21ProductID"}\n] : ";Supports Series NN"; my $APPS = $UREL; 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. $APPS =~ s!\\epoc32\\release\\(.+)\\$UARM$!\\epoc32\\data\\z\\system\\apps\\PerlApp!i; } # TODO: in S60 3.0 there will be no more recognizers. my $mdl = qq["$UREL\\PerlRecog.mdl"-"!:\\system\\recogs\\PerlRecog.mdl";]; my $AIF = $SDK_VARIANT =~ /^S[689]0/ ? qq["$APPS\\PerlApp.aif"-"!:\\system\\apps\\PerlApp\\PerlApp.aif"] : ""; print PERLAPP_PKG <<__EOF__; ; !!!!!! DO NOT EDIT THIS FILE !!!!!! ; This file is built by symbian\\config.pl. ; Any changes made here will be lost! ; ; PerlApp.pkg ; ; Note that the demo_pl needs to be run to create the demo .pl scripts. ; ; Languages &EN; ; Standard SIS file header #{"PerlApp"},(0x102015F6),0,2,0 $ProductId ; Files "$UREL\\PerlApp.APP"-"!:\\system\\apps\\PerlApp\\PerlApp.app" $mdl "$APPS\\PerlApp.rsc"-"!:\\system\\apps\\PerlApp\\PerlApp.rsc" $AIF __EOF__ if ( open( DEMOS, "perl symbian\\demo_pl list |" ) ) { while () { chomp; if (defined $S90SDK) { print PERLAPP_PKG qq["$_"-"!:\\Mydocs\\Perl\\$_"\n]; } else { print PERLAPP_PKG qq["$_"-"!:\\Perl\\$_"\n]; } } close(DEMOS); } close(PERLAPP_PKG); } else { die "$0: symbian\\PerlApp.pkg: $!\n"; } push @unclean, 'symbian\PerlApp.pkg'; } print "Creating...\n"; create_mmp( 'miniperl', 'exe', 'miniperlmain.c', 'symbian\symbian_stubs.c', 'symbian\PerlBase.cpp', 'symbian\PerlUi.cpp', 'symbian\PerlUtil.cpp', 'symbian\symbian_utils.cpp', ); create_mmp( "perl", 'exe', 'perlmain.c', 'symbian\symbian_stubs.c', 'symbian\symbian_utils.cpp', 'symbian\PerlBase.cpp', 'symbian\PerlUi.cpp', 'symbian\PerlUtil.cpp', 'ext\DynaLoader\DynaLoader.cpp', ); create_mmp( "perl$VERSION", 'dll', 'symbian\symbian_dll.cpp', 'symbian\symbian_stubs.c', 'symbian\symbian_utils.cpp', 'symbian\PerlBase.cpp', 'symbian\PerlUi.cpp', 'symbian\PerlUtil.cpp', 'ext\DynaLoader\DynaLoader.cpp', ); create_bld_inf(); create_config_h(); create_perlmain_c(); create_symbian_port_h(); create_DynaLoader_cpp(); create_PerlApp_pkg(); if ( open( PERLAPP_MMP, ">symbian/PerlApp.mmp" ) ) { my @MACRO; my @LIB; push @MACRO, 'PERL_IMPLICIT_CONTEXT'; push @MACRO, 'MULTIPLICITY'; if (defined $S60SDK) { push @MACRO, '__SERIES60__'; push @MACRO, '__SERIES60_1X__' if $S60SDK =~ /^1\./; push @MACRO, '__SERIES60_2X__' if $S60SDK =~ /^2\./; push @LIB, <<__EOF__; LIBRARY avkon.lib LIBRARY commondialogs.lib __EOF__ } if (defined $S80SDK) { push @MACRO, '__SERIES80__'; push @MACRO, '__SERIES80_1X__' if $S80SDK =~ /^1\./; push @MACRO, '__SERIES80_2X__' if $S80SDK =~ /^2\./; push @LIB, <<__EOF__; LIBRARY eikctl.lib LIBRARY eikcoctl.lib LIBRARY eikdlg.lib LIBRARY ckndlg.lib __EOF__ } if (defined $S90SDK) { push @MACRO, '__SERIES90__'; push @LIB, <<__EOF__; LIBRARY eikctl.lib LIBRARY eikcoctl.lib LIBRARY eikdlg.lib LIBRARY ckndlg.lib __EOF__ } if (defined $UIQSDK) { push @MACRO, '__UIQ__'; push @MACRO, '__UIQ_1X__' if $UIQSDK =~ /^1\./; push @MACRO, '__UIQ_2X__' if $UIQSDK =~ /^2\./; push @LIB, <<__EOF__; LIBRARY eikctl.lib LIBRARY eikcoctl.lib LIBRARY eikdlg.lib LIBRARY qikctl.lib __EOF__ } print PERLAPP_MMP <<__EOF__; // !!!!!! DO NOT EDIT THIS FILE !!!!!! // This file is built by symbian\\config.pl. // Any changes made here will be lost! TARGET PerlApp.app TARGETTYPE app UID 0x100039CE 0x102015F6 TARGETPATH \\system\\apps\\PerlApp SRCDBG EXPORTUNFROZEN SOURCEPATH . SOURCE PerlApp.cpp USERINCLUDE . USERINCLUDE .. USERINCLUDE \\symbian\\perl\\$R_V_SV\\include SYSTEMINCLUDE \\epoc32\\include SYSTEMINCLUDE \\epoc32\\include\\libc LIBRARY apparc.lib LIBRARY bafl.lib LIBRARY charconv.lib LIBRARY cone.lib LIBRARY efsrv.lib LIBRARY eikcore.lib LIBRARY estlib.lib LIBRARY euser.lib LIBRARY perl$VERSION.lib @LIB RESOURCE perlapp.rss __EOF__ if (@MACRO) { for my $macro (@MACRO) { print PERLAPP_MMP <<__EOF__; MACRO $macro __EOF__ } } if ($SDK_VARIANT =~ /^S[689]0$/) { print PERLAPP_MMP <<__EOF__; AIF PerlApp.aif . PerlAppAif.rss __EOF__ } close(PERLAPP_MMP); push @unclean, 'symbian\PerlApp.mmp'; } else { warn "$0: failed to create symbian\\PerlApp.mmp"; } if ( open( MAKEFILE, ">Makefile" ) ) { my $perl = "perl$VERSION"; my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$WIN\\$perl.def"; my $windef2 = "..\\BWINS\\${perl}u.def"; my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$ARM\\$perl.def"; my $armdef2 = "..\\BMARM\\${perl}u.def"; my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN"; print "\tMakefile\n"; print MAKEFILE <<__EOF__; help: \@echo === Perl for Symbian === \@echo Useful targets: \@echo all win arm clean \@echo perldll.sis perlext.sis perlsdk.zip WIN = ${WIN} ARM = ${ARM} all: build build: rename_makedef build_${WIN} build_arm @unclean: symbian\\config.pl perl symbian\\config.pl build_${WIN}: abld.bat perldll_${WIN} build_vc6: abld.bat perldll_wins build_vc7: abld.bat perldll_wins build_cw: abld.bat perldll_winscw build_arm: abld.bat perl_arm miniperl_arm perldll_arm miniperl_win miniperl_${WIN}: miniperl.mmp abld.bat rename_makedef abld build ${WIN} udeb miniperl miniperl_arm: miniperl.mmp abld.bat rename_makedef abld build \$(ARM) $UARM miniperl miniperl: miniperl_${WIN} miniperl_arm perl: perl_${WIN} perl_arm perl_win perl_${WIN}: perl.mmp abld.bat rename_makedef abld build ${WIN} perl perl_arm: perl.mmp abld.bat rename_makedef abld build \$(ARM) $UARM perl perldll_win perldll_${WIN}: perl${VERSION}_${WIN} freeze_${WIN} perl${VERSION}_${WIN} perl${VERSION}_win perl${VERSION}_${WIN}: perl$VERSION.mmp abld.bat rename_makedef abld build ${WIN} perl$VERSION perldll_arm: perl${VERSION}_arm freeze_arm perl${VERSION}_arm perl${VERSION}_arm: perl$VERSION.mmp abld.bat rename_makedef abld build \$(ARM) $UARM perl$VERSION perldll perl$VERSION: perldll_${WIN} perldll_arm win ${WIN}: miniperl_${WIN} perl_${WIN} perldll_${WIN} thumb arm: miniperl_arm perl_arm perldll_arm rename_makedef: -ren makedef.pl nomakedef.pl # Symbian SDK has a makedef.pl of its own, # and we don't need Perl's. rerename_makedef: -ren nomakedef.pl makedef.pl symbian\\PerlUi.rss: symbian\\PerlUi$SDK_VARIANT.rss copy symbian\\PerlUi$SDK_VARIANT.rss symbian\\PerlUi.rss abld.bat abld: bld.inf symbian\\PerlUi.rss bldmake bldfiles vc6: win.mf vc6.mf build_vc6 vc7: win.mf vc7.mf build_vc7 cw: win.mf cw.mf build_cw ${WIN}_miniperl.mf: abld.bat symbian\\config.pl abld makefile ${MF} miniperl echo > ${WIN}_miniperl.mf ${WIN}_perl.mf: abld.bat symbian\\config.pl abld makefile ${MF} perl echo > ${WIN}_perl.mf ${WIN}_${VERSION}.mf: abld.bat symbian\\config.pl abld makefile ${MF} perl${VERSION} echo > ${WIN}_${VERSION}.mf symbian\\${WIN}.mf: cd symbian; make ${WIN}.mf ${WIN}.mf: ${WIN}_miniperl.mf ${WIN}_perl.mf ${WIN}_${VERSION}.mf symbian\\${WIN}.mf arm_miniperl.mf: abld.bat symbian\\config.pl echo > arm_miniperl.mf arm_perl.mf: abld.bat symbian\\config.pl echo > arm_perl.mf arm_${VERSION}.mf: abld.bat symbian\\config.pl echo > arm_${VERSION}.mf arm.mf: arm_miniperl.mf arm_perl.mf arm_${VERSION}.mf win.mf: vc6.mf cw.mf echo > win.mf vc6.mf: abld.bat symbian\\config.pl abld makefile vc6 echo > vc6.mf vc7.mf: abld.bat symbian\\config.pl abld makefile vc7 echo > vc7.mf cw.mf: abld.bat symbian\\config.pl abld makefile cw_ide echo > cw.mf PM = lib\\Config.pm lib\\Cross.pm lib\\lib.pm ext\\DynaLoader\\DynaLoader.pm ext\\DynaLoader\\XSLoader.pm ext\\Errno\\Errno.pm POD = lib\\Config.pod pm: \$(PM) XLIB = -Ixlib\\symbian XSBOPT = --win=\$(WIN) --arm=\$(ARM) lib\\Config.pm: copy symbian\\config.sh config.sh __EOF__ if (defined $S90SDK) { print MAKEFILE <<__EOF__; perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g; s!='(\\\\\\\\system)!='C:\\1!" config.sh __EOF__ } else { print MAKEFILE <<__EOF__; perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g" config.sh __EOF__ }; print MAKEFILE <<__EOF__; perl \$(XLIB) configpm --cross=symbian copy xlib\\symbian\\Config.pm lib\\Config.pm perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" lib\\Config.pm perl -pi.bak -e "s:5\\.\\d+\\.\\d+:$R_V_SV:g" lib\\Config.pm -perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" xlib\\symbian\\Config_heavy.pl lib\\lib.pm: perl lib\\lib_pm.PL ext\\DynaLoader\\DynaLoader.pm: -del /f ext\\DynaLoader\\DynaLoader.pm perl -Ixlib\\symbian ext\\DynaLoader\\DynaLoader_pm.PL perl -pi.bak -e "s/__END__//" DynaLoader.pm copy /y DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm -del /f DynaLoader.pm DynaLoader.pm.bak ext\\DynaLoader\\XSLoader.pm: perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) XSLoader ext\\Errno\\Errno.pm: perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) Errno miniperlexe.sis: miniperl_arm symbian\\makesis.pl perl \$(XLIB) symbian\\makesis.pl miniperl perlexe.sis: perl_arm symbian\\makesis.pl perl \$(XLIB) symbian\\makesis.pl perl allsis: all miniperlexe.sis perlexe.sis perldll.sis perllib.sis perlext.sis perlapp.sis perldll.sis perl$VERSION.sis: perldll_arm pm symbian\\makesis.pl perl \$(XLIB) symbian\\makesis.pl perl${VERSION}dll perl${VERSION}lib.sis perllib.sis: \$(PM) perl \$(XLIB) symbian\\makesis.pl perl${VERSION}lib perl${VERSION}ext.sis perlext.sis: perldll_arm buildext_sis perl symbian\\makesis.pl perl${VERSION}ext EXT = 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 buildext: perldll symbian\\xsbuild.pl lib\\Config.pm perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) \$(EXT) buildextcpp: perldll symbian\\xsbuild.pl lib\\Config.pm perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) \$(EXT) buildext_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --sis \$(EXT) buildextcpp_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) --sis \$(EXT) cleanext: symbian\\xsbuild.pl perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT) distcleanext: symbian\\xsbuild.pl perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT) sis makesis: miniperl perl perldll pm buildext perlapp.sis perl \$(XLIB) symbian\\makesis.pl APIDIR = \\Symbian\\perl\\$R_V_SV sdkinstall: -mkdir \\Symbian\\perl -mkdir \\Symbian\\perl\\$R_V_SV -mkdir \$(APIDIR)\\include -mkdir \$(APIDIR)\\include\\symbian -mkdir \$(APIDIR)\\lib -mkdir \$(APIDIR)\\lib\\ExtUtils -mkdir \$(APIDIR)\\pod -mkdir \$(APIDIR)\\bin -mkdir \$(BINDIR) copy /y *.h \$(APIDIR)\\include -copy /y *.inc \$(APIDIR)\\include copy /y lib\\ExtUtils\\xsubpp \$(APIDIR)\\lib\\ExtUtils copy /y lib\\ExtUtils\\typemap \$(APIDIR)\\lib\\ExtUtils copy /y lib\\ExtUtils\\ParseXS.pm \$(APIDIR)\\lib\\ExtUtils copy /y symbian\\xsbuild.pl \$(APIDIR)\\bin copy /y symbian\\sisify.pl \$(APIDIR)\\bin copy /y symbian\\PerlBase.h \$(APIDIR)\\include copy /y symbian\\PerlUi.h \$(APIDIR)\\include copy /y symbian\\PerlUtil.h \$(APIDIR)\\include copy /y symbian\\symbian*.h \$(APIDIR)\\include\\symbian copy /y symbian\\PerlBase.pod \$(APIDIR)\\pod copy /y symbian\\PerlUtil.pod \$(APIDIR)\\pod RELDIR = $SYMBIAN_ROOT\\epoc32\\release RELWIN = \$(RELDIR)\\\$(WIN)\\udeb RELARM = \$(RELDIR)\\\$(ARM)\\$UARM SDKZIP = perl${VERSION}sdk.zip \$(SDKZIP) perlsdk.zip: perldll sdkinstall -del /f perl${VERSION}sdk.zip zip -r perl${VERSION}sdk.zip \$(RELWIN)\\perl$VERSION.* \$(RELARM)\\perl$VERSION.* \$(APIDIR) \@echo perl${VERSION}sdk.zip created. PERLSIS = perl${VERSION}.SIS perl${VERSION}lib.SIS perl${VERSION}ext.SIS ALLSIS = \$(PERLSIS) perlapp.sis ETC = README.symbian symbian\\PerlBase.pod symbian\\PerlUtil.pod symbian\\sisify.pl symbian\\TODO perl${VERSION}dist.zip perldist.zip: \$(ALLSIS) \$(SDKZIP) \$(ETC) -del /f perl${VERSION}dist.zip zip -r perl${VERSION}dist.zip \$(ALLSIS) \$(SDKZIP) \$(ETC) perlapp: sdkinstall perlapp_${WIN} perlapp_arm perlapp_arm_minimal sisify_hex perlappmin.hex perlrscmin.hex: sdkinstall config.h cd symbian; make perlapp_arm USERDEFS=-DCreatePerlAppMinimal perl symbian\\hexdump.pl perlapp_win perlapp_${WIN}: config.h cd symbian; make perlapp_${WIN} perlapp_arm: config.h cd symbian; make perlapp_arm perlapp_arm_clean: cd symbian; make clean perlapp_demo_extract: cd symbian; make perlapp_demo_extract perlapp.sis: perlapp_arm cd symbian; make perlapp.sis perlapp.zip: cd symbian; zip perlapp.zip PerlApp.* PerlRecog.* PerlBase.* PerlUtil.* demo_pl zip: perlsdk.zip perlapp.zip freeze: freeze_${WIN} freeze_arm freeze_${WIN}: abld freeze ${WIN} perl$VERSION freeze_arm: abld freeze \$(ARM) perl$VERSION defrost: defrost_${WIN} defrost_arm defrost_${WIN}: -del /f $windef1 -del /f $windef2 defrost_arm: -del /f $armdef1 -del /f $armdef2 clean_${WIN}: abld.bat abld clean ${WIN} clean_arm: abld.bat abld clean \$(ARM) clean: clean_${WIN} clean_arm rerename_makedef -del /f \$(PM) -del /f \$(POD) -del /f lib\\Config.pm.bak -del /f xlib\\symbian\\Config_heavy.pl -rmdir /s /q xlib -del /f config.sh -del /f DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm -del /f ext\\DynaLoader\\Makefile -del /f ext\\SDBM_File\\sdbm\\Makefile -del /f symbian\\*.lst -del /f abld.bat @unclean *.pkg *.sis *.zip -del /f symbian\\abld.bat symbian\\*.sis symbian\\*.zip -del /f symbian\\perl5*.pkg symbian\\miniperl.pkg -del arm_*.mf ${WIN}_*.mf vc*.mf cw*.mf -del symbian\\Makefile -del symbian\\PerlUi.rss symbian\\PerlApp.rss -del perlappmin.hex perlrscmin.hex -perl symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT) -rmdir /s /q perl${VERSION}_Data -cd symbian; make clean reallyclean: abld.bat abld reallyclean distclean: defrost reallyclean clean -perl symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT) -del /f config.h config.sh.bak symbian\\symbian_port.h -del /f Makefile symbian\\PerlApp.mmp -del /f BMARM\\*.def -del /f *.cwlink *.resources *.pref -del /f perl${VERSION}.xml perl${VERSION}.mcp uid.cpp -rmdir /s /q BMARM cd symbian; make distclean -del /f symbian\\Makefile __EOF__ close MAKEFILE; } else { warn "$0: failed to create Makefile: $!\n"; } if ( open( MAKEFILE, ">symbian/Makefile")) { my $wrap = defined $S60SDK && $S60SDK eq '1.2' && $WIN ne '${WIN}cw'; my $ABLD = $wrap ? 'perl b.pl': 'abld'; print "\tsymbian/Makefile\n"; my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN"; print MAKEFILE <<__EOF__; WIN = $WIN ARM = $ARM ABLD = $ABLD MF = $MF abld.bat: bldmake bldfiles perlapp_${WIN}: abld.bat ..\\config.h PerlApp.h PerlApp.cpp copy PerlUi$SDK_VARIANT.rss PerlApp.rss bldmake bldfiles \$(ABLD) build ${WIN} udeb perlapp_arm: ..\\config.h PerlApp.h PerlApp.cpp copy PerlUi$SDK_VARIANT.rss PerlApp.rss bldmake bldfiles \$(ABLD) build ${ARM} $UARM $MF: abld makefile $MF win.mf: bldmake bldfiles abld makefile $MF perlapp_demo_extract: perl demo_pl extract perlapp.sis: perlapp_arm perlapp_demo_extract -del /f perlapp.SIS makesis perlapp.pkg copy /y perlapp.SIS ..\\perlapp.SIS clean: -perl demo_pl cleanup -del /f perlapp.sis -del /f b.pl -del PerlApp.rss abld clean $WIN abld clean thumb -del Makefile distclean: clean -del /f *.cwlink *.resources *.pref -del /f PerlApp.xml PerlApp.mcp uid.cpp -rmdir /s /q PerlApp_Data -del /f abld.bat __EOF__ close(MAKEFILE); if ($wrap) { if ( open( B_PL, ">symbian/b.pl")) { print B_PL <<'__EOF__'; # abld.pl wrapper. # nmake doesn't like MFLAGS and MAKEFLAGS being set to -w and w. delete $ENV{MFLAGS}; delete $ENV{MAKEFLAGS}; system("abld @ARGV"); __EOF__ close(B_PL); } else { warn "$0: failed to create symbian/b.pl: $!\n"; } } } else { warn "$0: failed to create symbian/Makefile: $!\n"; } print "Deleting...\n"; for my $config ( # Do not delete config.h here. "config.sh", "lib\\Config.pm", "xlib\\symbian\\Config.pm", "xlib\\symbian\\Config_heavy.pl", "symbian\\PerlUi.rss", "symbian\\PerlApp.rss", ) { print "\t$config\n"; unlink($config); } print <<__EOM__; Configuring done. Now you can run: make all make allsis __EOM__ 1; # Happy End.