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