blob: ab739fed63197864e1e8b18f2c57ae20e7adca82 [file] [log] [blame]
#!/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 (<CONFIG_SH>) {
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 (<CONFIG_H_SH>) {
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 (<CONFIG_H_SH>) {
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 (<DEMOS>) {
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.