mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
By adding `java/kotlinc-extractor/deps/dev` to `PATH`, one gets a `kotlinc` wrapper that takes care of downloading and extracting the desired version of `kotlinc` on demand. The desired version can be selected with `kotlinc --select x.y.z`, or left to the current default of `1.9.0`. Moreover, this default version is integrated with the Bazel build, so that when using this wrapper, changes in the selected version will be picked up to define the default single version kotlin extractor build, without needing to do anything else (like `bazel fetch --force` or similar). Selected and installed version data is stored in `.gitignore`d files in the same directory, and can be cleared with `kotlinc --clear`.
47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
# when updating this list, `bazel mod tidy` should be run from `codeql` to update `MODULE.bazel`
|
|
VERSIONS = [
|
|
"1.5.0",
|
|
"1.5.10",
|
|
"1.5.20",
|
|
"1.5.30",
|
|
"1.6.0",
|
|
"1.6.20",
|
|
"1.7.0",
|
|
"1.7.20",
|
|
"1.8.0",
|
|
"1.9.0-Beta",
|
|
"1.9.20-Beta",
|
|
"2.0.0-RC1",
|
|
]
|
|
|
|
def _version_to_tuple(v):
|
|
# we ignore the tag when comparing versions, for example 1.9.0-Beta <= 1.9.0
|
|
v, _, ignored_tag = v.partition("-")
|
|
return tuple([int(x) for x in v.split(".")])
|
|
|
|
def version_less(lhs, rhs):
|
|
return _version_to_tuple(lhs) < _version_to_tuple(rhs)
|
|
|
|
def get_language_version(version):
|
|
major, minor, _ = _version_to_tuple(version)
|
|
return "%s.%s" % (major, minor)
|
|
|
|
def _basename(path):
|
|
if "/" not in path:
|
|
return path
|
|
return path[path.rindex("/") + 1:]
|
|
|
|
def get_compatilibity_sources(version, dir):
|
|
prefix = "%s/v_" % dir
|
|
available = native.glob(["%s*" % prefix], exclude_directories = 0)
|
|
|
|
# we want files with the same base name to replace ones for previous versions, hence the map
|
|
srcs = {}
|
|
for d in available:
|
|
compat_version = d[len(prefix):].replace("_", ".")
|
|
if version_less(version, compat_version):
|
|
break
|
|
files = native.glob(["%s/*.kt" % d])
|
|
srcs |= {_basename(f): f for f in files}
|
|
return srcs.values()
|