diff --git a/.github/workflows/build-windows-hosts.yml b/.github/workflows/build-windows-hosts.yml index 18f53bb65..c7c47f9d5 100644 --- a/.github/workflows/build-windows-hosts.yml +++ b/.github/workflows/build-windows-hosts.yml @@ -49,7 +49,7 @@ jobs: with: msystem: ${{ inputs.msystem }} update: true - install: git mingw-w64-clang-${{ inputs.msys-arch }}-7zip mingw-w64-clang-${{ inputs.msys-arch }}-cmake mingw-w64-clang-${{ inputs.msys-arch }}-clang mingw-w64-clang-${{ inputs.msys-arch }}-jq mingw-w64-clang-${{ inputs.msys-arch }}-vulkan-loader mingw-w64-clang-${{ inputs.msys-arch }}-vulkan-headers mingw-w64-clang-${{ inputs.msys-arch }}-opencl-icd mingw-w64-clang-${{ inputs.msys-arch }}-opencl-headers mingw-w64-clang-${{ inputs.msys-arch }}-cppwinrt mingw-w64-clang-${{ inputs.msys-arch }}-imagemagick mingw-w64-clang-${{ inputs.msys-arch }}-chafa mingw-w64-clang-${{ inputs.msys-arch }}-lua mingw-w64-clang-${{ inputs.msys-arch }}-quickjs-ng mingw-w64-clang-${{ inputs.msys-arch }}-directx-headers + install: git mingw-w64-clang-${{ inputs.msys-arch }}-7zip mingw-w64-clang-${{ inputs.msys-arch }}-cmake mingw-w64-clang-${{ inputs.msys-arch }}-clang mingw-w64-clang-${{ inputs.msys-arch }}-jq mingw-w64-clang-${{ inputs.msys-arch }}-vulkan-loader mingw-w64-clang-${{ inputs.msys-arch }}-vulkan-headers mingw-w64-clang-${{ inputs.msys-arch }}-opencl-icd mingw-w64-clang-${{ inputs.msys-arch }}-opencl-headers mingw-w64-clang-${{ inputs.msys-arch }}-cppwinrt mingw-w64-clang-${{ inputs.msys-arch }}-imagemagick mingw-w64-clang-${{ inputs.msys-arch }}-chafa mingw-w64-clang-${{ inputs.msys-arch }}-lua mingw-w64-clang-${{ inputs.msys-arch }}-directx-headers - name: print msys version run: uname -a @@ -61,7 +61,7 @@ jobs: run: cmake --build . --verbose -j4 - name: copy necessary dlls - run: cp /${{ inputs.msystem-lower }}/bin/{lua55,libqjs-0}.dll . + run: cp /${{ inputs.msystem-lower }}/bin/lua55.dll . - name: list features run: ./fastfetch --list-features diff --git a/CMakeLists.txt b/CMakeLists.txt index b42249b4a..9df90f82a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,7 +121,6 @@ option(ENABLE_EMBEDDED_PCIIDS "Embed pci.ids into fastfetch, requires `python`" option(ENABLE_EMBEDDED_AMDGPUIDS "Embed amdgpu.ids into fastfetch, requires `python`" OFF) option(ENABLE_WORDEXP "Enable using of wordexp(3) if available, instead of glob(3)" ON) option(ENABLE_LUA "Enable lua scripting for format strings" ON) -option(ENABLE_QUICKJS "Enable quickjs scripting for format strings" OFF) option(ENABLE_LIBZFS "Enable libzfs" ON) option(ENABLE_WCWIDTH "Detect wide-width characters with wcwidth when calculating logo and separator width. Disable for a smaller and slightly faster build, but logos containing CJK/emoji may be measured too narrow and render incorrectly. Such usecases are uncommon." ON) set(DEFAULT_STRUCTURE "Title:Separator:OS:Host:Kernel:Uptime:Packages:Shell:Display:DE:WM:WMTheme:Theme:Icons:Font:Cursor:Terminal:TerminalFont:CPU:GPU:Memory:Swap:Disk:LocalIp:Battery:PowerAdapter:Locale:Break:Colors" CACHE STRING "Default module structure for detection") @@ -1849,11 +1848,6 @@ ff_lib_enable(ELF "libelf" "libelf" ) -ff_lib_enable(QUICKJS - "qjs" - "qjs" - "qjs" -) if(ENABLE_LUA) # Lua is a special case since its CMake config does not follow the usual pattern find_package(Lua QUIET) diff --git a/src/common/impl/format.c b/src/common/impl/format.c index 450870c39..b3b8ab190 100644 --- a/src/common/impl/format.c +++ b/src/common/impl/format.c @@ -280,183 +280,6 @@ static bool parseLuaString(FFstrbuf* buffer, const char* script, uint32_t script } #endif -#if FF_HAVE_QUICKJS - #include - -struct FFQuickJSData { - FF_LIBRARY_SYMBOL(JS_NewRuntime) - FF_LIBRARY_SYMBOL(JS_NewContext) - FF_LIBRARY_SYMBOL(JS_FreeRuntime) - FF_LIBRARY_SYMBOL(JS_EvalThis) - FF_LIBRARY_SYMBOL(JS_GetException) - FF_LIBRARY_SYMBOL(JS_ToCStringLen2) - FF_LIBRARY_SYMBOL(JS_FreeCString) - FF_LIBRARY_SYMBOL(JS_NewStringLen) - FF_LIBRARY_SYMBOL(JS_NewArray) - FF_LIBRARY_SYMBOL(JS_NewBigUint64) - FF_LIBRARY_SYMBOL(JS_SetPropertyUint32) - FF_LIBRARY_SYMBOL(JS_NewObject) - FF_LIBRARY_SYMBOL(JS_SetPropertyStr) - FF_LIBRARY_SYMBOL(JS_FreeValue) - - JSRuntime* rt; - JSContext* ctx; - bool inited; -} qjsData; - -static const char* loadQuickJSState(void) { - if (qjsData.inited) { - if (qjsData.ctx == nullptr) { - return "QuickJS is not available"; - } - return nullptr; - } - - qjsData.inited = true; - #ifdef _WIN32 - FF_LIBRARY_LOAD_MESSAGE(libqjs, "libqjs-0" FF_LIBRARY_EXTENSION, 0) - #else - FF_LIBRARY_LOAD_MESSAGE(libqjs, "libqjs" FF_LIBRARY_EXTENSION, 0) - #endif - - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_NewRuntime) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_NewContext) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_FreeRuntime) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_EvalThis) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_GetException) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_ToCStringLen2) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_FreeCString) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_NewStringLen) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_NewArray) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_SetPropertyUint32) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_NewObject) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_SetPropertyStr) - FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(libqjs, qjsData, JS_FreeValue) - - qjsData.rt = qjsData.ffJS_NewRuntime(); - if (qjsData.rt == nullptr) { - return "JS_NewRuntime() failed"; - } - - qjsData.ctx = qjsData.ffJS_NewContext(qjsData.rt); - if (qjsData.ctx == nullptr) { - qjsData.ffJS_FreeRuntime(qjsData.rt); - qjsData.rt = nullptr; - return "JS_NewContext() failed"; - } - - libqjs = nullptr; // don't close quickjs - - return nullptr; -} - -static bool parseQuickJSString(FFstrbuf* buffer, const char* script, uint32_t scriptLen, uint32_t numArgs, const FFformatarg* arguments) { - const char* err = loadQuickJSState(); - if (err) { - ffStrbufAppendF(buffer, "Qjs init error: %s", err); - return false; - } - JSContext* ctx = qjsData.ctx; - JSValue argsObj = qjsData.ffJS_NewObject(ctx); - FF_STRBUF_AUTO_DESTROY argNameBuf = ffStrbufCreate(); - - for (uint32_t i = 0; i < numArgs; ++i) { - const FFformatarg* arg = &arguments[i]; - - JSValue value; - switch (arg->type) { - case FF_ARG_TYPE_INT: - value = JS_NewInt32(ctx, *(int32_t*) arg->value); - break; - case FF_ARG_TYPE_UINT: - value = JS_NewUint32(ctx, *(uint32_t*) arg->value); - break; - case FF_ARG_TYPE_UINT64: { - uint64_t val = *(uint64_t*) arg->value; - if (val <= INT32_MAX) { - value = JS_NewInt32(ctx, (int32_t) val); - } else { - value = JS_NewFloat64(ctx, (double) val); - } - break; - } - case FF_ARG_TYPE_UINT16: - value = JS_NewUint32(ctx, *(uint16_t*) arg->value); - break; - case FF_ARG_TYPE_UINT8: - value = JS_NewUint32(ctx, *(uint8_t*) arg->value); - break; - case FF_ARG_TYPE_FLOAT: - value = JS_NewFloat64(ctx, *(float*) arg->value); - break; - case FF_ARG_TYPE_DOUBLE: - value = JS_NewFloat64(ctx, *(double*) arg->value); - break; - case FF_ARG_TYPE_BOOL: - value = JS_NewBool(ctx, *(bool*) arg->value); - break; - case FF_ARG_TYPE_STRING: - value = qjsData.ffJS_NewStringLen(ctx, (const char*) arg->value, strlen((const char*) arg->value)); - break; - case FF_ARG_TYPE_STRBUF: { - const FFstrbuf* sb = (const FFstrbuf*) arg->value; - value = qjsData.ffJS_NewStringLen(ctx, sb->chars, sb->length); - break; - } - case FF_ARG_TYPE_LIST: { - const FFlist* list = (const FFlist*) arg->value; - JSValue arr = qjsData.ffJS_NewArray(ctx); - for (uint32_t li = 0; li < list->length; ++li) { - const FFstrbuf* item = FF_LIST_GET(FFstrbuf, *list, li); - JSValue itemValue = qjsData.ffJS_NewStringLen(ctx, item->chars, item->length); - qjsData.ffJS_SetPropertyUint32(ctx, arr, li, itemValue); - } - - value = arr; - break; - } - default: - value = JS_UNDEFINED; - break; - } - - if (arg->name && arg->name[0]) { - normalizeArgName(&argNameBuf, arg->name); - } else { - ffStrbufSetF(&argNameBuf, "arg%" PRIu32, i + 1); - } - qjsData.ffJS_SetPropertyStr(ctx, argsObj, argNameBuf.chars, value); - } - JSValue result = qjsData.ffJS_EvalThis(ctx, argsObj, script, scriptLen, "", JS_EVAL_TYPE_GLOBAL | JS_EVAL_FLAG_STRICT); - - qjsData.ffJS_FreeValue(ctx, argsObj); - - bool ret = false; - if (JS_IsException(result)) { - JSValue exc = qjsData.ffJS_GetException(ctx); - const char* message = qjsData.ffJS_ToCStringLen2(ctx, nullptr, exc, false); - qjsData.ffJS_FreeValue(ctx, exc); - ffStrbufAppendF(buffer, "Qjs runtime error: %s", message ?: "unknown"); - if (message) { - qjsData.ffJS_FreeCString(ctx, message); - } - } else if (JS_IsUndefined(result)) { - ffStrbufAppendS(buffer, "Qjs result error: undefined result"); - } else { - size_t len; - const char* res = qjsData.ffJS_ToCStringLen2(ctx, &len, result, false); - if (res) { - ffStrbufAppendNS(buffer, (uint32_t) len, res); - qjsData.ffJS_FreeCString(ctx, res); - } - ret = true; - } - - qjsData.ffJS_FreeValue(ctx, result); - return ret; -} -#endif - // Returns the length of the ANSI CSI sequence at `str`, or 0 if there is none. // A CSI sequence is `ESC [` + parameter bytes (0x30-0x3F) + intermediate bytes (0x20-0x2F) + final byte (0x40-0x7E) static uint32_t ansiEscapeLength(const char* str) { @@ -813,12 +636,6 @@ static bool parseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, uint3 } bool ffParseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, uint32_t numArgs, const FFformatarg* arguments) { -#if FF_HAVE_QUICKJS - if (ffStrbufStartsWithS(formatstr, "qjs:")) { - return parseQuickJSString(buffer, formatstr->chars + 4, formatstr->length - 4, numArgs, arguments); - } -#endif - #if FF_HAVE_LUA if (ffStrbufStartsWithS(formatstr, "lua:")) { // If outputFormat starts with "lua:", treat the rest as a Lua script diff --git a/src/common/impl/init.c b/src/common/impl/init.c index 9c29a5a78..d6758bae0 100644 --- a/src/common/impl/init.c +++ b/src/common/impl/init.c @@ -178,9 +178,6 @@ void ffDestroyInstance(void) { #if FF_HAVE_LUA #include #endif -#if FF_HAVE_QUICKJS - #include -#endif // Must be in a file compiled with the libfastfetch target, because the FF_HAVE* macros are not defined for the executable targets void ffListFeatures(void) { @@ -289,9 +286,6 @@ void ffListFeatures(void) { #endif #if FF_HAVE_LUA LUA_VERSION "\n" -#endif -#if FF_HAVE_QUICKJS - "QuickJS " FF_STR(QJS_VERSION_MAJOR) "." FF_STR(QJS_VERSION_MINOR) "." FF_STR(QJS_VERSION_PATCH) QJS_VERSION_SUFFIX "\n" #endif "", stdout); diff --git a/src/modules/codec/codec.c b/src/modules/codec/codec.c index 1419d78c3..e404e8b20 100644 --- a/src/modules/codec/codec.c +++ b/src/modules/codec/codec.c @@ -79,7 +79,7 @@ static void printCodecLine(const FFCodecOptions* options, uint8_t index, FFstrbu ffPrintLogoAndKey(key.chars, 0, &options->moduleArgs, FF_PRINT_TYPE_NO_CUSTOM_KEY); puts(typesJoined.length ? typesJoined.chars : "None"); } else { - FF_LIST_AUTO_DESTROY typeList = ffListCreate(); // Use list instead of pre-joined string for qjs and lua + FF_LIST_AUTO_DESTROY typeList = ffListCreate(); // Use list instead of pre-joined string for lua for (FFCodecType type = FF_CODEC_TYPE_H261; type <= FF_CODEC_TYPE_MAX; type <<= 1) { if ((types & type) == 0) { continue; diff --git a/src/modules/custom/custom.c b/src/modules/custom/custom.c index 2c11d87c6..afb44196f 100644 --- a/src/modules/custom/custom.c +++ b/src/modules/custom/custom.c @@ -17,7 +17,7 @@ bool ffGenerateCustomJsonResult(FFCustomOptions* options, yyjson_mut_doc* doc, y FF_STRBUF_AUTO_DESTROY result = ffStrbufCreate(); // This module's output *is* its format string, so the JSON result is that string rendered — - // for a `qjs:`/`lua:` format that means the script's output, not the script. `ffPrintCustom()` + // for a `lua:` format that means the script's output, not the script. `ffPrintCustom()` // gets the same value through `ffPrintFormat()`. Without this the module had no JSON result at // all, so a script consuming `--format json` could not read a custom line's value. if (!ffParseFormatString(&result, &options->moduleArgs.outputFormat, 0, (FFformatarg[]) {})) {