From 00e9e1b3c7bda5db7b47416932728a5832ff3e06 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Tue, 18 Aug 2020 13:17:08 -0500 Subject: Java: add spack external find support (#18006) --- var/spack/repos/builtin/packages/jdk/package.py | 19 ++++++++++++++++--- var/spack/repos/builtin/packages/openjdk/package.py | 15 ++++++++++++++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/var/spack/repos/builtin/packages/jdk/package.py b/var/spack/repos/builtin/packages/jdk/package.py index a90ddff904..31510d739e 100644 --- a/var/spack/repos/builtin/packages/jdk/package.py +++ b/var/spack/repos/builtin/packages/jdk/package.py @@ -3,11 +3,11 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack.util.prefix import Prefix -from spack import * +import os +import re import llnl.util.tty as tty -import os +from spack.util.prefix import Prefix class Jdk(Package): @@ -79,6 +79,19 @@ class Jdk(Package): # can symlink all *.jar files to `prefix.lib.ext` extendable = True + executables = ['^java$'] + + @classmethod + def determine_version(cls, exe): + output = Executable(exe)('-version', output=str, error=str) + + # Make sure this is actually Oracle JDK, not OpenJDK + if 'openjdk' in output: + return None + + match = re.search(r'\(build (\S+)\)', output) + return match.group(1).replace('+', '_') if match else None + @property def home(self): """Most of the time, ``JAVA_HOME`` is simply ``spec['java'].prefix``. diff --git a/var/spack/repos/builtin/packages/openjdk/package.py b/var/spack/repos/builtin/packages/openjdk/package.py index 9b520ded99..4c50bdfc2c 100644 --- a/var/spack/repos/builtin/packages/openjdk/package.py +++ b/var/spack/repos/builtin/packages/openjdk/package.py @@ -3,9 +3,9 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack import * import os import platform +import re # If you need to add a new version, please be aware that: @@ -60,6 +60,19 @@ class Openjdk(Package): # can symlink all *.jar files to `prefix.lib.ext` extendable = True + executables = ['^java$'] + + @classmethod + def determine_version(cls, exe): + output = Executable(exe)('-version', output=str, error=str) + + # Make sure this is actually OpenJDK, not Oracle JDK + if 'openjdk' not in output: + return None + + match = re.search(r'\(build (\S+)\)', output) + return match.group(1).replace('+', '_') if match else None + @property def home(self): """Most of the time, ``JAVA_HOME`` is simply ``spec['java'].prefix``. -- cgit v1.2.3-70-g09d2