| #!/usr/bin/env python |
| # |
| # Copyright 2017 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| import sys |
| import tempfile |
| |
| skslc = sys.argv[1] |
| clangFormat = sys.argv[2] |
| fetchClangFormat = sys.argv[3] |
| processors = sys.argv[4:] |
| |
| exeSuffix = '.exe' if sys.platform.startswith('win') else ''; |
| targets = [] |
| worklist = tempfile.NamedTemporaryFile(suffix='.worklist', delete=False) |
| |
| # Fetch clang-format if it's not present already. |
| if not os.path.isfile(clangFormat + exeSuffix): |
| subprocess.check_call([sys.executable, fetchClangFormat]); |
| |
| # Build a worklist of all the fragment processors that we want to compile. |
| for p in processors: |
| noExt, _ = os.path.splitext(p) |
| head, tail = os.path.split(noExt) |
| targetDir = os.path.join(head, "generated") |
| if not os.path.isdir(targetDir): |
| os.mkdir(targetDir) |
| target = os.path.join(targetDir, tail) |
| targets.append(target + ".h") |
| targets.append(target + ".cpp") |
| |
| worklist.write(p + "\n") |
| worklist.write(target + ".h\n\n") |
| worklist.write(p + "\n") |
| worklist.write(target + ".cpp\n\n") |
| |
| # Invoke skslc, passing in the worklist. |
| worklist.close() |
| try: |
| output = subprocess.check_output([skslc, worklist.name], stderr=subprocess.STDOUT) |
| except subprocess.CalledProcessError as err: |
| print("### skslc error:\n") |
| print("\n".join(err.output.splitlines())) |
| |
| os.remove(worklist.name) |
| |
| # Invoke clang-format on every generated target. |
| try: |
| output = subprocess.check_output([clangFormat, "--sort-includes=false", "-i"] + targets, |
| stderr=subprocess.STDOUT) |
| except subprocess.CalledProcessError as err: |
| print("### clang-format error:\n") |
| print("\n".join(err.output.splitlines())) |