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