diff -r 000000000000 -r 5d03bc08d59c egl/eglswitch/src/generate_stubs.pl --- /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 \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 () { + 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"; +}