| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/usr/bin/python3
- # Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
- # All rights reserved.
- # Code licensed under the BSD License.
- # http://www.anki3d.org/LICENSE
- # Generates the dependencies of a shader program file. Output consumed by CMake
- import optparse
- import re
- def parse_commandline():
- """ Parse the command line arguments """
- parser = optparse.OptionParser(usage="usage: %prog [options]",
- description="This script gathers all the include files of a shader program")
- parser.add_option("-i", "--input", dest="inp", type="string", help="Inpute .ankiprog file")
- (options, args) = parser.parse_args()
- if not options.inp:
- parser.error("argument is missing")
- return options.inp
- def parse_file(fname):
- file = open(fname, mode="r")
- txt = file.read()
- my_includes = re.findall(r"\s*#\s*include\ <(.*)>", txt)
- agregated_includes = []
- for include in my_includes:
- # Skip non-shaders
- if "AnKi/Shaders" not in include:
- continue
- agregated_includes.append(include)
- # Append recursively
- other_includes = parse_file(include)
- for other_include in other_includes:
- if other_include not in agregated_includes:
- agregated_includes.append(other_include)
- return agregated_includes
- def main():
- input_fname = parse_commandline()
- includes = parse_file(input_fname)
- str = ""
- for i in range(len(includes)):
- include = includes[i]
- include = include.replace("AnKi/Shaders/", "")
- if i < len(includes) - 1:
- str += include + ";" # CMake wants ; as a separator
- else:
- str += include
- print(str, end="") # No newline at the end
- if __name__ == "__main__":
- main()
|