You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-eselect/eselect-lua/files/lua.eselect-2

173 lines
4.1 KiB

# -*-eselect-*- vim: ft=eselect
# Copyright 2014-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
inherit config multilib
DESCRIPTION="Manage lua symlinks"
MAINTAINER="mva@gentoo.org"
HEADER_FILES="lauxlib.h luaconf.h lua.h lua.hpp lualib.h"
remove_symlinks() {
rm -f "${EROOT}"/usr/bin/{lua,luac} &>/dev/null
for dir in $(get_libdirs) ; do
rm -f "${EROOT}"${dir}/liblua.so &>/dev/null && \
rm -f "${EROOT}"${dir}/pkgconfig/lua.pc &>/dev/null
done
for f in $HEADER_FILES ; do
rm -f "${EROOT}"/usr/include/${f}
done
rm -f "${EROOT}"/usr/share/man/man1/{lua,luac}.1{,.gz,.bz2,.lzma} &>/dev/null
}
_dup() {
dirname ${1}/.
}
set_symlinks() {
local ver=$1
ln -s lua${ver} $(_dup "${EROOT}"/usr/bin/lua)
ln -s luac${ver} $(_dup "${EROOT}"/usr/bin/luac)
for dir in $(get_libdirs) ; do
if has 'jit*' ${ver}; then
type -p lua${ver} &>/dev/null || die -q "It's something wrong with your lua${ver} installation: it's binary leads to broken symlink"
local abi=$(lua${ver} -e 'print(_VERSION:match("%d.%d"))')
local libname=libluajit-${abi}.so.${ver##jit-}
test -f "${EROOT}/${dir}/${libname}" || die -q "Can't find libluajit for lua${ver} (lua abi: ${abi})"
ln -s ${libname} $(_dup "${EROOT}/${dir}"/liblua.so)
else
ln -s liblua${ver}.so $(_dup "${EROOT}/${dir}"/liblua.so)
fi
ln -s lua${ver}.pc $(_dup "${EROOT}/${dir}"/pkgconfig/lua.pc)
done
for manpage in "${EROOT}"/usr/share/man/man1/lua*${ver}.1* ; do
test -f ${manpage} &&
ln -s $(basename "${manpage}") $(_dup "${manpage//${ver}}")
done
for header in $HEADER_FILES ; do
local hdr;
if has 'jit*' ${ver}; then
type -p lua${ver} &>/dev/null || die -q "lua${ver} binary is missing (or leads to broken symlink)"
local jit_v=$(lua${ver} -e 'print(jit.version:match("%d.%d"))')
hdr=luajit-${jit_v}/${header};
else
hdr=lua${ver}/${header};
fi
test -f "${EROOT}/usr/include/${hdr}" || die -q "Missing header: ${header}"
ln -s "${hdr}" $(_dup "${EROOT}"/usr/include/${header})
done
}
get_libdirs() {
local dir libdirs
for dir in $(list_libdirs); do
[[ -L ${EROOT}/usr/${dir} ]] && continue
ls "${EROOT}"/usr/${dir}/liblua*.* > /dev/null 2>&1 || continue
libdirs+=' '/usr/${dir}
done
echo ${libdirs:-/usr/lib}
}
find_targets() {
local dirs
local prefix="${EROOT}/usr/bin/lua"
for f in ${prefix}{5,jit-2}.* ; do
[[ -f "${f}" ]] && dirs="${dirs} ${f##$prefix}"
done
echo $dirs
}
resolv_target() {
local targets=( $(find_targets) )
if is_number $1; then
[[ $1 -le ${#targets[@]} && $1 -gt 0 ]] && echo "${targets[ $(( $1 - 1 )) ]}"
elif has $1 ${targets[@]}; then
echo $1
fi
}
get_active_version() {
readlink -e "${EROOT}"/usr/bin/lua | sed -ne "s:.*/usr/bin/lua\([\w.-]*\):\1:p"
}
## Actual actions
## set action
describe_set() {
echo "Sets the current version of lua"
}
describe_set_parameters() {
echo '<target>'
}
describe_set_options() {
echo 'target: Target name or number (from "list" action)'
}
do_set() {
local target=$(resolv_target $1)
if [[ -z "${target}" ]]; then
die -q "You need to specify a version"
fi
remove_symlinks
set_symlinks $target
}
## List action
describe_list() {
echo 'Lists available lua versions'
}
do_list() {
local targets
local a
targets=( $(find_targets) )
a=$(get_active_version)
for (( i = 0; i < ${#targets[@]}; i++ )) ; do
[[ $a == ${targets[i]} ]] && targets[i]=$(highlight_marker "${targets[i]}")
done
write_numbered_list -m '(none found)' "${targets[@]}"
}
## Show action
describe_show() {
echo 'Show the active lua version'
}
do_show() {
get_active_version
}
## update action
describe_update() {
echo 'Automatically update the lua version'
}
describe_update_options() {
echo 'ifunset : Do not override existing implementation'
}
do_update() {
[[ -n ${1} && ! ( ${1} == ifunset || ${1} == '--if-unset' ) ]] && \
die -q 'Usage error'
[[ ( ${1} == ifunset || ${1} == '--if-unset' ) && -n $(get_active_version) ]] && \
return
remove_symlinks
local targets=( $(find_targets) )
if [[ -n ${#targets[@]} ]] ; then
local target=${targets[${#targets[@]} - 1]}
set_symlinks $target || echo 'Nothing to update'
fi
}