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