-
-
Save xeioex/706a9fbaf85a9733b31ef86289a94353 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| commit 10d48ea095ea51067fecd666696e0ce5295208aa | |
| Author: Dmitry Volyntsev <[email protected]> | |
| Date: Mon Aug 25 16:47:43 2025 -0700 | |
| Fixed building QuickJS support with clang 19. | |
| checking for QuickJS library -lquickjs In file included from | |
| build/autotest.c:6: | |
| /home/xeioex/workspace/nginx/nginScript/quickjs/quickjs.h:1052:34: | |
| error: cast from 'JSCFunctionMagic *' (aka 'struct JSValue (*)(struct | |
| JSContext *, struct JSValue, int, struct JSValue *, int)') to | |
| 'JSCFunction *' (aka 'struct JSValue (*)(struct JSContext *, struct | |
| JSValue, int, struct JSValue *)') converts to incompatible function type | |
| [-Werror,-Wcast-function-type-mismatch] 1052 | return | |
| JS_NewCFunction2(ctx, (JSCFunction *)func, name, length, cproto, magic); | |
| -Wcast-function-type-mismatch become enabled by -Werror since | |
| clang 19. | |
| diff --git a/auto/quickjs b/auto/quickjs | |
| index 60c0888e..e88cf28b 100644 | |
| --- a/auto/quickjs | |
| +++ b/auto/quickjs | |
| @@ -5,6 +5,7 @@ | |
| NJS_QUICKJS_LIB= | |
| NJS_HAVE_QUICKJS=NO | |
| +NJS_QUICKJS_DEFAULT_INCS="src $NJS_BUILD_DIR" | |
| if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_found=no | |
| @@ -12,14 +13,9 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_feature="QuickJS library -lquickjs.lto" | |
| njs_feature_name=NJS_HAVE_QUICKJS | |
| njs_feature_run=yes | |
| - njs_feature_incs= | |
| + njs_feature_incs="$NJS_QUICKJS_DEFAULT_INCS" | |
| njs_feature_libs="-lquickjs.lto -lm -ldl -lpthread" | |
| - njs_feature_test="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h> | |
| + njs_feature_test="#include <qjs.h> | |
| int main() { | |
| JSRuntime *rt; | |
| @@ -39,7 +35,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| if [ $njs_found = no ]; then | |
| njs_feature="QuickJS library -I/usr/include/quickjs/ -L/usr/lib/quickjs/ -lquickjs.lto" | |
| - njs_feature_incs="/usr/include/quickjs/" | |
| + njs_feature_incs="$NJS_QUICKJS_DEFAULT_INCS /usr/include/quickjs/" | |
| njs_feature_libs="-L/usr/lib/quickjs/ -lquickjs.lto -lm -ldl -lpthread" | |
| . auto/feature | |
| @@ -47,7 +43,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| if [ $njs_found = no ]; then | |
| njs_feature="QuickJS library -I/usr/include/quickjs/ -L/usr/lib/quickjs/ -lquickjs" | |
| - njs_feature_incs="/usr/include/quickjs/" | |
| + njs_feature_incs="$NJS_QUICKJS_DEFAULT_INCS /usr/include/quickjs/" | |
| njs_feature_libs="-L/usr/lib/quickjs/ -lquickjs -lm -ldl -lpthread" | |
| . auto/feature | |
| @@ -55,7 +51,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| if [ $njs_found = no ]; then | |
| njs_feature="QuickJS-NG library -lqjs" | |
| - njs_feature_incs="" | |
| + njs_feature_incs="$NJS_QUICKJS_DEFAULT_INCS" | |
| njs_feature_libs="-lqjs -lm -ldl -lpthread" | |
| . auto/feature | |
| @@ -66,12 +62,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_feature="QuickJS JS_GetClassID()" | |
| njs_feature_name=NJS_HAVE_QUICKJS_GET_CLASS_ID | |
| - njs_feature_test="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h> | |
| + njs_feature_test="#include <qjs.h> | |
| int main() { | |
| (void) JS_GetClassID(JS_UNDEFINED); | |
| @@ -89,12 +80,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_feature="QuickJS JS_NewTypedArray()" | |
| njs_feature_name=NJS_HAVE_QUICKJS_NEW_TYPED_ARRAY | |
| - njs_feature_test="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h> | |
| + njs_feature_test="#include <qjs.h> | |
| int main() { | |
| JSValue ta, argv; | |
| @@ -116,12 +102,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_feature="QuickJS JS_IsSameValue()" | |
| njs_feature_name=NJS_HAVE_QUICKJS_IS_SAME_VALUE | |
| - njs_feature_test="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h> | |
| + njs_feature_test="#include <qjs.h> | |
| int main() { | |
| JSRuntime *rt; | |
| @@ -139,12 +120,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_feature="QuickJS JS_IsArray()" | |
| njs_feature_name=NJS_HAVE_QUICKJS_IS_ARRAY_SINGLE_ARG | |
| - njs_feature_test="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h> | |
| + njs_feature_test="#include <qjs.h> | |
| int main() { | |
| JSRuntime *rt; | |
| @@ -162,12 +138,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_feature="QuickJS JS_AddIntrinsicBigInt()" | |
| njs_feature_name=NJS_HAVE_QUICKJS_ADD_INTRINSIC_BIG_INT | |
| - njs_feature_test="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h> | |
| + njs_feature_test="#include <qjs.h> | |
| int main() { | |
| JSRuntime *rt; | |
| @@ -186,12 +157,7 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| njs_feature="QuickJS version" | |
| njs_feature_name=NJS_QUICKJS_VERSION | |
| njs_feature_run=value | |
| - njs_feature_test="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h> | |
| + njs_feature_test="#include <qjs.h> | |
| int main() { | |
| #if defined(QJS_VERSION_MAJOR) | |
| @@ -206,7 +172,8 @@ if [ $NJS_TRY_QUICKJS = YES ]; then | |
| NJS_HAVE_QUICKJS=YES | |
| NJS_QUICKJS_LIB="$njs_feature_libs" | |
| - NJS_LIB_INCS="$NJS_LIB_INCS $njs_feature_incs" | |
| + NJS_QUICKJS_INCS=`echo $njs_feature_incs | sed -e "s|$NJS_QUICKJS_DEFAULT_INCS||"` | |
| + NJS_LIB_INCS="$NJS_LIB_INCS $NJS_QUICKJS_INCS" | |
| NJS_LIB_AUX_LIBS="$NJS_LIB_AUX_LIBS $njs_feature_libs" | |
| fi | |
| diff --git a/nginx/config b/nginx/config | |
| index 1c303d9c..6f8ffedc 100644 | |
| --- a/nginx/config | |
| +++ b/nginx/config | |
| @@ -23,6 +23,7 @@ NJS_XSLT_LIB= | |
| NJS_ZLIB_LIB= | |
| NJS_QUICKJS_LIB= | |
| NJS_QUICKJS_INC= | |
| +NJS_QUICKJS_DEFAULT_INCS="$ngx_addon_dir/../src $ngx_addon_dir/../build" | |
| NJS_HAVE_QUICKJS= | |
| if [ $NJS_QUICKJS != NO ]; then | |
| @@ -30,13 +31,8 @@ if [ $NJS_QUICKJS != NO ]; then | |
| ngx_feature="QuickJS library -lquickjs.lto" | |
| ngx_feature_name=NJS_HAVE_QUICKJS | |
| ngx_feature_run=yes | |
| - ngx_feature_incs="#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| - #pragma GCC diagnostic push | |
| - #pragma GCC diagnostic ignored \"-Wcast-function-type\" | |
| - #endif | |
| - | |
| - #include <quickjs.h>" | |
| - ngx_feature_path="" | |
| + ngx_feature_incs="#include <qjs.h>" | |
| + ngx_feature_path="$NJS_QUICKJS_DEFAULT_INCS" | |
| ngx_feature_libs="-lquickjs.lto -lm -ldl -lpthread" | |
| ngx_feature_test="JSRuntime *rt; | |
| @@ -54,7 +50,7 @@ if [ $NJS_QUICKJS != NO ]; then | |
| if [ $ngx_found = no ]; then | |
| ngx_feature="QuickJS library -I/usr/include/quickjs/ -L/usr/lib/quickjs/ -lquickjs.lto" | |
| - ngx_feature_path="/usr/include/quickjs/" | |
| + ngx_feature_path="$NJS_QUICKJS_DEFAULT_INCS /usr/include/quickjs/" | |
| ngx_feature_libs="-L/usr/lib/quickjs/ -lquickjs.lto -lm -ldl -lpthread" | |
| . auto/feature | |
| @@ -69,7 +65,7 @@ if [ $NJS_QUICKJS != NO ]; then | |
| if [ $ngx_found = no ]; then | |
| ngx_feature="QuickJS-NG library -lqjs" | |
| - ngx_feature_path="" | |
| + ngx_feature_path="$NJS_QUICKJS_DEFAULT_INCS" | |
| ngx_feature_libs="-lqjs -lm -ldl -lpthread" | |
| . auto/feature | |
| @@ -108,7 +104,7 @@ if [ $NJS_QUICKJS != NO ]; then | |
| NJS_HAVE_QUICKJS=YES | |
| NJS_QUICKJS_LIB="$ngx_feature_libs" | |
| - NJS_QUICKJS_INC="$ngx_feature_path" | |
| + NJS_QUICKJS_INC=`echo $ngx_feature_path | sed -e "s|$NJS_QUICKJS_DEFAULT_INCS||"` | |
| echo " enabled QuickJS engine" | |
| fi | |
| diff --git a/src/qjs.h b/src/qjs.h | |
| index e920453e..954cc23c 100644 | |
| --- a/src/qjs.h | |
| +++ b/src/qjs.h | |
| @@ -20,7 +20,12 @@ | |
| #include <njs_utils.h> | |
| #include <njs_assert.h> | |
| -#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| +#ifndef __has_warning | |
| +# define __has_warning(x) 0 | |
| +#endif | |
| + | |
| +#if (defined(__GNUC__) && (__GNUC__ >= 8)) \ | |
| + || (defined(__clang__) && __has_warning("-Wcast-function-type")) | |
| #pragma GCC diagnostic push | |
| #pragma GCC diagnostic ignored "-Wcast-function-type" | |
| #endif | |
| @@ -31,7 +36,8 @@ | |
| #define JS_BOOL bool | |
| #endif | |
| -#if defined(__GNUC__) && (__GNUC__ >= 8) | |
| +#if (defined(__GNUC__) && (__GNUC__ >= 8)) \ | |
| + || (defined(__clang__) && __has_warning("-Wcast-function-type")) | |
| #pragma GCC diagnostic pop | |
| #endif | |
| #include <pthread.h> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment