Page MenuHomeFreeBSD

D51890.id160316.diff
No OneTemporary

D51890.id160316.diff

diff --git a/contrib/libucl/lua/lua_ucl.c b/contrib/libucl/lua/lua_ucl.c
--- a/contrib/libucl/lua/lua_ucl.c
+++ b/contrib/libucl/lua/lua_ucl.c
@@ -30,6 +30,8 @@
#include "lua_ucl.h"
#include <strings.h>
+#include "bootstrap.h"
+
/***
* @module ucl
* This lua module allows to parse objects from strings and to store data into
@@ -1528,3 +1530,5 @@
return (struct ucl_lua_funcdata*)obj->value.ud;
}
+
+FLUA_MODULE(ucl);
diff --git a/contrib/lyaml/ext/yaml/yaml.c b/contrib/lyaml/ext/yaml/yaml.c
index 54478610134fec5853580fd232b711074cf2a37f..6a5ddc605e0fd3640955adda8a2d867915524504
GIT binary patch
literal 2021
zc${rjTW_mI5PmklV&pv3PC3p+eL2bLQHhOXR16m2q*hg-HLT567|`x=EGx?2?sI1V
z$BtXc7wzmf-#0ggn`;BE;lOtJC^5km>y<TkVJ(VO6kFJo65N^*<W&l-c>(JKSVb!N
z9ww~7d!3nZe|!5CF$5cz)j^7FreQE1;>F!BU+!=3@8Oxr1H6pjh1J`P75@jl{d&pV
zaW1&r38h3?fKZTe$uWqnWQFFb2^+~dlp9DgCb!%KT>>i(P;sfyp<HVw3d)5+f`Y_{
zV4We8DmQx1Bu9J-OsO&v3@ITklX}Ms%`{1FM9viqbjG0{b{_p<qmy!$6QL-8u8+5{
z7dk6z4U#J@MM5+tf|9&$s(QT6#ZGi0<lfXm5g$_53R9tgP1u#G*w8<3@~i4~E)-Th
z6~w--H5wHe6JC%PW^;pmQ#@~iLlS`rG)bRgY+xi*QE_!wE=87oR_;FMBbul-wJcDW
zH*RT(<!f~R=7}Z?d2Gr&FZYyVQsM+rYU-iuVubf>UH;%rT5aQtQe)I@DAbYa)amX@
zWh~EO&AalUxM+rltjEkGg`qUggJ3ySI60(ynepft$IOP%pGL1%V1pCFBJf|Fi9Lb7
z72>&X!mAU_{AC1)2rMsJfj<SyTfy&+H!;EfV-eV42!23p&V1oIHkuu8>@Fvc_Y6<y
z>iH44&fJNRH}V_Jj?J+{;+xySc!o#o$#I=%WfIrai9BMS`T<z5u!6`LFI_8u#WGm<
zp^ZUIklAy*X@ElZ-1edo3Zo6|7d${Xvs{<dh|XGK8UY0gV}G#<oab2tGvA%qXne9U
zKI_S~TQ$sX>{`y;go!n`p6$lVN1`T4LbhST>&zxAsap6MM~?4NK4agD0z8_SZV-KV
zzdE69f)zL+Rc0Fa^CnZOE;{)Q54w7GOGK6b+#rO|c^TRtoG`I17wNED-ep6NO<sH&
zg7as6&uO3wRSAj1go^~XOa7Ar+ItTV#|4PbT%B{gZhBm750L(&!Q&df;dCE<ODa~3
zO1b^s>fIQ|RX3pUjh@P4JIcO)vZc9LlkLoy*X%#We%|cjtbcA>m!(ElR<-t&Z$!ai
zzVfWO-Rt$qqkm?8!3JYBdo2L^xM<dr_AjmTKDbLO?jU%&!EbjuQM*)xI1ZyAz8l19
z*c)8M3Vw#W;RWP`=w134hN9(`&?->4>}ux50pCLK=U?!v@pg(A2RB%e2fSU7nn1tr
zMz6zQuXgknlD(mMW~`W0X!~qb2`h>gc~uvv)d?BBH*e{>CeZJ@@&0HSSP<8Fimio%
zgP{$Kw5)g$Q(0kvr#Qq!I9$6!3>yGiy%=9B`08?pk7VoQ&WvPjl9qgno0`i3inhHn
zAvgizs#aMp5WsSReDtp+CWPX8BY2+D^_P2O`GMOS$GhLLNUm`=!`-9tZWvSQ@7$j(
KU3)-ki1`<!foSUh
literal 1977
zc${rjU2p0}5PinKVniMasV_-TUv6@HRR>J4YHVbiq^PQ_#a{4MW{q~&7ojMByU(35
zCM2{HAKJ4s=ggPKH`f+i!+~wfL1u$5R!e8*!%E0p$PKJ31%A!Q<V6W%xP;XK9GNS=
zhcT0QZwecRx3^!>hRjCQ?x4h`Fwh(I@#5~6FT>m65T2Mi!1Dl}S-mNk{6Ev%ub0d%
z=bWpp&{|Xygoc7EjzMe`lZNLutQF@_tsyIz+Hf081xy}b$CXBhYGs&^lna9l1&I%h
zO@U0hTAMvn9PM*pT34B1NC|nB)mttNGbFhdCD+h11&40jdUX4ZPR?0LghB#cpKf6<
zOi|Sa6xT+HjA(2$%F4Q_>gl=^ThWS;ds7Qdd`MkuOoalrVO!;5P5->fZ&$BMp|R?@
zAof*l5Yz-_T#^@NbAx@;yljF)5`hUcNuOhE%t&ZQ#WiiYG$H$<+J4SQG*PW<B~h3+
zZh3{}YjpqSnIVKc)>T<nd&)7ZaDpf`ecyI5!F#r<e()x(W8-CIFzRC{)REn})9sZm
zSXsh~x8*}|(F_lvr_2<Ep$*Q1U?uEua!B_w<H0G8sS9y9NnV`D1uuqq6h3=ncMM%8
z#&g$(7cZHHiv-Xja)M+D;RKvu3BP;6*ar8HdE~}1gb}fMv$^lN2z$ZEUyQxr2_Dfk
z2ovzVnU^4M5;mGGo9D*FH*=%W6pzlM=X=T0Ca#H>1jIZEBXD5uM2R<A_)Y}#MKlj%
z7lRlhbKnJ&2!-648zci1Mhx6%JU~2ke4o^a&RJj@5d{jPaK4PZr)dJy&>y=9KDrp6
z^XR)rHOy}0JKoHOu`_d?+{P<Jq9#eQJcbD`Q<qRub?`GvyfC1AMq!Xdc(gIyD0%mO
z@nY8oC-P#d%p?kDO{P>`bP5|DbPe1i5mo+kgV2P|i`aeVgt6=RNQd1DE*pAk^8C{f
ze0<jToCaFzolrPTxJYojls{>py?1|qT7dY>)g{O4rpIz~fczf=0XOgsr~B|*wqtTo
zsm=GJ-i>8lwF3&@=&6*OLGk?)mX~5h*axtz*?+)p+3ez?i&)OrLUNcb183%TI$gTy
zet@5`kyy3P(Ez%*P*#feEUoP>_zNd(P4IMs-}ZE-_9@vkjgu(7>!rHi>0PB7eulgL
zg~{2XbLnGQnwD5bkG#gERx>}1_y(ds|AJqw*K@o$pwW^%;Pryk2Ks%oI;{=%WJ_-w
z)#=+Gz#UT>vCp8+n3PA$t6HK~D`a(EgN5(gK)-L++k<6cL45Bqb><!pfUz*rYR6?t
zWrZG|(ijuraP9XoYyddwrTF^5SCrp>Agq=90210Ht@s8vGFLqmJ@(3m=xmVgYF(59
q4OmGg@BKRxlZEDHEqIyJ^_L;C{J^b@W87_76gRko;qJkDv;GCB!dqAX
diff --git a/libexec/flua/Makefile b/libexec/flua/Makefile
--- a/libexec/flua/Makefile
+++ b/libexec/flua/Makefile
@@ -1,10 +1,29 @@
.include <src.lua.mk>
-SUBDIR+= libfreebsd
-SUBDIR+= libhash
-SUBDIR+= libjail
-SUBDIR+= libucl
-SUBDIR+= liblyaml
+FLUA_MODULES+= libhash
+FLUA_MODULES+= libjail
+FLUA_MODULES+= libucl
+FLUA_MODULES+= liblyaml
+
+.ifdef BOOTSTRAPPING
+FLUA_MODULES+= libfreebsd/sys/linker
+FLUA_MODULES+= libfreebsd/kenv
+CFLAGS+= -I${.CURDIR} -DBOOTSTRAPPING
+
+SHAREDIR= ${WORLDTMP}/legacy/usr/share/flua
+FLUA_PATH= ${SHAREDIR}/?.lua;${SHAREDIR}/?/init.lua
+CFLAGS+= -DBOOTSTRAP_FLUA_PATH=\"${FLUA_PATH:Q}\"
+
+.for mod in ${FLUA_MODULES}
+.include "${mod}/Makefile.inc"
+.endfor
+
+.else
+
+FLUA_MODULES+= libfreebsd
+SUBDIR+= ${FLUA_MODULES}
+
+.endif
LUASRC?= ${SRCTOP}/contrib/lua/src
.PATH: ${LUASRC}
@@ -14,7 +33,7 @@
CWARNFLAGS.gcc+= -Wno-format-nonliteral
-LIBADD= lua
+LIBADD+= lua
# Entry point
SRCS+= lua.c
diff --git a/libexec/flua/Makefile.inc b/libexec/flua/Makefile.inc
--- a/libexec/flua/Makefile.inc
+++ b/libexec/flua/Makefile.inc
@@ -2,4 +2,9 @@
CFLAGS+= \
-I${SRCTOP}/contrib/lua/src \
- -I${SRCTOP}/lib/liblua
+ -I${SRCTOP}/lib/liblua \
+ -I${SRCTOP}/libexec/flua
+
+.ifdef BOOTSTRAPPING
+CFLAGS+= -DBOOTSTRAPPING
+.endif
diff --git a/libexec/flua/bootstrap.h b/libexec/flua/bootstrap.h
new file mode 100644
--- /dev/null
+++ b/libexec/flua/bootstrap.h
@@ -0,0 +1,30 @@
+/*-
+ * Copyright (c) 2025 Kyle Evans <kevans@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#ifndef FLUA_BOOTSTRAP_H
+#define FLUA_BOOTSTRAP_H
+
+#ifdef BOOTSTRAPPING
+#include <sys/linker_set.h>
+
+#include <lauxlib.h>
+
+SET_DECLARE(flua_module_set, const luaL_Reg);
+#define FLUA_MODULE_DEF(ident, modname, openfn) \
+ static const luaL_Reg ident = { modname, openfn }; \
+ DATA_SET(flua_module_set, ident)
+
+#define FLUA_MODULE_NAMED(mod, name) \
+ FLUA_MODULE_DEF(module_ ## mod, name, luaopen_ ## mod)
+#define FLUA_MODULE(mod) \
+ FLUA_MODULE_DEF(module_ ## mod, #mod, luaopen_ ## mod)
+#else /* !BOOTSTRAPPING */
+#define FLUA_MODULE_DEF(ident, modname, openfn)
+#define FLUA_MODULE_NAMED(mod, name)
+#define FLUA_MODULE(modname)
+#endif /* BOOTSTRAPPING */
+
+#endif /* FLUA_BOOTSTRAP_H */
diff --git a/libexec/flua/libfreebsd/kenv/Makefile b/libexec/flua/libfreebsd/kenv/Makefile
--- a/libexec/flua/libfreebsd/kenv/Makefile
+++ b/libexec/flua/libfreebsd/kenv/Makefile
@@ -1,5 +1,5 @@
SHLIB_NAME= kenv.so
-SRCS+= kenv.c
MAN= freebsd.kenv.3lua
+.include "Makefile.inc"
.include <bsd.lib.mk>
diff --git a/libexec/flua/libfreebsd/kenv/Makefile.inc b/libexec/flua/libfreebsd/kenv/Makefile.inc
new file mode 100644
--- /dev/null
+++ b/libexec/flua/libfreebsd/kenv/Makefile.inc
@@ -0,0 +1,2 @@
+.PATH: ${.PARSEDIR}
+SRCS+= kenv.c
diff --git a/libexec/flua/libfreebsd/kenv/kenv.c b/libexec/flua/libfreebsd/kenv/kenv.c
--- a/libexec/flua/libfreebsd/kenv/kenv.c
+++ b/libexec/flua/libfreebsd/kenv/kenv.c
@@ -14,6 +14,8 @@
#include <lualib.h>
#include <lauxlib.h>
+#include "bootstrap.h"
+
int luaopen_freebsd_kenv(lua_State *L);
static int
@@ -94,3 +96,5 @@
return (1);
}
+
+FLUA_MODULE_NAMED(freebsd_kenv, "freebsd.kenv");
diff --git a/libexec/flua/libfreebsd/sys/linker/Makefile b/libexec/flua/libfreebsd/sys/linker/Makefile
--- a/libexec/flua/libfreebsd/sys/linker/Makefile
+++ b/libexec/flua/libfreebsd/sys/linker/Makefile
@@ -1,7 +1,6 @@
SHLIB_NAME= linker.so
-SRCS+= linker.c
-
MAN= freebsd.sys.linker.3lua
+.include "Makefile.inc"
.include <bsd.lib.mk>
diff --git a/libexec/flua/libfreebsd/sys/linker/Makefile.inc b/libexec/flua/libfreebsd/sys/linker/Makefile.inc
new file mode 100644
--- /dev/null
+++ b/libexec/flua/libfreebsd/sys/linker/Makefile.inc
@@ -0,0 +1,2 @@
+.PATH: ${.PARSEDIR}
+SRCS+= linker.c
diff --git a/libexec/flua/libfreebsd/sys/linker/linker.c b/libexec/flua/libfreebsd/sys/linker/linker.c
--- a/libexec/flua/libfreebsd/sys/linker/linker.c
+++ b/libexec/flua/libfreebsd/sys/linker/linker.c
@@ -15,6 +15,8 @@
#include <lualib.h>
#include <lauxlib.h>
+#include "bootstrap.h"
+
int luaopen_freebsd_sys_linker(lua_State *L);
static int
@@ -80,3 +82,5 @@
return (1);
}
+
+FLUA_MODULE_NAMED(freebsd_sys_linker, "freebsd.sys.linker");
diff --git a/libexec/flua/libhash/Makefile b/libexec/flua/libhash/Makefile
--- a/libexec/flua/libhash/Makefile
+++ b/libexec/flua/libhash/Makefile
@@ -1,9 +1,6 @@
SHLIB_NAME= hash.so
-SRCS+= lhash.c
-
-LIBADD+= md
-
MAN= hash.3lua
+.include "Makefile.inc"
.include <bsd.lib.mk>
diff --git a/libexec/flua/libhash/Makefile.inc b/libexec/flua/libhash/Makefile.inc
new file mode 100644
--- /dev/null
+++ b/libexec/flua/libhash/Makefile.inc
@@ -0,0 +1,3 @@
+.PATH: ${.PARSEDIR}
+SRCS+= lhash.c
+LIBADD+= md
diff --git a/libexec/flua/libhash/lhash.c b/libexec/flua/libhash/lhash.c
--- a/libexec/flua/libhash/lhash.c
+++ b/libexec/flua/libhash/lhash.c
@@ -11,6 +11,8 @@
#include <sha256.h>
#include <string.h>
+#include "bootstrap.h"
+
#define SHA256_META "SHA256 meta table"
#define SHA256_DIGEST_LEN 32
@@ -175,3 +177,5 @@
return 1;
}
+
+FLUA_MODULE(hash);
diff --git a/libexec/flua/libjail/Makefile b/libexec/flua/libjail/Makefile
--- a/libexec/flua/libjail/Makefile
+++ b/libexec/flua/libjail/Makefile
@@ -1,9 +1,6 @@
SHLIB_NAME= jail.so
-SRCS+= lua_jail.c
-
-LIBADD+= jail
-
MAN= jail.3lua
+.include "Makefile.inc"
.include <bsd.lib.mk>
diff --git a/libexec/flua/libjail/Makefile.inc b/libexec/flua/libjail/Makefile.inc
new file mode 100644
--- /dev/null
+++ b/libexec/flua/libjail/Makefile.inc
@@ -0,0 +1,3 @@
+.PATH: ${.PARSEDIR}
+SRCS+= lua_jail.c
+LIBADD+= jail
diff --git a/libexec/flua/libjail/lua_jail.c b/libexec/flua/libjail/lua_jail.c
--- a/libexec/flua/libjail/lua_jail.c
+++ b/libexec/flua/libjail/lua_jail.c
@@ -38,6 +38,8 @@
#include <lauxlib.h>
#include <lualib.h>
+#include "bootstrap.h"
+
#define JAIL_METATABLE "jail iterator metatable"
/*
@@ -716,3 +718,5 @@
return (1);
}
+
+FLUA_MODULE(jail);
diff --git a/libexec/flua/liblyaml/Makefile b/libexec/flua/liblyaml/Makefile
--- a/libexec/flua/liblyaml/Makefile
+++ b/libexec/flua/liblyaml/Makefile
@@ -1,22 +1,4 @@
SHLIB_NAME= yaml.so
-WARNS= 1
-LYAMLSRC?= ${SRCTOP}/contrib/lyaml
-.PATH: ${LYAMLSRC}/ext/yaml ${LYAMLSRC}/lib/lyaml
-SRCS= emitter.c \
- parser.c \
- scanner.c \
- yaml.c
-CFLAGS+= \
- -I${LYAMLSRC}/ext/yaml \
- -I${SRCTOP}/contrib/libyaml/include \
- -DVERSION=\"6.2.8\"
-LIBADD+= yaml
-
-FILES= explicit.lua \
- functional.lua \
- implicit.lua \
- init.lua
-FILESDIR= ${SHAREDIR}/flua/lyaml
-
+.include "Makefile.inc"
.include <bsd.lib.mk>
diff --git a/libexec/flua/liblyaml/Makefile b/libexec/flua/liblyaml/Makefile.inc
copy from libexec/flua/liblyaml/Makefile
copy to libexec/flua/liblyaml/Makefile.inc
--- a/libexec/flua/liblyaml/Makefile
+++ b/libexec/flua/liblyaml/Makefile.inc
@@ -1,9 +1,8 @@
-SHLIB_NAME= yaml.so
-
WARNS= 1
+
LYAMLSRC?= ${SRCTOP}/contrib/lyaml
.PATH: ${LYAMLSRC}/ext/yaml ${LYAMLSRC}/lib/lyaml
-SRCS= emitter.c \
+SRCS+= emitter.c \
parser.c \
scanner.c \
yaml.c
@@ -13,10 +12,9 @@
-DVERSION=\"6.2.8\"
LIBADD+= yaml
-FILES= explicit.lua \
+FILESGROUPS+= YAML
+YAML= explicit.lua \
functional.lua \
implicit.lua \
init.lua
-FILESDIR= ${SHAREDIR}/flua/lyaml
-
-.include <bsd.lib.mk>
+YAMLDIR= ${SHAREDIR}/flua/lyaml
diff --git a/libexec/flua/libucl/Makefile b/libexec/flua/libucl/Makefile
--- a/libexec/flua/libucl/Makefile
+++ b/libexec/flua/libucl/Makefile
@@ -1,14 +1,4 @@
SHLIB_NAME= ucl.so
-WARNS= 2
-
-UCLSRC?= ${SRCTOP}/contrib/libucl
-.PATH: ${UCLSRC}/lua
-SRCS+= lua_ucl.c
-CFLAGS+= \
- -I${UCLSRC}/include \
- -I${UCLSRC}/src \
- -I${UCLSRC}/uthash
-LIBADD+= ucl
-
+.include "Makefile.inc"
.include <bsd.lib.mk>
diff --git a/libexec/flua/libucl/Makefile b/libexec/flua/libucl/Makefile.inc
copy from libexec/flua/libucl/Makefile
copy to libexec/flua/libucl/Makefile.inc
--- a/libexec/flua/libucl/Makefile
+++ b/libexec/flua/libucl/Makefile.inc
@@ -1,8 +1,8 @@
-SHLIB_NAME= ucl.so
-
+.if ${WARNS:U6} > 2
WARNS= 2
+.endif
-UCLSRC?= ${SRCTOP}/contrib/libucl
+UCLSRC?= ${SRCTOP}/contrib/libucl
.PATH: ${UCLSRC}/lua
SRCS+= lua_ucl.c
CFLAGS+= \
@@ -10,5 +10,3 @@
-I${UCLSRC}/src \
-I${UCLSRC}/uthash
LIBADD+= ucl
-
-.include <bsd.lib.mk>
diff --git a/libexec/flua/linit_flua.c b/libexec/flua/linit_flua.c
--- a/libexec/flua/linit_flua.c
+++ b/libexec/flua/linit_flua.c
@@ -26,8 +26,8 @@
#include "lprefix.h"
-
#include <stddef.h>
+#include <stdlib.h>
#include "lua.h"
@@ -37,6 +37,8 @@
#include "lposix.h"
#include "lfbsd.h"
+#include "bootstrap.h"
+
/*
** these libs are loaded by lua.c and are readily available to any Lua
** program
@@ -62,6 +64,28 @@
{NULL, NULL}
};
+#ifdef BOOTSTRAPPING
+static void __attribute__((constructor)) flua_init_env(void) {
+ /*
+ * This happens in the middle of luaopen_package(). We could move it into
+ * flua_setup_mods(), but it seems better to avoid its timing being so
+ * important that it would break some of our bootstrap modules if someone
+ * were to reorder things.
+ */
+ if (getenv("LUA_PATH") == NULL)
+ setenv("LUA_PATH", BOOTSTRAP_FLUA_PATH, 1);
+}
+
+static void flua_setup_mods (lua_State *L) {
+ const luaL_Reg **flib;
+
+ SET_FOREACH(flib, flua_module_set) {
+ luaL_requiref(L, (*flib)->name, (*flib)->func, 1);
+ lua_pop(L, 1); /* remove lib */
+ }
+};
+#endif
+
LUALIB_API void luaL_openlibs (lua_State *L) {
const luaL_Reg *lib;
/* "require" functions from 'loadedlibs' and set results to global table */
@@ -69,4 +93,7 @@
luaL_requiref(L, lib->name, lib->func, 1);
lua_pop(L, 1); /* remove lib */
}
+#ifdef BOOTSTRAPPING
+ flua_setup_mods(L);
+#endif
}
diff --git a/tools/build/Makefile b/tools/build/Makefile
--- a/tools/build/Makefile
+++ b/tools/build/Makefile
@@ -496,6 +496,7 @@
lib/geom \
usr/include/casper \
usr/include/private/ucl \
+ usr/include/private/yaml \
usr/include/private/zstd \
usr/lib \
usr/libdata/pkgconfig \

File Metadata

Mime Type
text/plain
Expires
Tue, Feb 24, 1:30 PM (2 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28974279
Default Alt Text
D51890.id160316.diff (13 KB)

Event Timeline