From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../python/thirdroc/thirdroc/cmake_define_files.py | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 comm/python/thirdroc/thirdroc/cmake_define_files.py (limited to 'comm/python/thirdroc/thirdroc/cmake_define_files.py') diff --git a/comm/python/thirdroc/thirdroc/cmake_define_files.py b/comm/python/thirdroc/thirdroc/cmake_define_files.py new file mode 100644 index 0000000000..2c53bf2d54 --- /dev/null +++ b/comm/python/thirdroc/thirdroc/cmake_define_files.py @@ -0,0 +1,102 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import argparse +import os +import re +import sys + +from buildconfig import topobjdir +from mozbuild.backend.configenvironment import PartialConfigEnvironment + + +def define_type(string): + vals = string.split("=", 1) + if len(vals) == 1: + vals.append(1) + elif vals[1].isdecimal(): + vals[1] = int(vals[1]) + return tuple(vals) + + +def process_cmake_define_file(output, input_file, extra_defines): + """Creates the given config header. A config header is generated by + taking the corresponding source file and replacing some #define/#undef + occurrences: + "#undef NAME" is turned into "#define NAME VALUE" + "#cmakedefine NAME" is turned into "#define NAME VALUE" + "#define NAME" is unchanged + "#define NAME ORIGINAL_VALUE" is turned into "#define NAME VALUE" + "#undef UNKNOWN_NAME" is turned into "/* #undef UNKNOWN_NAME */" + "#cmakedefine UNKNOWN_NAME" is turned into "/* #undef UNKNOWN_NAME */" + Whitespaces are preserved. + """ + + path = os.path.abspath(input_file) + + config = PartialConfigEnvironment(topobjdir) + + defines = dict(config.defines.iteritems()) + defines.update(extra_defines) + + with open(path, "r") as input_file: + r = re.compile( + r'^\s*#\s*(?P[a-z]+)(?:\s+(?P\S+)(?:\s+(?P("[^"]+"|\S+)))?)?', + re.U, + ) + for line in input_file: + m = r.match(line) + if m: + cmd = m.group("cmd") + name = m.group("name") + value = m.group("value") + if name: + if cmd == "define": + if value and name in defines: + line = ( + line[: m.start("value")] + + str(defines[name]) + + line[m.end("value") :] + ) + elif cmd in ("undef", "cmakedefine"): + if name in defines: + line = ( + line[: m.start("cmd")] + + "define" + + line[m.end("cmd") : m.end("name")] + + " " + + str(defines[name]) + + line[m.end("name") :] + ) + else: + line = ( + "/* #undef " + + line[m.start("name") : m.end("name")] + + " */" + + line[m.end("name") :] + ) + + output.write(line) + + +def main(output, *argv): + parser = argparse.ArgumentParser(description="Process define files.") + + parser.add_argument("input", help="Input define file.") + parser.add_argument( + "-D", + type=define_type, + action="append", + dest="extra_defines", + default=[], + help="Additional defines not set at configure time.", + ) + + args = parser.parse_args(argv) + + return process_cmake_define_file(output, args.input, args.extra_defines) + + +if __name__ == "__main__": + sys.exit(main(*sys.argv)) -- cgit v1.2.3