Files
spack/var/spack/repos/builtin/packages/julia/package.py
Vanessasaurus 6a26322eb3 fixing "problems in speck" as identified by repology (#25491)
Most of these are perl packages that need to point to the meta docs site,
and then a fair amount of http addresses that need to be https, and then
the rest are usually documentation sites that no longer exist or were
otherwise changes

Signed-off-by: vsoch <vsoch@users.noreply.github.com>

Co-authored-by: vsoch <vsoch@users.noreply.github.com>
2021-08-26 15:05:24 -05:00

207 lines
8.4 KiB
Python

# Copyright 2013-2021 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)
import os
from spack import *
class Julia(Package):
"""The Julia Language: A fresh approach to technical computing"""
homepage = "https://julialang.org"
url = "https://github.com/JuliaLang/julia/releases/download/v0.4.3/julia-0.4.3-full.tar.gz"
git = "https://github.com/JuliaLang/julia.git"
maintainers = ['glennpj']
version('master', branch='master')
version('1.6.2', sha256='01241120515cb9435b96179cf301fbd2c24d4405f252588108d13ceac0f41c0a')
version('1.6.1', sha256='71d8e40611361370654e8934c407b2dec04944cf3917c5ecb6482d6b85ed767f')
version('1.6.0', sha256='1b05f42c9368bc2349c47363b7ddc175a2da3cd162d52b6e24c4f5d4d6e1232c')
version('1.5.4', sha256='dbfb8cd544b223eff70f538da7bb9d5b6f76fd0b00dd2385e6254e74ad4e892f')
version('1.5.3', sha256='fb69337ca037576758547c7eed9ae8f153a9c052318327b6b7f1917408c14d91')
version('1.5.2', sha256='850aed3fe39057488ec633f29af705f5ada87e3058fd65e48ad26f91b713a19a')
version('1.5.1', sha256='1d0debfccfc7cd07047aa862dd2b1a96f7438932da1f5feff6c1033a63f9b1d4')
version('1.5.0', sha256='4a6ffadc8dd04ca0b7fdef6ae203d0af38185e57b78f7c0b972c4707354a6d1b')
version('1.4.2', sha256='948c70801d5cce81eeb7f764b51b4bfbb2dc0b1b9effc2cb9fc8f8cf6c90a334')
version('1.4.1', sha256='b21585db55673ac0668c163678fcf2aad11eb7c64bb2aa03a43046115fab1553')
version('1.4.0', sha256='880c73a08296ce8d94ad9605149f2a2b2b028e7202a700ef725da899300b8be9')
version('1.3.1', sha256='053908ec2706eb76cfdc998c077de123ecb1c60c945b4b5057aa3be19147b723')
version('1.2.0', sha256='2419b268fc5c3666dd9aeb554815fe7cf9e0e7265bc9b94a43957c31a68d9184')
version('1.1.1', sha256='3c5395dd3419ebb82d57bcc49dc729df3b225b9094e74376f8c649ee35ed79c2')
version('1.0.0', sha256='1a2497977b1d43bb821a5b7475b4054b29938baae8170881c6b8dd4099d133f1')
version('0.6.2', sha256='1e34c13091c9ddb47cf87a51566d94a06613f3db3c483b8f63b276e416dd621b')
version('0.5.2', sha256='f5ef56d79ed55eacba9fe968bb175317be3f61668ef93e747d76607678cc01dd')
version('0.5.1', sha256='533b6427a1b01bd38ea0601f58a32d15bf403f491b8415e9ce4305b8bc83bb21')
version('0.5.0', sha256='732478536b6dccecbf56e541eef0aed04de0e6d63ae631b136e033dda2e418a9')
version('0.4.7', sha256='d658d5bd5fb79b19f3c01cadb9aba8622ca8a12a4b687acc7d99c21413623570')
version('0.4.6', sha256='4c23c9fc72398014bd39327c2f7efd3a301884567d4cb2a89105c984d4d633ba')
version('0.4.5', sha256='cbf361c23a77e7647040e8070371691083e92aa93c8a318afcc495ad1c3a71d9')
version('0.4.3', sha256='2b9df25a8f58df8e43038ec30bae195dfb160abdf925f3fa193b59d40e4113c5')
variant('cxx', default=False, description='Prepare for Julia Cxx package')
variant('mkl', default=False, description='Use Intel MKL')
patch('gc.patch', when='@0.4:0.4.5')
patch('openblas.patch', when='@0.4:0.4.5')
patch('armgcc.patch', when='@1.0.0:1.1.1 %gcc@:5.9 target=aarch64:')
# Build-time dependencies:
# depends_on('awk')
depends_on('m4', type='build')
# depends_on('pkgconfig')
# Python only needed to build LLVM?
depends_on('python@2.7:2.8', type='build', when='@:1.1')
depends_on('python@2.7:', type='build', when='@1.2:')
depends_on('cmake@2.8:', type='build', when='@1.0:')
depends_on('cmake@:3.11', type='build', when='@:1.4')
depends_on('git', type='build', when='@master')
# Combined build-time and run-time dependencies:
# (Yes, these are run-time dependencies used by Julia's package manager.)
depends_on('cmake @2.8:', type=('build', 'run'), when='@:0.6')
depends_on('curl', when='@:0.5.0')
depends_on('git', type=('build', 'run'), when='@:0.4')
depends_on('openssl@:1.0', when='@:0.5.0')
depends_on('mkl', when='+mkl')
# Run-time dependencies:
# depends_on('arpack')
# depends_on('fftw +float')
# depends_on('gmp')
# depends_on('libgit')
# depends_on('mpfr')
# depends_on('openblas')
# depends_on('pcre2')
# ARPACK: Requires BLAS and LAPACK; needs to use the same version
# as Julia.
# BLAS and LAPACK: Julia prefers 64-bit versions on 64-bit
# systems. OpenBLAS has an option for this; make it available as
# variant.
# FFTW: Something doesn't work when using a pre-installed FFTW
# library; need to investigate.
# GMP, MPFR: Something doesn't work when using a pre-installed
# FFTW library; need to investigate.
# LLVM: Julia works only with specific versions, and might require
# patches. Thus we let Julia install its own LLVM.
# Other possible dependencies:
# USE_SYSTEM_OPENLIBM=0
# USE_SYSTEM_OPENSPECFUN=0
# USE_SYSTEM_DSFMT=0
# USE_SYSTEM_SUITESPARSE=0
# USE_SYSTEM_UTF8PROC=0
# USE_SYSTEM_LIBGIT2=0
conflicts('+cxx', when='@:0.6', msg='Variant cxx requires Julia >= 1.0.0')
conflicts('@:0.7.0', when='target=aarch64:')
# GCC conflicts
conflicts('@:0.5.1', when='%gcc@8:', msg='Julia <= 0.5.1 needs GCC <= 7')
# Building recent versions of Julia with Intel is untested and unsupported
# by the Julia project, https://github.com/JuliaLang/julia/issues/23407.
conflicts('@0.6:', when='%intel',
msg='Only Julia <= 0.5.x can be built with the Intel compiler.')
conflicts('%intel', when='~mkl',
msg='Building with the Intel compiler requires the mkl variant '
'(+mkl)')
def setup_build_environment(self, env):
# The julia build can have trouble with finding GCC libraries with the
# spack compiler.
if self.compiler.name == 'gcc':
gcc_base = os.path.split(os.path.split(self.compiler.cc)[0])[0]
env.prepend_path('LD_LIBRARY_PATH', join_path(gcc_base, 'lib64'))
def install(self, spec, prefix):
# Julia needs git tags
if os.path.isfile('.git/shallow'):
git = which('git')
git('fetch', '--unshallow')
# Explicitly setting CC, CXX, or FC breaks building libuv, one
# of Julia's dependencies. This might be a Darwin-specific
# problem. Given how Spack sets up compilers, Julia should
# still use Spack's compilers, even if we don't specify them
# explicitly. Potential options are
# 'CC=cc',
# 'CXX=c++',
# 'FC=fc',
# 'USE_SYSTEM_ARPACK=1',
# 'override USE_SYSTEM_CURL=1',
# 'USE_SYSTEM_FFTW=1',
# 'USE_SYSTEM_GMP=1',
# 'USE_SYSTEM_MPFR=1',
# 'USE_SYSTEM_PCRE=1',
options = [
'prefix={0}'.format(prefix)
]
if '@:0.5.0' in spec:
options += [
'override USE_SYSTEM_CURL=1'
]
if '+cxx' in spec:
options += [
'BUILD_LLVM_CLANG=1',
'LLVM_ASSERTIONS=1',
'USE_LLVM_SHLIB=1'
]
if spec.target.family == 'aarch64':
options += [
'JULIA_CPU_TARGET=generic',
'MARCH=armv8-a+crc'
]
if spec.target.family == 'x86_64' or spec.target.family == 'x86':
if spec.target == 'x86_64':
options += [
'JULIA_CPU_TARGET=generic'
]
else:
target_str = str(spec.target).replace('_', '-')
if target_str == "zen":
target_str = "znver1"
if target_str == "zen2":
target_str = "znver2"
options += [
'JULIA_CPU_TARGET={0}'.format(target_str)
]
if '%intel' in spec:
options += [
'USEICC=1',
'USEIFC=1',
'USE_INTEL_LIBM=1'
]
if '+mkl' in spec:
options += [
'USE_INTEL_MKL=1',
]
with open('Make.user', 'w') as f:
f.write('\n'.join(options) + '\n')
make()
make('install')
# Julia's package manager needs a certificate
if '@:0.5.0' in spec:
cacert_dir = join_path(prefix, 'etc', 'curl')
mkdirp(cacert_dir)
cacert_file = join_path(cacert_dir, 'cacert.pem')
curl = which('curl')
curl('--create-dirs',
'--output', cacert_file,
'https://curl.haxx.se/ca/cacert.pem')