add irep and lua-lang virtual dependency (#22492)

This adds a package for `irep`, a tool for reading `lua` input decks from 
Fortran, C, and C++.

`irep` can be built with either `lua` or `luajit`.  To address this, we also add
a virtual package for lua called `lua-lang`.  `luajit` isn't, by default, a drop-in
replacement for `lua`, but we add a `+lualinks` variant to it that adds symlinks
that make it behave like `lua@5.1`.  With this variant enabled, it provides the
`lua-lang` virtual.  `lua` always provides `lua-lang`.

- [x] add `irep` package
- [x] add `+lualinks` variant to `lua-luajit`
- [x] create `lua-lang` virtual, provided by `lua` and `luajit+lualinks`

Co-authored-by: Kayla Richarda Butler <butler59@quartz1148.llnl.gov>
Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
This commit is contained in:
Richarda Butler 2021-06-15 17:50:04 -07:00 committed by GitHub
parent 5971372be7
commit 1c44912f9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 0 deletions

View File

@ -34,6 +34,7 @@ packages:
java: [openjdk, jdk, ibm-java]
jpeg: [libjpeg-turbo, libjpeg]
lapack: [openblas, amdlibflame]
lua-lang: [lua, lua-luajit]
mariadb-client: [mariadb-c-client, mariadb]
mkl: [intel-mkl]
mpe: [mpe2]

View File

@ -0,0 +1,18 @@
# 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)
class Irep(CMakePackage):
"""IREP is a tool that enables mixed-language simulation codes to use a
common, Lua-based format for their input decks. Essentially, the input
format is a set of tables -- Lua's one (and only?) data structure."""
homepage = "https://irep.readthedocs.io/"
url = "https://github.com/LLNL/irep/archive/refs/tags/v1.0.0.tar.gz"
maintainers = ['tomstitt', 'kennyweiss']
version('1.0.0', 'b84203ac92de824dbdc672de45cfdb9609373791c4ee84a5201fa6e4ccecc1a4')
depends_on('lua-lang')

View File

@ -3,6 +3,7 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import glob
import os
from spack import *
@ -18,6 +19,34 @@ class LuaLuajit(MakefilePackage):
conflicts('@:2.0.5', when='target=aarch64:')
variant('lualinks', default=False, description="add symlinks to make lua-luajit a drop-in lua replacement")
provides("lua-lang", when="+lualinks")
@run_after("install")
def install_links(self):
if not self.spec.satisfies("+lualinks"):
return
with working_dir(self.prefix.bin):
luajit = os.readlink(self.prefix.bin.luajit)
symlink(luajit, "lua")
with working_dir(self.prefix.include):
luajit_include_subdirs = glob.glob(
os.path.join(self.prefix.include, "luajit*"))
assert len(luajit_include_subdirs) == 1
symlink(luajit_include_subdirs[0], "lua")
with working_dir(self.prefix.lib):
luajit_libnames = glob.glob(
os.path.join(self.prefix.lib, "libluajit*.so*"))
real_lib = next(
lib for lib in luajit_libnames
if os.path.isfile(lib) and not os.path.islink(lib)
)
symlink(real_lib, "liblua.so")
@property
def headers(self):
hdrs = find_headers('luajit', self.prefix.include, recursive=True)

View File

@ -34,6 +34,8 @@ class Lua(Package):
extendable = True
provides('lua-lang')
depends_on('ncurses+termlib')
depends_on('readline')
# luarocks needs unzip for some packages (e.g. lua-luaposix)