Open penetest opened 5 years ago
You'll need to use PyUnicode_Check()
instead of PyString_Check()
:
https://py3c.readthedocs.io/en/latest/reference.html
But those are macros that are not currently mapped. Their definitions are pretty simple though:
https://github.com/bytedeco/javacpp-presets/blob/master/cpython/src/gen/java/org/bytedeco/cpython/global/python.java#L5390
https://github.com/bytedeco/javacpp-presets/blob/master/cpython/src/gen/java/org/bytedeco/cpython/global/python.java#L8205
@saudet Hi,I try to using ‘PyUnicode_Check’,but not find this method. I hope your help.Thanks!
@saudet ,Hi,can I join you to fixed it, and I how to do it?
Yes, that would be great. This is what we need to do: https://github.com/bytedeco/javacpp/wiki/Mapping-Recipes#mapping-macros-to-fields-or-methods Let me know if you have any questions! Thanks
@saudet Hi,According to what you said,I try to do some revisions in cpython : add some codes:
.put(new Info("Py_TYPE").cppTypes("PyTypeObject","PyObject"))
.put(new Info("PyObject_TypeCheck").cppTypes("int","PyObject","PyTypeObject"))
.put(new Info("PyFloat_Check").cppTypes("int","PyObject"))
.put(new Info("PyFloat_CheckExact").cppTypes("int","PyObject"))
but show some errors when building :
In file included from /data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/pytime.h:6:0,
from /data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/Python.h:87,
from /data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:92:
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function '_jobject* Java_org_bytedeco_cpython_global_python_Py_1TYPE(JNIEnv*, jclass, jobject)':
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64820:29: note: in expansion of macro 'Py_TYPE'
rptr = new PyTypeObject(Py_TYPE(*ptr0));
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function 'jint Java_org_bytedeco_cpython_global_python_PyObject_1TypeCheck(JNIEnv*, jclass, jobject, jobject)':
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:6: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64848:16: note: in expansion of macro 'PyObject_TypeCheck'
int rval = PyObject_TypeCheck(*ptr0, *ptr1);
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:46: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64848:16: note: in expansion of macro 'PyObject_TypeCheck'
int rval = PyObject_TypeCheck(*ptr0, *ptr1);
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function 'jint Java_org_bytedeco_cpython_global_python_PyFloat_1Check(JNIEnv*, jclass, jobject)':
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:6: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/floatobject.h:23:27: note: in expansion of macro 'PyObject_TypeCheck'
#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64861:16: note: in expansion of macro 'PyFloat_Check'
int rval = PyFloat_Check(*ptr0);
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:46: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/floatobject.h:23:27: note: in expansion of macro 'PyObject_TypeCheck'
#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64861:16: note: in expansion of macro 'PyFloat_Check'
int rval = PyFloat_Check(*ptr0);
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function 'jint Java_org_bytedeco_cpython_global_python_PyFloat_1CheckExact(JNIEnv*, jclass, jobject)':
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/floatobject.h:24:33: note: in expansion of macro 'Py_TYPE'
#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type)
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64874:16: note: in expansion of macro 'PyFloat_CheckExact'
int rval = PyFloat_CheckExact(*ptr0);
^
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:18 min
[INFO] Finished at: 2019-07-19T01:29:06Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.bytedeco:javacpp:1.5.1:build (javacpp-compiler) on project cpython: Execution javacpp-compiler of goal org.bytedeco:javacpp:1.5.1:build failed: Process exited with an error: 1 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject {aka _object}'
That means we'll need to add PyObject*
instead of PyObject
to the Info.cppTypes()
.
@saudet ,I have a try:
.put(new Info("Py_TYPE").cppTypes("PyTypeObject","PyObject"))
.put(new Info("PyObject_TypeCheck").cppTypes("int","PyObject","PyTypeObject"))
.put(new Info("PyFloat_Check").cppTypes("int","PyObject"))
.put(new Info("PyFloat_CheckExact").cppTypes("int","PyObject"))
change to:
.put(new Info("Py_TYPE").cppTypes("PyTypeObject","PyObject*"))
.put(new Info("PyObject_TypeCheck").cppTypes("int","PyObject","PyTypeObject"))
.put(new Info("PyFloat_Check").cppTypes("int","PyObject"))
.put(new Info("PyFloat_CheckExact").cppTypes("int","PyObject"))
but also show some errors:
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function '_jobject* Java_org_bytedeco_cpython_global_python_Py_1TYPE(JNIEnv*, jclass, jobject)':
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64816:42: error: no matching function for call to '_typeobject::_typeobject(_typeobject*&)'
rptr = new PyTypeObject(Py_TYPE(ptr0));
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64816:42: note: candidates are:
In file included from /data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/pytime.h:6:0,
from /data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/Python.h:87,
from /data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:92:
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:346:16: note: _typeobject::_typeobject()
typedef struct _typeobject {
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:346:16: note: candidate expects 0 arguments, 1 provided
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:346:16: note: _typeobject::_typeobject(const _typeobject&)
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:346:16: note: no known conversion for argument 1 from '_typeobject*' to 'const _typeobject&'
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function 'jint Java_org_bytedeco_cpython_global_python_PyObject_1TypeCheck(JNIEnv*, jclass, jobject, jobject)':
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:6: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64844:16: note: in expansion of macro 'PyObject_TypeCheck'
int rval = PyObject_TypeCheck(*ptr0, *ptr1);
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:46: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64844:16: note: in expansion of macro 'PyObject_TypeCheck'
int rval = PyObject_TypeCheck(*ptr0, *ptr1);
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function 'jint Java_org_bytedeco_cpython_global_python_PyFloat_1Check(JNIEnv*, jclass, jobject)':
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:6: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/floatobject.h:23:27: note: in expansion of macro 'PyObject_TypeCheck'
#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64857:16: note: in expansion of macro 'PyFloat_Check'
int rval = PyFloat_Check(*ptr0);
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:487:46: note: in expansion of macro 'Py_TYPE'
(Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/floatobject.h:23:27: note: in expansion of macro 'PyObject_TypeCheck'
#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64857:16: note: in expansion of macro 'PyFloat_Check'
int rval = PyFloat_Check(*ptr0);
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp: In function 'jint Java_org_bytedeco_cpython_global_python_PyFloat_1CheckExact(JNIEnv*, jclass, jobject)':
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/object.h:118:49: error: invalid cast from type 'PyObject {aka _object}' to type 'PyObject* {aka _object*}'
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
^
/data/javacpp-presets/cpython/cppbuild/linux-x86_64/include/python3.7m/floatobject.h:24:33: note: in expansion of macro 'Py_TYPE'
#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type)
^
/data/javacpp-presets/cpython/target/native/org/bytedeco/cpython/linux-x86_64/jnipython.cpp:64870:16: note: in expansion of macro 'PyFloat_CheckExact'
int rval = PyFloat_CheckExact(*ptr0);
^
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:16 min
[INFO] Finished at: 2019-07-19T02:45:36Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.bytedeco:javacpp:1.5.1:build (javacpp-compiler) on project cpython: Execution javacpp-compiler of goal org.bytedeco:javacpp:1.5.1:build failed: Process exited with an error: 1 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
The other PyObject
need to be changed to PyObject*
as well...
Yes, It is OK,Thank your very much! codes as followings:
.put(new Info("Py_TYPE").cppTypes("PyTypeObject*","PyObject*"))
.put(new Info("PyObject_TypeCheck").cppTypes("int","PyObject*","PyTypeObject*"))
.put(new Info("PyFloat_Check").cppTypes("int","PyObject*"))
.put(new Info("PyFloat_CheckExact").cppTypes("int","PyObject*"))
Does it work? If so, please send a pull request so we can merge this! Thanks
Yes,Building is ok,but not tested yet.
@saudet Hi,Which branch can I push code to ?
I try to push codes to 'ci',but show some errors:
[root@a654f9dca294 javacpp-presets]# git push origin ci
Username for 'https://github.com': penetest
Password for 'https://penetest@github.com':
remote: Permission to bytedeco/javacpp-presets.git denied to penetest.
fatal: unable to access 'https://github.com/bytedeco/javacpp-presets.git/': The requested URL returned error: 403
The master branch is fine. However, you'll need to create a fork as well as a pull request: https://help.github.com/en/articles/creating-a-pull-request-from-a-fork
It doesn't seem to be part of the C API of Python 3, no.