#!/bin/sh # Build script for Lua 5.4 (plain uname-keyed Makefile - NOT autotools). # # Lua's src/Makefile only has a "guess"/named-platform target dispatch (no # dedicated Hammerhead/illumos entry) and its "posix"/"solaris" targets only # ever produce a STATIC liblua.a - there is no shared-library target at all # upstream, on any platform. So this build.sh does two passes: # 1. `gmake posix` - the generic POSIX target (illumos has no dedicated # target; "solaris"/"SunOS" exists but drags in Solaris-specific # readline assumptions we don't want) - gives us liblua.a + lua/luac # binaries, and validates the objects build cleanly. # 2. Manually recompile the library objects -fPIC and link them into a # real liblua.so.5.4 - conky/neovim need a *shared* liblua, which # upstream never ships, so this has to be done by hand. # Finally we write a lua.pc by hand (upstream Lua ships NO pkg-config file # at all) so consumers (conky, neovim) can find it via pkg-config. set -e cd "$SRCDIR/src" export CC=gcc # --- Pass 1: static build (also produces the lua/luac binaries) --- gmake MYCFLAGS="-D__EXTENSIONS__ -DLUA_USE_POSIX -DLUA_USE_DLOPEN -fPIC" \ MYLIBS="-ldl" \ CC="$CC" \ posix # --- Pass 2: shared liblua.so.5.4 --- # CORE_O/LIB_O objects were already compiled -fPIC above (MYCFLAGS carried # -fPIC into SYSCFLAGS via MYCFLAGS), so relink into a shared object rather # than recompiling. lua.o/luac.o are excluded (those are the standalone # interpreter/compiler mains, not part of the library). # NOTE: coral invokes build.sh via `zsh script.sh` (not `sh script.sh`), so # the shebang is not honored and zsh's default (no word-splitting on # unquoted variable expansion) applies - an "$CORE_O $LIB_O" variable # reference collapses to a single argument and breaks the link. Inline the # object list literally (plain script tokens, not a variable) to sidestep # the shell-dependent splitting behavior entirely. gcc -shared -Wl,-soname,liblua.so.5 -o liblua.so.5.4 \ lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \ lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \ ltm.o lundump.o lvm.o lzio.o \ lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o \ loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o \ -lm -ldl ln -sf liblua.so.5.4 liblua.so.5 ln -sf liblua.so.5 liblua.so # --- Install (static lib + binaries + headers via upstream install target) --- cd "$SRCDIR" gmake install INSTALL_TOP="$PKGDIR$PREFIX" # --- Stage the shared lib alongside the static one --- # NOTE: illumos cp(1) has no GNU/BSD-style -P (no-dereference) flag - copy # only the real regular file, then recreate the two symlinks in place with # ln -sf so they land as symlinks (not dereferenced copies). mkdir -p "$PKGDIR$PREFIX/lib" cp -f src/liblua.so.5.4 "$PKGDIR$PREFIX/lib/" ( cd "$PKGDIR$PREFIX/lib" && ln -sf liblua.so.5.4 liblua.so.5 && ln -sf liblua.so.5 liblua.so ) # --- Write lua.pc (upstream ships none) --- mkdir -p "$PKGDIR$PREFIX/lib/pkgconfig" cat > "$PKGDIR$PREFIX/lib/pkgconfig/lua.pc" <