diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2020-10-16 01:55:20 +0800 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2020-10-16 01:55:20 +0800 |
commit | 3f8f20827c59dc79bc4045a7eaaadbbbcf84870d (patch) | |
tree | e520125c13203c6c466048c11f96ad856a671e20 /lang | |
parent | 16f98f936159f408752482fcb793056c9208621a (diff) | |
download | freebsd-ports-gnome-3f8f20827c59dc79bc4045a7eaaadbbbcf84870d.tar.gz freebsd-ports-gnome-3f8f20827c59dc79bc4045a7eaaadbbbcf84870d.tar.zst freebsd-ports-gnome-3f8f20827c59dc79bc4045a7eaaadbbbcf84870d.zip |
[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
Diffstat (limited to 'lang')
-rw-r--r-- | lang/Makefile | 1 | ||||
-rw-r--r-- | lang/lua54/Makefile | 151 | ||||
-rw-r--r-- | lang/lua54/distinfo | 3 | ||||
-rw-r--r-- | lang/lua54/files/extra-patch-libedit-dl | 58 | ||||
-rw-r--r-- | lang/lua54/files/lua-5.4.pc.in | 10 | ||||
-rw-r--r-- | lang/lua54/files/patch-src_Makefile | 45 | ||||
-rw-r--r-- | lang/lua54/pkg-descr | 21 | ||||
-rw-r--r-- | lang/lua54/pkg-plist | 14 |
8 files changed, 303 insertions, 0 deletions
diff --git a/lang/Makefile b/lang/Makefile index 0ed7d3f4f0a8..a28d3c6f1018 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -168,6 +168,7 @@ SUBDIR += lua51 SUBDIR += lua52 SUBDIR += lua53 + SUBDIR += lua54 SUBDIR += luajit SUBDIR += luajit-openresty SUBDIR += malbolge diff --git a/lang/lua54/Makefile b/lang/lua54/Makefile new file mode 100644 index 000000000000..4e8769fa54cb --- /dev/null +++ b/lang/lua54/Makefile @@ -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> diff --git a/lang/lua54/distinfo b/lang/lua54/distinfo new file mode 100644 index 000000000000..e3763662d46a --- /dev/null +++ b/lang/lua54/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1602265420 +SHA256 (lua-5.4.1.tar.gz) = 4ba786c3705eb9db6567af29c91a01b81f1c0ac3124fdbf6cd94bdd9e53cca7d +SIZE (lua-5.4.1.tar.gz) = 353965 diff --git a/lang/lua54/files/extra-patch-libedit-dl b/lang/lua54/files/extra-patch-libedit-dl new file mode 100644 index 000000000000..ef0fe4390c9d --- /dev/null +++ b/lang/lua54/files/extra-patch-libedit-dl @@ -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> diff --git a/lang/lua54/files/lua-5.4.pc.in b/lang/lua54/files/lua-5.4.pc.in new file mode 100644 index 000000000000..1305f1734a93 --- /dev/null +++ b/lang/lua54/files/lua-5.4.pc.in @@ -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} diff --git a/lang/lua54/files/patch-src_Makefile b/lang/lua54/files/patch-src_Makefile new file mode 100644 index 000000000000..1d52c4a01aa7 --- /dev/null +++ b/lang/lua54/files/patch-src_Makefile @@ -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) diff --git a/lang/lua54/pkg-descr b/lang/lua54/pkg-descr new file mode 100644 index 000000000000..42b360dcc397 --- /dev/null +++ b/lang/lua54/pkg-descr @@ -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/ diff --git a/lang/lua54/pkg-plist b/lang/lua54/pkg-plist new file mode 100644 index 000000000000..ca2ffefcdc92 --- /dev/null +++ b/lang/lua54/pkg-plist @@ -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%% |