diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/ibm-java/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/ibm-java/package.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/ibm-java/package.py b/var/spack/repos/builtin/packages/ibm-java/package.py new file mode 100644 index 0000000000..ec3bd34442 --- /dev/null +++ b/var/spack/repos/builtin/packages/ibm-java/package.py @@ -0,0 +1,68 @@ +# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack import * +import platform +import os + + +class IbmJava(Package): + """Binary distribution of the IBM Java Software Development Kit + for big and little-endian powerpc (power7, 8 and 9).""" + + homepage = "https://developer.ibm.com/javasdk/" + + # There are separate tar files for big and little-endian machine + # types. When we add more versions, then turn this into a mapping + # from version and machine type to sha256sum. + mach = platform.machine() + if mach == 'ppc64le': + sha = 'dec6434d926861366c135aac6234fc28b3e7685917015aa3a3089c06c3b3d8f0' + else: + sha = 'd39ce321bdadd2b2b829637cacf9c1c0d90235a83ff6e7dcfa7078faca2f212f' + + version('8.0.5.30', sha256=sha, expand=False) + + provides('java@8') + + conflicts('target=x86_64', msg='ibm-java is only available for ppc64 and ppc64le') + + # This assumes version numbers are 4-tuples: 8.0.5.30 + def url_for_version(self, version): + # Convert 8.0.5.30 to 8.0-5.30 for the file name. + dash = '{0}.{1}-{2}.{3}'.format(*(str(version).split('.'))) + + url = ('http://public.dhe.ibm.com/ibmdl/export/pub/systems/cloud' + '/runtimes/java/{0}/linux/{1}/ibm-java-sdk-{2}-{1}' + '-archive.bin').format(version, self.mach, dash) + + return url + + def setup_environment(self, spack_env, run_env): + run_env.set('JAVA_HOME', self.prefix) + + def install(self, spec, prefix): + archive = os.path.basename(self.stage.archive_file) + + # The archive.bin file is quite fussy and doesn't work as a + # symlink. + if os.path.islink(archive): + targ = os.readlink(archive) + os.unlink(archive) + copy(targ, archive) + + # The properties file is how we avoid an interactive install. + prop = 'properties' + with open(prop, 'w') as file: + file.write('INSTALLER_UI=silent\n') + file.write('USER_INSTALL_DIR=%s\n' % prefix) + file.write('LICENSE_ACCEPTED=TRUE\n') + + # Running the archive file installs everything. + set_executable(archive) + inst = Executable(join_path('.', archive)) + inst('-f', prop) + + return |