| #!/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 <ANGLE/gl2.h>"). |
| # |
| # 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 <GLES2/gl2.h> 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 <ANGLE/" + match.group(2) + ">\n" |
| match = re.match(r'(eglext_angle|gl2ext_angle|ShaderVars)\.h', header) |
| if match: |
| return "#include <ANGLE/" + match.group(1) + ".h>\n" |
| if header == 'export.h': |
| return "#include <ANGLE/export.h>\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)) |