Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 24 additions & 5 deletions easybuild/easyblocks/generic/juliapackage.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
from easybuild.framework.easyconfig import CUSTOM
from easybuild.framework.extensioneasyblock import ExtensionEasyBlock
from easybuild.tools.build_log import EasyBuildError
from easybuild.tools.modules import get_software_root, get_software_version
from easybuild.tools.modules import get_software_root
from easybuild.tools.filetools import copy_dir, mkdir
from easybuild.tools.run import run_shell_cmd
from easybuild.tools.utilities import trace_msg
Expand Down Expand Up @@ -118,11 +118,31 @@ def get_julia_env(env_var):

return parsed_var

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._julia_version = None

@property
def julia_version(self) -> str:
"""Needs to get Julia version from dependencies to allow --sanity-check-only to generate the fake module"""
if self._julia_version is None:
deps = self.cfg.dependencies(runtime_only=True)
for dep in deps:
if dep['name'] == 'Julia':
self._julia_version = dep['version']
break
else:
raise EasyBuildError(
"Julia not included as dependency, cannot determine Julia version for installation of: %s",
self.name
)
return self._julia_version

def julia_env_path(self, absolute=True, base=True):
"""
Return path to installation environment file.
"""
julia_version = get_software_version('Julia').split('.')
julia_version = self.julia_version.split('.')
env_dir = "v{}.{}".format(*julia_version[:2])
project_env = os.path.join("environments", env_dir, "Project.toml")

Expand All @@ -137,8 +157,7 @@ def set_pkg_offline(self):
"""Enable offline mode of Julia Pkg"""

if not self.cfg['download_pkg_deps']:
julia_version = get_software_version('Julia')
if LooseVersion(julia_version) >= LooseVersion('1.5'):
if LooseVersion(self.julia_version) >= LooseVersion('1.5'):
# Enable offline mode of Julia Pkg
# https://pkgdocs.julialang.org/v1/api/#Pkg.offline
env.setvar('JULIA_PKG_OFFLINE', 'true')
Expand All @@ -148,7 +167,7 @@ def set_pkg_offline(self):
"Enable easyconfig option 'download_pkg_deps' to allow installation "
"with any extra downloaded dependencies."
)
raise EasyBuildError(errmsg, julia_version)
raise EasyBuildError(errmsg, self.julia_version)

def prepare_julia_env(self):
"""
Expand Down
6 changes: 5 additions & 1 deletion test/easyblocks/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ def innertest(self):
write_file(os.path.join(TMPDIR, 'modules', 'all', prgenv, '1.2.3'), "#%Module")

# add empty module files for dependencies that are required for testing easyblocks
for dep_mod_name in ('foo/1.2.3.4.5', 'PyTorch/1.12.1'):
for dep_mod_name in ('foo/1.2.3.4.5', 'PyTorch/1.12.1', "Julia/1.6.7"):
write_file(os.path.join(TMPDIR, 'modules', 'all', dep_mod_name), "#%Module")

for easyblock in easyblocks:
Expand Down Expand Up @@ -505,6 +505,10 @@ def innertest(self):
elif eb_fn in ['python.py', 'tkinter.py']:
# custom easyblock for Python (ensurepip) requires version >= 3.4.0
innertest = make_inner_test(easyblock, name=eb_fn.replace('_', '-')[:-3], version='3.4.0')
elif eb_fn in ['juliapackage.py', 'juliabundle.py']:
# Building a Julia package/bundle requires Julia as a dependency
extra_txt = 'dependencies = [("Julia", "1.6.7")]'
innertest = make_inner_test(easyblock, name='julia-stuff', extra_txt=extra_txt)
elif eb_fn == 'torchvision.py':
# torchvision easyblock requires that PyTorch is listed as dependency
extra_txt = "dependencies = [('PyTorch', '1.12.1')]"
Expand Down
Loading