[NEW PORT] lang/lua54 - Lua 5.4.1

Highlights for this version:
- new generational mode for garbage collection
- to-be-closed variables
- const variables
- complete list: https://www.lua.org/manual/5.4/readme.html#changes

The Lua Manual can be found here: https://www.lua.org/manual/5.4/

Incompatibilities from the previous version are specifically documented
here: https://www.lua.org/manual/5.4/manual.html#8

Submitted by:	Russ Haley <russ haley gmail com>
Co-submitted by:	Andrew Gierth <andrew_tao173 riddles org uk>
Differential Revision:	https://reviews.freebsd.org/D14709
This commit is contained in:
Kyle Evans 2020-10-15 17:55:20 +00:00
parent 16f98f9361
commit 3f8f20827c
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=552438
10 changed files with 305 additions and 2 deletions

View file

@ -57,7 +57,7 @@ _INCLUDE_USES_LUA_MK= yes
# When adding a version, please keep the comment in
# Mk/bsd.default-versions.mk in sync.
_LUA_VALID_VERSIONS:= 53 52 51
_LUA_VALID_VERSIONS:= 54 53 52 51
.if defined(_LUA_EXTRA_VER)
_LUA_VALID_VERSIONS+= ${_LUA_EXTRA_VER}
.endif

View file

@ -67,7 +67,7 @@ LINUX_DEFAULT?= c7
# Please give notice to the Graphics Team (x11@FreeBSD.org) in advance before
# bumping the LLVM version.
LLVM_DEFAULT?= 90
# Possible values: 5.1, 5.2, 5.3
# Possible values: 5.1, 5.2, 5.3, 5.4
LUA_DEFAULT?= 5.2
# Possible values: 5.5, 5.6, 5.7, 8.0, 10.3m, 10.4m, 10.5m, 5.5p, 5.6p, 5.7p, 5.6w, 5.7w
MYSQL_DEFAULT?= 5.7

View file

@ -168,6 +168,7 @@
SUBDIR += lua51
SUBDIR += lua52
SUBDIR += lua53
SUBDIR += lua54
SUBDIR += luajit
SUBDIR += luajit-openresty
SUBDIR += malbolge

151
lang/lua54/Makefile Normal file
View file

