#!/usr/bin/python3 # WebKit builds ANGLE as a static library, and exports some of the # internal header files as "public headers" in the Xcode project for # consumption by other build targets - e.g. WebCore. # # The build phase which copies these headers also flattens the # directory structure (so that "ANGLE" is the top-level directory # containing all of them - e.g., "#include "). # # It isn't practical to override the include paths so drastically for # the other build targets (like WebCore) that we could make the # original include paths, like work. Changing them so # their namespace is "ANGLE", which implicitly occurs during the "copy # headers" phase, is a reasonable solution. # # This script processes the header files after they're copied during # the Copy Header Files build phase, and adjusts their #includes so # that they refer to each other. This avoids modifying the ANGLE # sources, and allows WebCore to more easily call ANGLE APIs directly. import os import re if os.getenv('DEPLOYMENT_LOCATION') == 'YES': # Apple-internal build output_dir = os.getenv('DSTROOT') + os.getenv('PUBLIC_HEADERS_FOLDER_PATH') else: # External build output_dir = os.getenv('BUILT_PRODUCTS_DIR') + os.getenv('PUBLIC_HEADERS_FOLDER_PATH') def replace(line): match = re.match('#include [<"](.*)[>"]', line) if match: header = match.group(1) match = re.match(r'(?:\.\./)*(EGL|GLES[23]?|KHR)/(.*)', header) if match: return "#include \n" match = re.match(r'(eglext_angle|gl2ext_angle|ShaderVars)\.h', header) if match: return "#include \n" if header == 'export.h': return "#include \n" return line os.chdir(output_dir) for filename in os.listdir('.'): if not os.path.isfile(filename): continue if not (filename.endswith('.h') or filename.endswith('.inc')): continue lines = open(filename, 'r').readlines() newLines = [replace(line) for line in lines] if lines != newLines: open(filename, 'w').writelines(newLines) print("Postprocessed ANGLE header {}".format(filename))