Lua's package management system? - lua

What's the Lua's standard package management system and repository? Like brew for Mac OS X, npm for node.js.

There is no standard Lua package management system, but you can try out the following:
LuaRocks - contains a rather large number of Lua modules distributed as rocks. Once LuaRocks is installed, the installation is simple: luarocks install desired-package. On Linux/Unix/Mac, this will install into /usr/local/{share,lib}/lua/5.1, where the Lua interpreter looks for modules.
LuaDist - designed to create an independent standalone directory with Lua and modules (a dist). Everything in LuaDist is CMake-based, which means that it can be easily compiled using any compiler/IDE supported by CMake. LuaDist also has an extensive repository which contains Lua modules and also many C dependencies/libraries, which allows to create a truly independent Lua "distribution". Installation is the same as with LuaRocks - luadist install desired-package.

Related

mingw : Giving reference to opencv libraries in simpler way

Successfully installed opencv 4.5.4 in windows under mingw evironment. I was able to compile opencv applications. But is there any easy way to give reference to libraries instead of typing long list of opencv libraries (i.e. something like pkg-config in windows)
For a simple opencv program I need to give reference to 4 libraries.
g++ rotate.cpp -lopencv_core454 -lopencv_highgui454 -lopencv_imgproc454 -lopencv_imgcodecs454
instead do we have some option to give list of libraries through some flags in windows environment.
Thanks
You can actually use pkg-config in Windows. If you use MSYS2 shell is is usually available or it can be installed via pacman.

luarocks lyaml installation error

on luarocks install lyaml I get following error:
Error: Could not find expected file libyaml.a, or libyaml.so, or libyaml.so.* for YAML -- you may have to install YAML in your system and/or pass YAML_DIR or YAML_LIBDIR to the luarocks command. Example: luarocks install lyaml YAML_DIR=/usr/local
lua version: 5.1.5
How do I install YAML in system to start using lyaml rock?
Whenever you get a LuaRocks message saying you may have to install ____ in your system it means the rockspec has an external dependency.
Installing external dependencies
The way to satisfy this dependency is to install the package using the appropriate means of your system: if using Debian/Ubuntu, with apt-get, if using macOS, probably using Homebrew, etc.
Note that for building code, in systems that have the concept of dev packages, such as most Linux distributions, you need to install both the main library package and the dev package (which contains the header files for compilation). For example, for Debian/Ubuntu, to satisfy this dependency you need to run apt-get install libyaml libyaml-dev.
Unfortunately, the names are not fully consistent across systems and distros: a module may be called ncurses-dev in one system, libncurses6w-dev in another, etc. So in your particular case you'll have to search around for the right name of the YAML library (the package providing libyaml) in your system.
Once the external dependency is installed...
Installing a library with the system package manager will usually install the necessary files in locations that are automatically detected by LuaRocks, so running
luarocks install lyaml
again should find the libyaml files and proceed with the installation.
If external dependencies are installed in a non-standard location
If that fails, you can find the directories where the library (libyaml.so) and header (yaml.h) were installed and tell LuaRocks about it. For example, if libyaml.so was installed in some non-standard locations such as /opt/lib/yaml/libyaml.so and the header in /opt/include/yaml-1/yaml.h you would do this:
luarocks install lyaml YAML_LIBDIR=/opt/lib/yaml/ YAML_INCDIR=/opt/include/yaml-1/
This kind of situation happens when a system installs headers or libraries in a subdirectory. For example, for LuaSec on the Mac, which uses OpenSSL, it is sometimes necessary to use pathnames like this:
luarocks install luasec OPENSSL_INCDIR=/usr/local/opt/openssl/include OPENSSL_LIBDIR=/usr/local/opt/openssl/lib

How to install libraries/packages of Lua on Zerobrane Studio IDE

i have been using lua for torch in command like. where i used luarocks to install packages but now i have a need to debug some code. As suggested by the community "Zerobrane Studio" is a lightweight IDE for that purpose. i have installed it on ubuntu 14.04.
Now i want to install the same packages as the IDE has its own installation of lua. Packages are i.e "dp, dpnn, nn" but after some search i found out ZeroBranes Studio uses luadist package manager. i went onto luadist.org. and tried one of the ways which lets you download the package using lua. i ran this code in the IDE. but it didn't work.
Use LuaDist functionality from Lua.
$ ./lua
> local ld = require "dist"
> ld.install("luaexpat")
Please help!
It should be sufficient in most cases to set the package.path and package.cpath paths in your script to provide access to those modules you are using (whether those modules are from LuaDist, Luarocks or manually installed next to your application scripts).
ZeroBrane Studio provides luadist plugin that simplifies the integration with modules installed from LuaDist and allows management of those modules directly from the Local console in the IDE. This plugin will also set the paths for the script (when running/debugging from the IDE), so you don't need to make any changes to the script itself, but it's likely to work only for the modules installed into that instance of LuaDist.
You may also want to check this post on Lua package managers and their integration with ZeroBrane Studio.

Any conflict if Luarocks is compiled w/a different Lua than the target?

If I compile Luarocks with a Lua (eg PUC 5.3), then use Luarocks to install rocks to be used by a different Lua (eg Luajit, Luarocks --tree my/lua-project-5.1), would there be any conflict down the line?
Yes. You shouldn't mix Lua versions like that, because when building modules written in C, they will use the header files for the specific Lua version that LuaRocks was configured for. This will result in modules that will either fail to build or fail to load in other versions of the interpreter.
Note however that you can have multiple simultaneous installations of LuaRocks, each for one Lua version.

How do install libraries for both Lua5.2 and 5.1 using Luarocks?

I am writing a small Lua project and using Luarocks to install my 3rd-party dependencies. The default Lua version on my machine is 5.2 and up to this point everything is working just fine.
However, today I have stumbled across a problem that is confusing me. I want to run my program on Lua 5.1 and Luajit to see if it would also work on those versions but I am having a hard time getting Luarocks to download the appropriate versions of the dependencies. As a last resort hack, I have tried to tell Lua5.1 to use the 5.2 libraries that Luarocks installed (by setting the LUA_PATH environment variable to the same value as LUA_PATH_5_2) but unfortunately that is not enough: my project depends on LuaFileSystem, a C-based module, so I'm going to need to have separate versions of it installed for 5.1 and 5.2.
What do I have to do to install both the 5.1 and 5.2 versions of my dependencies? Do I need to pass some parameters to theluarocks install command? Do I need to have multiple instances of Luarocks installed on my machine? One thing that confuses me is that the inside the .luarocks folder things are classified under a 5.2 subfolder (~/.luarocks/share/lua/5.2/), suggesting that maybe there could be a way to install things in a sibling 5.1 folder but at the same time there is only one bin folder, suggesting that luarocks is only able to handle one version of Lua at a time...
Based on your reference to ~/.luarocks/share/lua/5.2/, you seem to be running a Unix system (Linux or Mac). You can install the latest version of LuaRocks twice, for both Lua 5.1 and Lua 5.2 like this:
./configure --lua-version=5.1 --versioned-rocks-dir
make build
sudo make install
And then again for 5.2:
./configure --lua-version=5.2 --versioned-rocks-dir
make build
sudo make install
This will get you /usr/local/bin/luarocks-5.1 and /usr/local/bin/luarocks-5.2. If you installed Lua 5.1 and 5.2 in /usr/local/, and each of them will use its own ~/.luarocks/lib/luarocks/rocks-5.x/ entry for the user tree (and /usr/local/lib/luarocks/rocks-5.x for the system tree), and install modules to the right location at /usr/share/lua/5.x/ and ~/.luarocks/share/lua/5.x/ (and likewise for lib) appropriately.
As suggested by moteus, I decided to install a second version of Luarocks for Lua 5.1. But he is using Windows and I am using Linux so here is what I did:
Download the source for the latest version of Luarocks on the Luarocks website
From the source directory, run the ./configure script:
/configure --prefix="${HOME}/.luarocks51" --lua-suffix=5.1
The prefix setting tells Luarocks to put its stuff on the .luarocks51 folder, next to the existing .luarocks folder from my 5.2 install of Luarocks. The lua-suffix parameter tells Luarocks to use Lua 5.1 instead of the default lua version in my machine (5.2). This depends on me having named the interpreter for Lua 5.1 as lua5.1 (Debian installed mine on /usr/bin/lua5.1). Finally, Luarocks managed to automatically detect where the 5.1 headers and libraries are installed (/usr/include/lua5.1/) but if it didn't I guess I could have specified that with the --with-lua-include and --with-lua-lib parameters.
Compile Luarocks with make
Install it with make isntall (no need for Sudo since I'm installing it in a local directory).
Configure my 5.1 environment to use the libraries downloaded by Luarocks. I added the following to my .bashrc:
export PATH=$PATH:~/.luarocks/bin:~/.luarocks51/bin
export LUA_CPATH=";;${HOME}/.luarocks51/lib/lua/5.1/?.so"
export LUA_PATH=";;${HOME}/.luarocks51/share/lua/5.1/?.lua;${HOME}/.luarocks51/share/lua/5.1/?/init.lua"
export LUA_CPATH_5_2=";;${HOME}/.luarocks/lib/lua/5.2/?.so"
export LUA_PATH_5_2=";;${HOME}/.luarocks/share/lua/5.2/?.lua;${HOME}/.luarocks/share/lua/5.2/?/init.lua"
The 5.1 configuration also works for Luajit.
The executable for the 5.1 version of luarocks is named luarocks-5.1:
luarocks-5.1 install lfs
You have to mention both lua version and lua dir in the latest versions:
luarocks --lua-dir=$(brew --prefix)/opt/lua#5.1 --lua-version=5.1 install lua-cassandra
Using homebrew, you can do:
brew install lua51 # Lua 5.1
brew install lua # Lua latest
Luarocks comes with Lua, so you can do:
# Install Lua 5.1 version of any package
luarocks-5.1 install moonscript
# Install Lua latest version of any package
luarocks install moonscript

Resources