) from pants.option.global_options import GlobalOptions from pants.util.frozendict import FrozenDict from pants.util.logging import LogLevel from pants.util.ordered_set import FrozenOrderedSet logger = logging.getLogger(__name__) PARSER_SCALA_VERSION = "2.13.7" SCALAMETA_VERSION = "4.4.30" CIRCE_VERSION = "0.14.1" PARSER_SCALA_VERSION_MAJOR_MINOR = ".".join(PARSER_SCALA_VERSION.split(".")[0:2]) SCALAMETA_DEPENDENCIES = [ Coordinate.from_coord_str(s) for s in [ "org.scalameta:scalameta_2.13:4.4.30", "org.scala-lang:scala-library:2.13.7", "com.thesamet.scalapb:scalapb-runtime_2.13:0.11.4", "org.scalameta:parsers_2.13:4.4.30", "org.scala-lang:scala-compiler:2.13.7", "net.java.dev.jna:jna:5.8.0", "org.scalameta:trees_2.13:4.4.30", "org.scalameta:common_2.13:4.4.30", "com.lihaoyi:sourcecode_2.13:0.2.7", "org.jline:jline:3.20.0", "org.scalameta:fastparse-v2_2.13:2.3.1", "org.scala-lang.modules:scala-collection-compat_2.13:2.4.4", "org.scala-lang:scalap:2.13.7", "org.scala-lang:scala-reflect:2.13.7",
async def setup_jdk(coursier: Coursier, javac: JavacSubsystem, bash: BashBinary) -> JdkSetup: nailgun = await Get( ResolvedClasspathEntry, CoursierLockfileEntry( coord=Coordinate.from_coord_str( "com.martiansoftware:nailgun-server:0.9.1"), file_name="nailgun-server-0.9.1.jar", direct_dependencies=Coordinates(), dependencies=Coordinates(), file_digest=FileDigest( fingerprint= "4518faa6bf4bd26fccdc4d85e1625dc679381a08d56872d8ad12151dda9cef25", serialized_bytes_length=32927, ), ), ) if javac.options.jdk == "system": coursier_jdk_option = "--system-jvm" else: coursier_jdk_option = f"--jvm={javac.options.jdk}" java_home_command = f"{coursier.coursier.exe} java-home {coursier_jdk_option}" java_version_result = await Get( FallibleProcessResult, Process( argv=( bash.path, "-c", f"$({java_home_command})/bin/java -version", ), input_digest=coursier.digest, description=f"Ensure download of JDK {coursier_jdk_option}.", cache_scope=ProcessCacheScope.PER_RESTART_SUCCESSFUL, ), ) if java_version_result.exit_code != 0: raise ValueError( f"Failed to locate Java for JDK `{javac.options.jdk}`:\n" f"{java_version_result.stderr.decode('utf-8')}") java_version = java_version_result.stdout.decode("utf-8").strip() # TODO: Locate `ln`. jdk_preparation_script = textwrap.dedent(f"""\ # pants javac script using Coursier {coursier_jdk_option}. `java -version`: {java_version}" set -eu /bin/ln -s "$({java_home_command})" "{JdkSetup.java_home}" exec "$@" """) jdk_preparation_script_digest = await Get( Digest, CreateDigest([ FileContent( JdkSetup.jdk_preparation_script, jdk_preparation_script.encode("utf-8"), is_executable=True, ), ]), ) return JdkSetup( digest=await Get( Digest, MergeDigests([ coursier.digest, jdk_preparation_script_digest, nailgun.digest, ]), ), nailgun_jar=nailgun.file_name, )