glapigen 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. use strict;
  17. sub rtrim($)
  18. {
  19. my $string = shift;
  20. $string =~ s/\s+$//;
  21. return $string;
  22. }
  23. while (my $line = <>) {
  24. next if $line =~ /^\//;
  25. next if $line =~ /^#/;
  26. next if $line =~ /^\s*$/;
  27. if ($line !~ /^GL_API(CALL)?\s+(.+)\s+GL_APIENTRY\s+([\w]+)\s*\(([^\)]+)\);/) {
  28. next;
  29. }
  30. my $type = rtrim($2);
  31. my $name = $3;
  32. my $args = $4;
  33. #printf("%s", $line);
  34. my $prefix = "";
  35. if ($name eq "glGetString") {
  36. $prefix = "__";
  37. }
  38. printf("%s API_ENTRY(%s%s)(%s)", $type, $prefix, $name, $args);
  39. printf(" {\n");
  40. if ($type eq "void") {
  41. printf(" CALL_GL_API(%s", $name);
  42. } else {
  43. printf(" CALL_GL_API_RETURN(%s", $name);
  44. }
  45. my @args = split ',', $args;
  46. my $len = scalar(@args);
  47. for (my $num = 0; $num < $len; $num++) {
  48. if ($args[$num] ne "void") {
  49. print ", ";
  50. #
  51. # extract the name from the parameter
  52. # type name
  53. # const type *name
  54. # type *name
  55. # type name[4]
  56. #
  57. if ($args[$num] =~ /(\S+\s)+\**\s*([\w]+)/) {
  58. printf("%s", $2);
  59. }
  60. }
  61. }
  62. printf(");\n");
  63. printf("}\n");
  64. }