blob: 3225a8bd20aefd7d7113df9c0ecbb3ca47aa5747 [file] [log] [blame]
#!/usr/bin/env python3
import argparse
from collections import defaultdict
from pathlib import Path
import intellij
def write_spec_file(out, mac_bundle_name, ides):
sdk_versions = {}
for platform, ide in ides.items():
sdk_versions[platform] = ide.version()
if len(set(sdk_versions.values())) > 1:
raise ValueError(
f"Major and minor versions differ between OS platforms! {sdk_versions}"
)
with open(out, "w") as file:
file.write("# Auto-generated file, do not edit manually.\n")
file.write("SPEC = struct(\n")
file.write(f' major_version = "{ide.major}",\n')
file.write(f' minor_version = "{ide.minor}",\n')
common_jars = set.intersection(
*[ide.platform_jars for ide in ides.values()]
)
sdk_jars = {
"_" + platform: ide.platform_jars - common_jars
for platform, ide in ides.items()
}
sdk_jars[""] = common_jars
for s, jars in sorted(sdk_jars.items()):
file.write(f" jars{s} = [\n")
for jar in sorted(jars):
file.write(' "' + jar + '",\n')
file.write(" ],\n")
all_plugin_ids = set.union(
*[set(ide.plugin_jars.keys()) for ide in ides.values()]
)
common_plugin_jars = defaultdict(set)
for id in all_plugin_ids:
jar_sets = [
ide.plugin_jars[id] if id in ide.plugin_jars else set()
for ide in ides.values()
]
common_plugin_jars[id] = set.intersection(*jar_sets)
plugin_jars = {}
plugin_jars[""] = common_plugin_jars
for platform, ide in ides.items():
plugin_jars["_" + platform] = {}
for id, jars in ide.plugin_jars.items():
plugin_jars["_" + platform][id] = jars - common_plugin_jars[id]
for s, pjars in sorted(plugin_jars.items()):
file.write(f" plugin_jars{s} = {{\n")
for plugin in sorted(pjars.keys()):
jars = pjars[plugin]
if jars:
file.write(' "' + plugin + '": [\n')
for jar in sorted(jars):
file.write(' "' + jar[1:] + '",\n')
file.write(" ],\n")
file.write(" },\n")
file.write(f' mac_bundle_name = "{mac_bundle_name}",\n')
file.write(")\n")
def main(args):
ide = intellij.IntelliJ.create(intellij.LINUX, args.path.absolute())
write_spec_file(args.out.absolute(), "", {intellij.LINUX: ide})
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"--path", default=".", dest="path", type=Path, help="The path to the IDE"
)
parser.add_argument(
"--out", default="spec.bzl", dest="out", type=Path, help="Where to save the bzl"
)
args = parser.parse_args()
main(args)