128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li#!/usr/bin/python
228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li# -*- coding: utf-8 -*-
328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li#
555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# Copyright 2011, The Android Open Source Project
655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li#
755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# Licensed under the Apache License, Version 2.0 (the "License");
855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# you may not use this file except in compliance with the License.
955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# You may obtain a copy of the License at
1055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li#
1155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li#     http://www.apache.org/licenses/LICENSE-2.0
1255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li#
1355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# Unless required by applicable law or agreed to in writing, software
1455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# distributed under the License is distributed on an "AS IS" BASIS,
1555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# See the License for the specific language governing permissions and
1755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li# limitations under the License.
1855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li#
1955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Liimport os
2128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Liimport sys
2228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
2328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Lidef append_functions(functions, lines):
2428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li	i = 0
2528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li	for line in lines:
2628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li		if line.find("API_ENTRY(") >= 0: # a function prototype
2728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			returnType = line[0: line.find(" API_ENTRY(")]
2828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			functionName = line[line.find("(") + 1: line.find(")")] #extract GL function name
2928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			parameterList = line[line.find(")(") + 2: line.find(") {")]
3028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
3128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			functions.append(functionName)
3228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			#print functionName
3328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			continue
3428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
3528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			parameters = parameterList.split(',')
3628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			paramIndex = 0
3728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			if line.find("*") >= 0:
3828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				print "// FIXME: this function has pointers, it should be hand written"
3928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				externs.append("%s Tracing_%s(%s);" % (returnType, functionName, parameterList))
4028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			print "%s Tracing_%s(%s)\n{" % (returnType, functionName, parameterList)
4128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
4228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			if parameterList == "void":
4328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				parameters = []
4428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
4528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			arguments = ""
4628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
4728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			for parameter in parameters:
4828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				parameter = parameter.replace("const", "")
4928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				parameter = parameter.strip()
5028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				paramType = parameter.split(' ')[0]
5128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				paramName = parameter.split(' ')[1]
5228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
5328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li				paramIndex += 1
5428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
5528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li	return functions
5628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
5728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
5828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
5928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Liif __name__ == "__main__":
6028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li	definedFunctions = []
6155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li	lines = open("gl2_api_annotated.in").readlines()
6228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li	definedFunctions = append_functions(definedFunctions, lines)
6328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
6455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li	output = open("../debug.in", "w")
6555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li	lines = open("../trace.in").readlines()
6628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li	output.write("// the following functions are not defined in GLESv2_dbg\n")
6728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li	for line in lines:
6828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li		functionName = ""
6928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li		if line.find("TRACE_GL(") >= 0: # a function prototype
7028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			functionName = line.split(',')[1].strip()
7128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li		elif line.find("TRACE_GL_VOID(") >= 0: # a function prototype
7228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			functionName = line[line.find("(") + 1: line.find(",")] #extract GL function name
7328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li		else:
7428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			continue
7528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li		if functionName in definedFunctions:
7628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			#print functionName
7728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			continue
7828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li		else:
7928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li			output.write(line)
8028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
81