@ -0,0 +1,151 @@
# $FreeBSD$
PORTNAME= lua
DISTVERSION= 5.4.1
CATEGORIES= lang
MASTER_SITES= https://www.lua.org/ftp/
PKGNAMESUFFIX= ${LUA_VER_STR}
MAINTAINER= russ.haley@gmail.com
COMMENT= Powerful, efficient, lightweight, embeddable scripting language
LICENSE= MIT
USES= lua:core,54
USE_LDCONFIG= yes
# Overriding __MAKE_CONF makes sure that we don't re-parse
# /etc/make.conf during do-build, which would jeopardize the build
# if, for instance, the user set CFLAGS=mumble
# NOTE: /etc/make.conf is read BEFORE Makefile, so we already
# have its settings when we get here.
# See http://wiki.freebsd.org/MatthiasAndree/LuaLessonsLearnt
MAKE_ARGS= __MAKE_CONF=${NONEXISTENT}
# using the "bsd" target rather than "freebsd" saves patching out the
# assumption of using base libedit in order to make it configurable. "bsd"
# is "generic" plus the POSIX and DLOPEN options, plus -Wl,-E at link time;
# it doesn't set CC either, which makes it easier for us to control that too.
ALL_TARGET=bsd
LUA_LIB_STATIC= liblua-${LUA_VER}.a
LUA_LIB_SHARED= liblua-${LUA_VER}.so
LUA_PC_FILE= lua-${LUA_VER}.pc
CFLAGS+= -fPIC
# 2019-01-25: -pthread in LIBS is a work around for the following bug:
# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235211
LIBS+= -pthread
WITHOUT_NO_STRICT_ALIASING=yes
MAKE_ARGS+= CC="${CC}" \
CMCFLAGS="" \
MYCFLAGS="${CPPFLAGS} ${CFLAGS}" \
MYLDFLAGS="${LDFLAGS}" \
MYLIBS="${LIBS}" \
LUA_T=${LUA_CMD} \
LUAC_T=${LUAC_CMD} \
LUA_A=${LUA_LIB_STATIC} \
LUA_SO=${LUA_LIB_SHARED} \
LUA_SONAME=${LUA_LIB_SHARED} \
TO_BIN="${LUA_CMD} ${LUAC_CMD}" \
TO_LIB="${LUA_LIB_SHARED} ${LUA_LIB_STATIC}" \
INSTALL_TOP=${STAGEDIR}${PREFIX} \
INSTALL_INC=${STAGEDIR}${LUA_INCDIR} \
INSTALL_EXEC="${INSTALL_PROGRAM}"
# Source, destination, and filenames to copy for the DOCS option
# (automatically added to pkg-plist if DOCS is set)
# We override DOCSDIR to get a per-version subdir.
# We put the docs for Lua proper in a lua/ subdir of the version subdir
# so that ports for Lua modules can use the version subdir too without
# making a mess.
DOCSDIR= ${LUA_DOCSDIR}
BUILD_WRKDOC= ${WRKSRC}/doc
SUB_FILES= ${LUA_PC_FILE}
SUB_LIST= version=${PORTVERSION} \
includedir=${LUA_INCDIR} \
libdir=${LUA_LIBDIR} \
soname=lua-${LUA_VER}
BUILD_WRKSRC= ${WRKSRC}/src
PORTDOCS= *
# Options
OPTIONS_DEFAULT= LIBEDIT_DL
OPTIONS_GROUP= DOCSGRP DEBUGGRP
OPTIONS_GROUP_DEBUGGRP= ASSERT APICHECK
OPTIONS_GROUP_DOCSGRP= DOCS
OPTIONS_SINGLE= EDITGRP
OPTIONS_SINGLE_EDITGRP= EDITNONE LIBEDIT_DL LIBEDIT READLINE
# Option descriptions
APICHECK_DESC= Enable API checks
ASSERT_DESC= Enable interpreter assertions
DEBUGGRP_DESC= Debugging options
DOCSGRP_DESC= Documentation options
DOCS_DESC= Install language and API reference (HTML, ~400kB)
EDITGRP_DESC= Interactive command-line editing
EDITNONE_DESC= No command-line editing
LIBEDIT_DESC= Use libedit (breaks lcurses)
LIBEDIT_DL_DESC=Use dynamically loaded libedit (recommended)
READLINE_DESC= Use GNU Readline (breaks lcurses)
# Option implementations
APICHECK_CPPFLAGS= -DLUA_USE_APICHECK
ASSERT_CPPFLAGS= -DLUAI_ASSERT
# EDITNONE currently requires no settings
LIBEDIT_USES= libedit
LIBEDIT_CPPFLAGS= -DLUA_USE_READLINE
LIBEDIT_LIBS= -ledit
LIBEDIT_DL_USES= libedit
LIBEDIT_DL_CPPFLAGS= -DLUA_USE_READLINE_DL
LIBEDIT_DL_EXTRA_PATCHES=${PATCHDIR}/extra-patch-libedit-dl
READLINE_USES= readline
READLINE_CPPFLAGS= -DLUA_USE_READLINE
READLINE_LIBS= -lreadline
# end of option vars
post-patch:
@${REINPLACE_CMD} -e "/LUA_ROOT/s,/usr/local,${LUA_PREFIX}," \
${WRKSRC}/src/luaconf.h
post-patch-LIBEDIT-on:
@${REINPLACE_CMD} -e "s,readline/,editline/,g ; \
/history\.h/d" ${WRKSRC}/src/lua.c
post-patch-LIBEDIT_DL-on:
@${REINPLACE_CMD} \
-e "/^#def.*LUA_READLINE_LIBPATH/s,/usr/local,${LOCALBASE}," \
${WRKSRC}/src/lua.c
post-install:
${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/${LUA_LIB_SHARED}
${MV} ${STAGEDIR}${PREFIX}/man/man1/lua.1 \
${STAGEDIR}${PREFIX}/man/man1/${LUA_CMD}.1
${MV} ${STAGEDIR}${PREFIX}/man/man1/luac.1 \
${STAGEDIR}${PREFIX}/man/man1/${LUAC_CMD}.1
${INSTALL_DATA} ${WRKDIR}/${LUA_PC_FILE} \
${STAGEDIR}${PREFIX}/libdata/pkgconfig
post-install-DOCS-on:
${MKDIR} ${STAGEDIR}${DOCSDIR}
(cd ${BUILD_WRKDOC} && \
${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} '-not -name *\.1')
.include <bsd.port.mk>

3
lang/lua54/distinfo Normal file
View file

@ -0,0 +1,3 @@
TIMESTAMP = 1602265420
SHA256 (lua-5.4.1.tar.gz) = 4ba786c3705eb9db6567af29c91a01b81f1c0ac3124fdbf6cd94bdd9e53cca7d
SIZE (lua-5.4.1.tar.gz) = 353965

View file

@ -0,0 +1,58 @@
--- src/lua.c.orig 2018-03-16 14:23:08 UTC
+++ src/lua.c
@@ -379,7 +379,54 @@ static int handle_luainit (lua_State *L)
*/
#if !defined(lua_readline) /* { */
-#if defined(LUA_USE_READLINE) /* { */
+#if defined(LUA_USE_READLINE_DL)/* { */
+
+#include <dlfcn.h>
+
+#ifndef LUA_READLINE_LIBPATH
+#define LUA_READLINE_LIBPATH "/usr/local/lib/libedit.so"
+#endif
+
+typedef char *readline_functype(const char *);
+typedef int add_history_functype(const char *);
+
+static readline_functype *lua_readline_p = NULL;
+static add_history_functype *lua_saveline_p = NULL;
+
+static void lua_initreadline(lua_State *L)
+{
+ void *editlib = NULL;
+ union dl_func_hack {
+ void *ptr;
+ readline_functype *rlfunc;
+ add_history_functype *ahfunc;
+ char **rlnamevar;
+ int *icompvar;
+ } u;
+ (void) L;
+ if ((editlib = dlopen(LUA_READLINE_LIBPATH, RTLD_LAZY | RTLD_LOCAL))) {
+ u.ptr = dlsym(editlib, "readline");
+ lua_readline_p = u.rlfunc;
+ u.ptr = dlsym(editlib, "add_history");
+ lua_saveline_p = u.ahfunc;
+ if ((u.ptr = dlsym(editlib, "rl_readline_name")))
+ *u.rlnamevar = "lua";
+ if ((u.ptr = dlsym(editlib, "rl_inhibit_completion")))
+ *u.icompvar = 1;
+ }
+}
+
+#define lua_readline(L,b,p) \
+ ((void)L, \
+ (lua_readline_p) \
+ ? (((b)=lua_readline_p(p)) != NULL) \
+ : (fputs(p, stdout), fflush(stdout), fgets(b, LUA_MAXINPUT, stdin) != NULL))
+#define lua_saveline(L,line) \
+ do { (void)L; if (lua_saveline_p) lua_saveline_p(line); } while(0)
+#define lua_freeline(L,b) \
+ do { (void)L; if (lua_readline_p) free(b); } while(0)
+
+#elif defined(LUA_USE_READLINE) /* { */
#include <readline/readline.h>
#include <readline/history.h>

View file

@ -0,0 +1,10 @@
version=%%version%%
libdir=%%libdir%%
includedir=%%includedir%%
soname=%%soname%%
Name: Lua
Description: Powerful, efficient, lightweight, embeddable scripting language.
Version: ${version}
Libs: -L${libdir} -l${soname} -lm
Cflags: -I${includedir}

View file

@ -0,0 +1,45 @@
--- src/Makefile.orig 2020-04-15 13:00:29 UTC
+++ src/Makefile
@@ -7,11 +7,12 @@
PLAT= guess
CC= gcc -std=gnu99
-CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS)
+CFLAGS= -Wall -Wextra -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS)
LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
LIBS= -lm $(SYSLIBS) $(MYLIBS)
+SOLIBS= -lm
-AR= ar rcu
+AR= ar
RANLIB= ranlib
RM= rm -f
UNAME= uname
@@ -39,12 +40,13 @@ BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)
LUA_T= lua
LUA_O= lua.o
+LUA_SO= liblua.so
LUAC_T= luac
LUAC_O= luac.o
ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
+ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
ALL_A= $(LUA_A)
# Targets start here.
@@ -56,8 +58,11 @@ o: $(ALL_O)
a: $(ALL_A)
+$(LUA_SO): $(CORE_O) $(LIB_O)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(MYLDFLAGS) -shared -Wl,-soname=$(LUA_SONAME) $? $(SOLIBS)
+
$(LUA_A): $(BASE_O)
- $(AR) $@ $(BASE_O)
+ $(AR) $(ARFLAGS) $@ $(BASE_O)
$(RANLIB) $@
$(LUA_T): $(LUA_O) $(LUA_A)

