0
0
mirror of https://github.com/mumble-voip/mumble.git synced 2024-12-04 04:27:20 +00:00
mumble-voip_mumble/scripts/generate_configure_cmake_script.py
Robert Adam 330c356e71 MAINT: Remove copyright year from all copyright notices
Keeping these up-to-date is just super tedious and they don't really
fulfill any purpose these days.
2024-09-30 18:06:20 +02:00

80 lines
2.7 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Copyright The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file at the root of the
# Mumble source tree or at <https://www.mumble.info/LICENSE>.
from typing import Tuple
from typing import List
from typing import Dict
import argparse
import sys
def parse_key_value_pair(pair: str) -> Tuple[str, str]:
assert "=" in pair
idx = pair.find("=")
key = pair[: idx].strip()
value = pair[idx + 1:].strip()
if value[0] == value[-1] and value[0] in ["\"", "'"]:
# Value is enclosed in quotes -> Remove those
value = value[1: -1]
return (key, value)
def parse_key_value_pairs(pairs: List[str]) -> Dict[str, str]:
key_value_pairs = {}
for currentPair in pairs:
key, value = parse_key_value_pair(currentPair)
key_value_pairs[key] = value
return key_value_pairs
def main():
parser = argparse.ArgumentParser(description="This script generates a cmake script whose sole purpose is to invoke configure_file" +
" on a given set of files.")
parser.add_argument(
"--variables", help="Specify a number of variables and their content as key-value-pairs", metavar="NAME=VALUE", nargs="+")
parser.add_argument("--files", help="Specify the to-be-configured files and their output path as key-value-pairs", metavar="IN-FILE=OUT-FILE",
nargs="+", required=True)
parser.add_argument("--output", help="The path to the file to which to write the generated content. If not given, the content is" +
" written to stdout")
parser.add_argument("--at-only", help="Passes the @ONLY option to configure_file", action="store_true", default=False)
args = parser.parse_args()
variables = parse_key_value_pairs(args.variables) if args.variables else {}
files = parse_key_value_pairs(args.files) if args.files else {}
cmake_content = "# Defining variables\n"
for currentVar in variables.keys():
if " " in currentVar:
print("[ERROR]: Variable name with whitespace \"%s\"" % currentVar)
sys.exit(1)
cmake_content += "set(%s \"%s\")\n" % (currentVar, variables[currentVar])
cmake_content += "\n"
cmake_content += "# Configuring files\n"
for currentInFile in files.keys():
cmake_content += "configure_file(\"%s\" \"%s\" %s)\n" % (currentInFile, files[currentInFile], "@ONLY" if args.at_only else "")
if args.output:
with open(args.output, "w") as outFile:
outFile.write(cmake_content)
else:
print(cmake_content)
if __name__ == "__main__":
main()