diff --git a/config.w32 b/config.w32 index 4649d167992e451b9ed552c89fefe9b155adb6cd..02a59f3255fc186930dada1760acb60d36cfb994 100644 --- a/config.w32 +++ b/config.w32 @@ -3,22 +3,18 @@ ARG_ENABLE("phpy", "enable phpy extension", "yes"); if (PHP_PHPY != "no") { + PYTHONHOME = WshShell.Environment("Process").Item("PYTHONHOME") + if (PYTHONHOME) { + ADD_SOURCES("ext/phpy/src/bridge", "core.cc", "phpy") + ADD_SOURCES("ext/phpy/src/php", "object.cc type.cc error.cc iter.cc dict.cc core.cc fn.cc str.cc sequence.cc list.cc set.cc tuple.cc module.cc", "phpy") + ADD_SOURCES("ext/phpy/src/python", "class.cc module.cc object.cc reference.cc resource.cc callable.cc", "phpy") + + EXTENSION("phpy", "phpy.cc", null, '-std=c++14 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -Iext/phpy/include -Iext/phpy /I ' + PYTHONHOME + '/include') - swoole_source_file="phpy.cc \ - src/bridge/core.cc \ - src/php/object.cc src/php/type.cc src/php/dict.cc src/php/core.cc src/php/fn.cc src/php/str.cc src/php/sequence.cc src/php/list.cc src/php/set.cc src/php/tuple.cc src/php/module.cc \ - src/python/class.cc src/python/module.cc src/python/object.cc src/python/reference.cc src/python/resource.cc src/python/callable.cc \ - " - - PHP_REQUIRE_CXX() - - PHP_ADD_INCLUDE(/opt/anaconda3/include/python3.11) - PHP_ADD_LIBRARY_WITH_PATH(python3.11, /opt/anaconda3/lib, PHPY_SHARED_LIBADD) - PHP_SUBST(PHPY_SHARED_LIBADD) - - CXXFLAGS="$CXXFLAGS -Wall -Wno-unused-function -Wno-deprecated -Wno-deprecated-declarations -z now" - CXXFLAGS="$CXXFLAGS -std=c++14" - - EXTENSION("phpy", "test.c observer.c fiber.c", PHP_PHPY_SHARED, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); - ADD_FLAG("CFLAGS_PHPY", "/D PHP_PHPY_EXPORTS "); + ADD_FLAG("CFLAGS", "/D PHP_PHPY_EXPORTS ") + ADD_FLAG("LDFLAGS_PHPY", '/libpath:' + PYTHONHOME + '/libs') + ADD_FLAG("CXXFLAGS", "-std=c++14 -Wall -Wno-unused-function -Wno-deprecated -Wno-deprecated-declarations -z now") + } else { + WARNING("python not found; the python libraries and headers not found"); + } } diff --git a/include/phpy.h b/include/phpy.h index 216e1218032fd11e64c96370f3c6854761d09871..84a7d11aa66b9e5a628fac1bfcb7aa5c596bec93 100644 --- a/include/phpy.h +++ b/include/phpy.h @@ -225,7 +225,7 @@ static inline void throw_error_if_occurred() { } static inline bool is_null(zval *zv) { - return zv == NULL or ZVAL_IS_NULL(zv); + return zv == NULL || ZVAL_IS_NULL(zv); } PyObject *arg_1(INTERNAL_FUNCTION_PARAMETERS); diff --git a/src/php/core.cc b/src/php/core.cc index 9c2e9246f56c86c99b7100c3699d1db0f515b925..b49248f3f19db0708d3d75714f743472ffcbe0ac 100644 --- a/src/php/core.cc +++ b/src/php/core.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include "stubs/phpy_core_arginfo.h" diff --git a/src/php/list.cc b/src/php/list.cc index 962e33c7e4117af89eaf870ef7a5aa3d4e6a4f1d..7c9faf18ef20d8d80da8552f4704a83aa5fc3a46 100644 --- a/src/php/list.cc +++ b/src/php/list.cc @@ -98,7 +98,7 @@ ZEND_METHOD(PyList, offsetSet) { Py_DECREF(pv); }; int result; - if (zk == NULL or ZVAL_IS_NULL(zk)) { + if (zk == NULL || ZVAL_IS_NULL(zk)) { result = PyList_Append(object, pv); } else { Py_INCREF(pv); diff --git a/src/php/str.cc b/src/php/str.cc index b610f3c9ff1fc53ecb8ca2736a8085bfc9952935..b9a3b18f4bcc03289ebd4cde31d7f10a67d857e5 100644 --- a/src/php/str.cc +++ b/src/php/str.cc @@ -46,7 +46,7 @@ ZEND_METHOD(PyStr, __construct) { Z_PARAM_ZVAL(zstr) ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE); - if (Z_TYPE_P(zstr) == IS_OBJECT and instanceof_function(Z_OBJCE_P(zstr), phpy_object_get_ce())) { + if (Z_TYPE_P(zstr) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zstr), phpy_object_get_ce())) { PyObject *pyobj = phpy_object_get_handle(zstr); PyObject *pStr = PyUnicode_FromObject(pyobj); if (pStr == NULL) { diff --git a/src/python/callable.cc b/src/python/callable.cc index dceb2f411126f8d8fd67af74e18834cc44dc5d06..56d425c6e33c65684eeeec64e4935ad62af38aba 100644 --- a/src/python/callable.cc +++ b/src/python/callable.cc @@ -27,9 +27,7 @@ struct ZendCallable { zval callable; }; -static PyTypeObject ZendCallableType = { - .ob_base = PyVarObject_HEAD_INIT(NULL, 0) -}; +static PyTypeObject ZendCallableType = { PyVarObject_HEAD_INIT(NULL, 0) }; // clang-format on @@ -65,10 +63,11 @@ static void Callable_dealloc(ZendCallable *self) { static PyObject *Callable_call(ZendCallable *self, PyObject *args, PyObject *kwds) { Py_ssize_t TupleSize = PyTuple_Size(args); uint32_t argc = TupleSize; - zval argv[argc]; + zval *argv = new zval[argc]; tuple2argv(argv, args, TupleSize, 0); ON_SCOPE_EXIT { release_argv(argc, argv); + delete []argv; }; zval retval; diff --git a/src/python/module.cc b/src/python/module.cc index 775b5f3ea251b3834b5ec396b9b97e7187fdc433..423f02d57b7a3af0debc77e36fdb79ba4a24c676 100644 --- a/src/python/module.cc +++ b/src/python/module.cc @@ -33,7 +33,7 @@ static PyObject *phpy_call(PyObject *self, PyObject *args) { } uint32_t argc = TupleSize - 1; - zval argv[argc]; + zval *argv = new zval[argc]; tuple2argv(argv, args, TupleSize); zval retval; @@ -43,6 +43,7 @@ static PyObject *phpy_call(PyObject *self, PyObject *args) { ON_SCOPE_EXIT { zval_ptr_dtor(&zfn); release_argv(argc, argv); + delete []argv; }; zend_result result = phpy::php::call_fn(NULL, &zfn, &retval, argc, argv); diff --git a/src/python/object.cc b/src/python/object.cc index 9291829c6eccd25f45fa9c2dae5eb53a70d01649..511b98e17fb5dd30aa63b9b6d19fca3931b8296e 100644 --- a/src/python/object.cc +++ b/src/python/object.cc @@ -39,9 +39,7 @@ static PyMethodDef Object_methods[] = { {NULL} /* Sentinel */ }; -static PyTypeObject ZendObjectType = { - .ob_base = PyVarObject_HEAD_INIT(NULL, 0) -}; +static PyTypeObject ZendObjectType = { PyVarObject_HEAD_INIT(NULL, 0) }; // clang-format on static int Object_init(ZendObject *self, PyObject *args, PyObject *kwds) { @@ -99,7 +97,7 @@ static PyObject *Object_call(ZendObject *self, PyObject *args) { } uint32_t argc = TupleSize - 1; - zval argv[argc]; + zval *argv = new zval[argc]; tuple2argv(argv, args, TupleSize); zval retval; @@ -109,6 +107,7 @@ static PyObject *Object_call(ZendObject *self, PyObject *args) { ON_SCOPE_EXIT { zval_ptr_dtor(&zfn); release_argv(argc, argv); + delete []argv; }; if (result == FAILURE) { @@ -189,13 +188,14 @@ PyObject *object_create(PyObject *pv, zend_class_entry *ce, PyObject *args, uint zval retval; zval zfn; ZVAL_STRINGL(&zfn, CTOR_NAME, sizeof(CTOR_NAME) - 1); - zval argv[argc]; + zval *argv = new zval[argc]; tuple2argv(argv, args, argc, begin); zend_result result = phpy::php::call_fn(&obj->object, &zfn, &retval, argc, argv); ON_SCOPE_EXIT { zval_ptr_dtor(&zfn); zval_ptr_dtor(&retval); release_argv(argc, argv); + delete []argv; }; if (result == FAILURE) { return NULL; diff --git a/src/python/reference.cc b/src/python/reference.cc index 8478b726c26b492ed712dab3d892e3cbc8e3e39c..80a7fcd6b52563e41a3556d7ccd5f5f36b576bdf 100644 --- a/src/python/reference.cc +++ b/src/python/reference.cc @@ -34,9 +34,7 @@ static PyMethodDef Reference_methods[] = { {NULL} /* Sentinel */ }; -static PyTypeObject ZendReferenceType = { - .ob_base = PyVarObject_HEAD_INIT(NULL, 0) -}; +static PyTypeObject ZendReferenceType = { PyVarObject_HEAD_INIT(NULL, 0) }; // clang-format on diff --git a/src/python/resource.cc b/src/python/resource.cc index dfc95dd8c0355ea149281143df4ef04695c082e8..b037b80f8cf4e791783bcebeda0334d00be65c4e 100644 --- a/src/python/resource.cc +++ b/src/python/resource.cc @@ -26,9 +26,7 @@ struct ZendResource { zval resource; }; -static PyTypeObject ZendResourceType = { - .ob_base = PyVarObject_HEAD_INIT(NULL, 0) -}; +static PyTypeObject ZendResourceType = { PyVarObject_HEAD_INIT(NULL, 0) }; // clang-format on