21
lang/lua54/pkg-descr Normal file
View file

@ -0,0 +1,21 @@
Lua is a programming language originally designed for extending applications,
but also frequently used as a general-purpose, stand-alone language. Lua
combines simple procedural syntax (similar to Pascal) with powerful data
description constructs based on associative arrays and extensible semantics.
Lua is dynamically typed, interpreted from bytecodes, and has automatic memory
management with garbage collection, making it ideal for configuration,
scripting, and rapid prototyping.
A fundamental concept in the design of Lua is to provide meta-mechanisms for
implementing features, instead of providing a host of features directly in
the language. For example, although Lua is not a pure object-oriented
language, it does provide meta-mechanisms for implementing classes and
inheritance. Lua's meta-mechanisms bring an economy of concepts and keep the
language small, while allowing the semantics to be extended in unconventional
ways. Extensible semantics is a distinguishing feature of Lua.
Lua is implemented as a small library of C functions, written in ANSI C, and
compiles unmodified in all known platforms. The implementation goals are
simplicity, efficiency, portability, and low embedding cost.
WWW: https://www.lua.org/

14
lang/lua54/pkg-plist Normal file
View file

@ -0,0 +1,14 @@
bin/lua%%LUA_VER_STR%%
bin/luac%%LUA_VER_STR%%
%%LUA_INCDIR%%/lauxlib.h
%%LUA_INCDIR%%/lua.h
%%LUA_INCDIR%%/lua.hpp
%%LUA_INCDIR%%/luaconf.h
%%LUA_INCDIR%%/lualib.h
%%LUA_LIBDIR%%/liblua-%%LUA_VER%%.a
%%LUA_LIBDIR%%/liblua-%%LUA_VER%%.so
libdata/pkgconfig/lua-%%LUA_VER%%.pc
man/man1/lua%%LUA_VER_STR%%.1.gz
man/man1/luac%%LUA_VER_STR%%.1.gz
@dir %%LUA_MODLIBDIR%%
@dir %%LUA_MODSHAREDIR%%