summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorTom Scogland <scogland1@llnl.gov>2016-05-14 16:03:42 -0700
committerTom Scogland <scogland1@llnl.gov>2016-05-14 16:18:26 -0700
commitb5979b13e3f9bcf3e151b494bb2a557aaabedeff (patch)
treeba901df5522365c7f6e39a369b836cffa49c08ea /var
parent4a6ec6377d5101d44a73e99e1a67cfd8f5f8a694 (diff)
downloadspack-b5979b13e3f9bcf3e151b494bb2a557aaabedeff.tar.gz
spack-b5979b13e3f9bcf3e151b494bb2a557aaabedeff.tar.bz2
spack-b5979b13e3f9bcf3e151b494bb2a557aaabedeff.tar.xz
spack-b5979b13e3f9bcf3e151b494bb2a557aaabedeff.zip
complete lua rework, also module path fix
This is a complete rework of the lua package, it also allows the environment modification classes to handle paths that are not separated by colons, and uses the support for same in TCL modules as well. The biggest difference is the handling for lua extension packages, which now have their paths set correctly by the lua parent package, and have access to both lua and luarocks as installation tools. See the luaposix package for what should be required for most lua packages after this.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/lua-luaposix/package.py16
-rw-r--r--var/spack/repos/builtin/packages/lua/package.py76
2 files changed, 92 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/lua-luaposix/package.py b/var/spack/repos/builtin/packages/lua-luaposix/package.py
new file mode 100644
index 0000000000..d0606b71f7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lua-luaposix/package.py
@@ -0,0 +1,16 @@
+from spack import *
+import glob
+
+class LuaLuaposix(Package):
+ """Lua posix bindings, including ncurses"""
+ homepage = "https://github.com/luaposix/luaposix/"
+ url = "https://github.com/luaposix/luaposix/archive/release-v33.4.0.tar.gz"
+
+ version('33.4.0', 'b36ff049095f28752caeb0b46144516c')
+
+ extends("lua")
+
+ def install(self, spec, prefix):
+ rockspec = glob.glob('luaposix-*.rockspec')
+ print rockspec
+ luarocks('--tree=' + prefix, 'install', rockspec[0])
diff --git a/var/spack/repos/builtin/packages/lua/package.py b/var/spack/repos/builtin/packages/lua/package.py
index 9a73a22645..b6ba2d600e 100644
--- a/var/spack/repos/builtin/packages/lua/package.py
+++ b/var/spack/repos/builtin/packages/lua/package.py
@@ -42,9 +42,17 @@ class Lua(Package):
version('5.1.4', 'd0870f2de55d59c1c8419f36e8fac150')
version('5.1.3', 'a70a8dfaa150e047866dc01a46272599')
+ extendable = True
+
depends_on('ncurses')
depends_on('readline')
+ resource(name="luarocks",
+ url="https://keplerproject.github.io/luarocks/releases/luarocks-2.3.0.tar.gz",
+ md5="a38126684cf42b7d0e7a3c7cf485defb",
+ destination="luarocks",
+ placement='luarocks')
+
def install(self, spec, prefix):
if spec.satisfies("=darwin-i686") or spec.satisfies("=darwin-x86_64"):
target = 'macosx'
@@ -56,3 +64,71 @@ class Lua(Package):
make('INSTALL_TOP=%s' % prefix,
'MYLDFLAGS=-L%s -lncurses' % spec['ncurses'].prefix.lib,
'install')
+
+ with working_dir(os.path.join('luarocks','luarocks')):
+ configure('--prefix=' + prefix,
+ '--with-lua=' + prefix)
+ make('build')
+ make('install')
+
+ def append_paths(self, paths, cpaths, path):
+ paths.append(os.path.join(path, '?.lua'))
+ paths.append(os.path.join(path, '?', 'init.lua'))
+ cpaths.append(os.path.join(path, '?.so'))
+
+ def setup_dependent_environment(self, spack_env, run_env, extension_spec):
+ lua_paths = [
+ ]
+ for d in extension_spec.traverse():
+ if d.package.extends(self.spec):
+ lua_paths.append(os.path.join(d.prefix, self.lua_lib_dir))
+ lua_paths.append(os.path.join(d.prefix, self.lua_share_dir))
+
+ lua_patterns = []
+ lua_cpatterns = []
+ for p in lua_paths:
+ if os.path.isdir(p):
+ self.append_paths(lua_patterns, lua_cpatterns, p)
+
+ # Always add this package's paths
+ for p in ( os.path.join(self.spec.prefix, self.lua_lib_dir), os.path.join(self.spec.prefix, self.lua_share_dir)):
+ self.append_paths(lua_patterns, lua_cpatterns, p)
+
+
+ spack_env.set('LUA_PATH', ';'.join(lua_patterns), separator=';')
+ spack_env.set('LUA_CPATH', ';'.join(lua_cpatterns), separator=';')
+
+ # For run time environment set only the path for extension_spec and prepend it to LUAPATH
+ if extension_spec.package.extends(self.spec):
+ run_env.prepend_path('LUA_PATH', ';'.join(lua_patterns), separator=';')
+ run_env.prepend_path('LUA_CPATH', ';'.join(lua_cpatterns), separator=';')
+ # run_env.prepend_path('LUA_PATH', os.path.join(extension_spec.prefix, self.lua_lib_dir, '?.lua'), separator=';')
+ # run_env.prepend_path('LUA_PATH', os.path.join(extension_spec.prefix, self.lua_lib_dir, '?', 'init.lua'), separator=';')
+ # run_env.prepend_path('LUA_CPATH', os.path.join(extension_spec.prefix, self.lua_lib_dir, '?.so'), separator=';')
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('LUA_PATH', os.path.join(self.spec.prefix, self.lua_share_dir, '?.lua'), separator=';')
+ run_env.prepend_path('LUA_PATH', os.path.join(self.spec.prefix, self.lua_share_dir, '?', 'init.lua'), separator=';')
+ run_env.prepend_path('LUA_PATH', os.path.join(self.spec.prefix, self.lua_lib_dir, '?.lua'), separator=';')
+ run_env.prepend_path('LUA_PATH', os.path.join(self.spec.prefix, self.lua_lib_dir, '?', 'init.lua'), separator=';')
+ run_env.prepend_path('LUA_CPATH', os.path.join(self.spec.prefix, self.lua_lib_dir, '?.so'), separator=';')
+
+ @property
+ def lua_lib_dir(self):
+ return os.path.join('lib', 'lua', '%d.%d' % self.version[:2])
+ @property
+ def lua_share_dir(self):
+ return os.path.join('share', 'lua', '%d.%d' % self.version[:2])
+
+ def setup_dependent_package(self, module, ext_spec):
+ """
+ Called before lua modules's install() methods.
+
+ In most cases, extensions will only need to have two lines::
+
+ luarocks('--tree=' + prefix, 'install', rock_spec_path)
+ """
+ # Lua extension builds can have lua and luarocks executable functions
+ module.lua = Executable(join_path(self.spec.prefix.bin, 'lua'))
+ module.luarocks = Executable(join_path(self.spec.prefix.bin, 'luarocks'))
+