Home | History | Annotate | Download | only in tools
      1 #! /usr/bin/perl
      2 #
      3 # Copyright (C) 2010 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_ENTRY\(([^,]+), ([^,]+), ([^\)]+)\)/) {
     31     next;
     32   }
     33   my $type = $1;
     34   my $name = $2;
     35   my $args = $3;
     36   
     37   my @args = split ',', $args;
     38   my $len = scalar(@args);
     39   my $nonVoidArgLen = 0;
     40   for (my $num = 0; $num < $len; $num++) {
     41     if ($args[$num] ne "void") {
     42       $nonVoidArgLen++;
     43     }
     44   }
     45   if ($type eq "void") {
     46     printf("TRACE_GL_VOID(");
     47   } else {
     48     printf("TRACE_GL(%s, ", $type);
     49   }
     50   
     51   printf("%s, (%s), (", $name, $args);
     52     for (my $num = 0; $num < $len; $num++) {
     53     if ($args[$num] ne "void") {
     54       if ($num > 0) {
     55         print ", ";
     56       }
     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("), %d", $nonVoidArgLen);
     70   for (my $num = 0; $num < $len; $num++) {
     71     if ($args[$num] ne "void") {
     72       #
     73       # extract the name from the parameter
     74       # type name
     75       # const type *name
     76       # type *name
     77       # type name[4]
     78       #
     79       my $arg = $args[$num];
     80       if ($arg =~ /(\S+\s)+\**\s*([\w]+)/) {
     81         my $name = $2;
     82         if ($arg =~ /((const )*(\S+\s)+\**)\s*([\w]+)/) {
     83           my $type = rtrim($1);
     84           printf(", \"%s\", %s", $type, $name);
     85         }
     86       }
     87     }
     88   }
     89   printf(")\n");
     90 }
     91 
     92 
     93 
     94 
     95 
     96