Add /.args feature to Redbean/Lua/SQLite/Python/QuickJS

You now have some ability to truly make an executable yours, by adding a
`.args` file to the root of the zip structure. If this is specified,
then you'll be overriding the default CLI args.

This will be a great feature for folks who want to distribute their own
apps, using the interpreter executable, but have the executable appears
to be just your app rather than being the interpreter.
This commit is contained in:
Justine Tunney 2022-05-12 11:01:58 -07:00
parent 0f6251f4d2
commit 4499f98e76
19 changed files with 421 additions and 19 deletions

View file

@ -48,6 +48,7 @@
#include "third_party/lua/lrepl.h"
#include "third_party/lua/lua.h"
#include "third_party/lua/lualib.h"
#include "tool/args/args.h"
// clang-format off
asm(".ident\t\"\\n\\n\
@ -388,8 +389,9 @@ static int pmain (lua_State *L) {
int main (int argc, char **argv) {
int status, result;
lua_State *L;
int status, result;
LoadZipArgs(&argc, &argv);
if (IsModeDbg()) {
ShowCrashReports();
}

View file

@ -38,7 +38,8 @@ THIRD_PARTY_LUA_DIRECTDEPS = \
LIBC_UNICODE \
NET_HTTP \
THIRD_PARTY_LINENOISE \
THIRD_PARTY_GDTOA
THIRD_PARTY_GDTOA \
TOOL_ARGS
THIRD_PARTY_LUA_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_LUA_DIRECTDEPS),$($(x))))

View file

@ -461,7 +461,8 @@ THIRD_PARTY_PYTHON_STAGE1_A_DIRECTDEPS = \
TOOL_BUILD_LIB \
THIRD_PARTY_DLMALLOC \
THIRD_PARTY_GETOPT \
THIRD_PARTY_XED
THIRD_PARTY_XED \
TOOL_ARGS
THIRD_PARTY_PYTHON_STAGE1_A_DEPS = \
$(call uniq,$(foreach x,$(THIRD_PARTY_PYTHON_STAGE1_A_DIRECTDEPS),$($(x))))
@ -1149,7 +1150,8 @@ THIRD_PARTY_PYTHON_STAGE2_A_DIRECTDEPS = \
THIRD_PARTY_PYTHON_STAGE1 \
THIRD_PARTY_MBEDTLS \
THIRD_PARTY_SQLITE3 \
THIRD_PARTY_ZLIB
THIRD_PARTY_ZLIB \
TOOL_ARGS
THIRD_PARTY_PYTHON_STAGE2_A_DEPS = \
$(call uniq,$(foreach x,$(THIRD_PARTY_PYTHON_STAGE2_A_DIRECTDEPS),$($(x))))
@ -2099,7 +2101,8 @@ THIRD_PARTY_PYTHON_PYTEST_PYMAINS_DIRECTDEPS = \
THIRD_PARTY_PYTHON_STAGE1 \
THIRD_PARTY_PYTHON_STAGE2 \
THIRD_PARTY_PYTHON_PYTEST \
THIRD_PARTY_LINENOISE
THIRD_PARTY_LINENOISE \
TOOL_ARGS
THIRD_PARTY_PYTHON_PYTEST_PYMAINS_DEPS = \
$(call uniq,$(foreach x,$(THIRD_PARTY_PYTHON_PYTEST_PYMAINS_DIRECTDEPS),$($(x))))
@ -4176,7 +4179,8 @@ THIRD_PARTY_PYTHON_PYTHON_DIRECTDEPS = \
THIRD_PARTY_LINENOISE \
THIRD_PARTY_PYTHON_STAGE1 \
THIRD_PARTY_PYTHON_STAGE2 \
THIRD_PARTY_PYTHON_PYTEST
THIRD_PARTY_PYTHON_PYTEST \
TOOL_ARGS
o/$(MODE)/third_party/python/python.pkg: \
$(THIRD_PARTY_PYTHON_PYTHON_OBJS) \

View file

@ -41,6 +41,7 @@
#include "third_party/python/Include/pythonrun.h"
#include "third_party/python/Include/unicodeobject.h"
#include "third_party/python/Include/yoink.h"
#include "tool/args/args.h"
/* clang-format off */
STATIC_STACK_SIZE(0x100000);
@ -348,5 +349,6 @@ RunPythonModule(int argc, char **argv)
int
main(int argc, char **argv)
{
LoadZipArgs(&argc, &argv);
return RunPythonModule(argc, argv);
}

View file

@ -35,6 +35,7 @@
#include "third_party/gdtoa/gdtoa.h"
#include "third_party/quickjs/cutils.h"
#include "third_party/quickjs/quickjs-libc.h"
#include "tool/args/args.h"
STATIC_STACK_SIZE(0x80000);
@ -329,6 +330,8 @@ int main(int argc, char **argv)
#endif
size_t stack_size = 0;
LoadZipArgs(&argc, &argv);
#if IsModeDbg()
ShowCrashReports();
#endif

View file

@ -91,7 +91,8 @@ THIRD_PARTY_QUICKJS_A_DIRECTDEPS = \
THIRD_PARTY_COMPILER_RT \
THIRD_PARTY_GDTOA \
THIRD_PARTY_GETOPT \
THIRD_PARTY_MUSL
THIRD_PARTY_MUSL \
TOOL_ARGS
THIRD_PARTY_QUICKJS_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_QUICKJS_A_DIRECTDEPS),$($(x))))

View file

@ -92,6 +92,8 @@
#include "libc/calls/calls.h"
#include "libc/calls/struct/sigaction.h"
#include "libc/calls/struct/stat.macros.h"
#include "tool/args/args.h"
#include "tool/args/args.h"
#include "third_party/sqlite3/sqlite3.h"
typedef sqlite3_int64 i64;
@ -20563,12 +20565,7 @@ static char *cmdline_option_value(int argc, char **argv, int i){
# endif
#endif
#if SQLITE_SHELL_IS_UTF8
int SQLITE_CDECL main(int argc, char **argv){
#else
int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
char **argv;
#endif
char *zErrMsg = 0;
ShellState data;
const char *zInitFile = 0;
@ -20579,11 +20576,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
int nCmd = 0;
char **azCmd = 0;
const char *zVfs = 0; /* Value of -vfs command-line option */
#if !SQLITE_SHELL_IS_UTF8
char **argvToFree = 0;
int argcToFree = 0;
#endif
LoadZipArgs(&argc, &argv);
setBinaryMode(stdin, 0);
setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */
setvbuf(stdin, (char *)NULL, _IONBF, BUFSIZ);

View file

@ -62,7 +62,8 @@ THIRD_PARTY_SQLITE3_A_DIRECTDEPS = \
THIRD_PARTY_GDTOA \
THIRD_PARTY_LINENOISE \
THIRD_PARTY_MUSL \
THIRD_PARTY_ZLIB
THIRD_PARTY_ZLIB \
TOOL_ARGS
THIRD_PARTY_SQLITE3_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_SQLITE3_A_DIRECTDEPS),$($(x))))