Home | History | Annotate | Download | only in tools
      1 #! /usr/bin/perl
      2 #
      3 # Copyright (C) 2008 Google Inc.
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License");
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #      http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 
     17 use strict;
     18 
     19 sub rtrim($)
     20 {
     21     my $string = shift;
     22     $string =~ s/\s+$//;
     23     return $string;
     24 }
     25 
     26 while (my $line = <>) {
     27   next if $line =~ /^\//;
     28   next if $line =~ /^#/;
     29   next if $line =~ /^\s*$/;
     30   if ($line !~ /^GL_API(CALL)?\s+(.+)\s+GL_APIENTRY\s+([\w]+)\s*\(([^\)]+)\);/) {
     31     next;
     32   }
     33   my $type = rtrim($2);
     34   my $name = $3;
     35   my $args = $4;
     36 
     37   #printf("%s", $line);
     38   
     39   my $prefix = "";
     40   if ($name eq "glGetString") {
     41     $prefix = "__";
     42   }
     43   
     44   printf("%s API_ENTRY(%s%s)(%s)", $type, $prefix, $name, $args);
     45   
     46   printf(" {\n");
     47   if ($type eq "void") {
     48     printf("    CALL_GL_API(%s", $name);
     49   } else {
     50     printf("    CALL_GL_API_RETURN(%s", $name);
     51   }
     52   my @args = split ',', $args;
     53   my $len = scalar(@args);
     54   for (my $num = 0; $num < $len; $num++) {
     55     if ($args[$num] ne "void") {
     56       print ", ";
     57       #
     58       # extract the name from the parameter
     59       # type name
     60       # const type *name
     61       # type *name
     62       # type name[4]
     63       #
     64       if ($args[$num] =~ /(\S+\s)+\**\s*([\w]+)/) {
     65         printf("%s", $2);
     66       }
     67     }
     68   }
     69   printf(");\n");
     70   printf("}\n");
     71 }
     72 
     73 
     74 
     75 
     76 
     77