--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/eglswitch/src/generate_stubs.pl Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,138 @@
+#!/bin/perl -w
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Generates the egl_stubs.h header file and the eglswitchu.def
+# file from the libeglu def file.
+#
+#
+
+use strict;
+my $COPYRIGHT = "" .
+"// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\n" .
+"// All rights reserved.\n" .
+"// This component and the accompanying materials are made available\n" .
+"// under the terms of the License \"Eclipse Public License v1.0\"\n" .
+"// which accompanies this distribution, and is available\n" .
+"// at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n" .
+"//\n" .
+"// Initial Contributors:\n" .
+"// Nokia Corporation - initial contribution.\n" .
+"//\n" .
+"// Contributors:\n" .
+"//\n" .
+"// Description:\n";
+
+my $EGL_DEF;
+my $EGLSWITCH_HEADER = "egl_stubs.h";
+my $EGLSWITCH_DEF = "../BWINS/eglswitchu.def";
+my $SOURCE_DEF_SIZE = 0;
+
+&main();
+exit(0);
+
+sub main() {
+ if (@ARGV == 0) {
+ printf "Usage: generate_stubs.pl <EGL DEF file>\n";
+ printf "e.g. generate_stubs.pl /epoc32/include/def/win32/libegl14u.def\n";
+ return 0;
+ }
+
+ $EGL_DEF = $ARGV[0];
+ my $maxOrdinal = 1;
+
+ open DEF, $EGL_DEF or
+ die "Cannot open $EGL_DEF\n";
+
+ my ($dev, $ino, $mode, $nlink, $uid, $gid,
+ $rdev, $size, $atime, $mtime, $ctime,
+ $blksize, $blocks)
+ = stat($EGL_DEF);
+ # the file size could be checked by the switcher build to verify that the stub is up to date.
+ $SOURCE_DEF_SIZE= $size;
+
+ open HEADER_OUT, ">${EGLSWITCH_HEADER}" or
+ die "Cannot create $EGLSWITCH_HEADER\n";
+
+ open DEF_OUT, ">${EGLSWITCH_DEF}" or
+ die "Cannot create $EGLSWITCH_DEF\n";
+
+ &printHeaderStart(\*HEADER_OUT);
+ &printDefStart(\*DEF_OUT);
+
+ while (<DEF>) {
+ chomp;
+ if (/@/) {
+ if (s/.*;/;/) {
+ &printDefEntry(\*DEF_OUT, $maxOrdinal, $_);
+ &printHeaderEntry(\*HEADER_OUT,$maxOrdinal,$_);
+ } else {
+ &printDefEntry(\*DEF_OUT, $maxOrdinal, "");
+ &printHeaderEntry(\*HEADER_OUT,$maxOrdinal, "(noname)");
+ }
+ $maxOrdinal++;
+ }
+ }
+ &printHeaderEnd(\*HEADER_OUT,$maxOrdinal);
+ &printDefEnd(\*DEF_OUT);
+
+ close DEF;
+ close HEADER_OUT;
+ close DEF_OUT;
+}
+
+sub printDefStart(\$) {
+ my ($fh) = @_;
+ print $fh "EXPORTS\n";
+}
+
+sub printDefEntry(\$\$\$) {
+ my ($fh, $ordinal, $comment) = @_;
+ print $fh "\tcall_vector_${ordinal} @ ${ordinal} NONAME $comment\n";
+}
+
+sub printDefEnd(\$) {
+ my ($fh) = @_;
+ print $fh "\n";
+}
+
+sub printHeaderStart(\$) {
+ my ($fh) = @_;
+
+ print $fh "$COPYRIGHT\n".
+ "// Generated from \"$EGL_DEF\" file size: $SOURCE_DEF_SIZE\n" .
+ "\n" .
+ "extern \"C\" {\n" .
+ "void common_dispatch();\n" .
+ "\n";
+}
+
+sub printHeaderEntry(\$\$\$) {
+ my ($fh, $ordinal, $comment) = @_;
+
+ print $fh "__declspec(dllexport)\n" .
+ "__declspec(naked)\n" .
+ "void call_vector_${ordinal} ()\n" .
+ "\t{\n" .
+ "\t// ${comment}\n" .
+ "\t_asm mov eax, $ordinal\n" .
+ "\t_asm jmp common_dispatch\n" .
+ "\t}\n\n";
+}
+
+sub printHeaderEnd(\$\$) {
+ my ($fh, $maxOrdinal) = @_;
+ print $fh "}\n" .
+ "#define MAX_ORDINAL $maxOrdinal\n\n";
+}