From 676829ccba10da1d83f809ad243685707bb7543d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 06:05:22 +0000 Subject: workaround for python bug [#24400] If Script is executed with TEXT Editor, it becomes an error. having the blend file as a part of the __file__ variable is not essential, this is fixed in python 3.2 so add an ifdef and don't use the blend file path for py older then 3.2. --- source/blender/python/generic/bpy_internal_import.c | 21 ++++++++++++++------- source/blender/python/generic/bpy_internal_import.h | 18 +++++++----------- source/blender/python/intern/bpy_interface.c | 3 +-- source/gameengine/Ketsji/KX_PythonInit.cpp | 10 ++++++++++ 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index 3ee0c76a44a..643ee1e143f 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -26,7 +26,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#include +#include "compile.h" /* for the PyCodeObject */ +#include "eval.h" /* for PyEval_EvalCode */ +#include "osdefs.h" /* for 'SEP' */ + #include "bpy_internal_import.h" + #include "DNA_text_types.h" #include "MEM_guardedalloc.h" @@ -62,16 +68,17 @@ void bpy_import_main_set(struct Main *maggie) /* returns a dummy filename for a textblock so we can tell what file a text block comes from */ void bpy_text_filename_get(char *fn, Text *text) { - sprintf(fn, "%s/%s", text->id.lib ? text->id.lib->filepath : G.main->name, text->id.name+2); - - /* XXX, this is a bug in python's Py_CompileString()! +#if PY_VERSION_HEX >= 0x03020000 + sprintf(fn, "%s%c%s", text->id.lib ? text->id.lib->filepath : G.main->name, SEP, text->id.name+2); +#else + /* this is a bug in python's Py_CompileString()!, fixed for python 3.2. the string encoding should not be required to be utf-8 - reported: http://bugs.python.org/msg115202 - */ - BLI_utf8_invalid_strip(fn, strlen(fn)); + reported: http://bugs.python.org/msg115202 */ + strcpy(fn, text->id.name+2); +#endif } -PyObject *bpy_text_import( Text *text ) +PyObject *bpy_text_import(Text *text) { char *buf = NULL; char modulename[24]; diff --git a/source/blender/python/generic/bpy_internal_import.h b/source/blender/python/generic/bpy_internal_import.h index f191ab22651..dd7a3ab9f64 100644 --- a/source/blender/python/generic/bpy_internal_import.h +++ b/source/blender/python/generic/bpy_internal_import.h @@ -28,8 +28,8 @@ /* Note, the BGE needs to use this too, keep it minimal */ -#ifndef EXPP_bpy_import_h -#define EXPP_bpy_import_h +#ifndef BPY_INTERNAL_IMPORT_H +#define BPY_INTERNAL_IMPORT_H /* python redefines :/ */ #ifdef _POSIX_C_SOURCE @@ -40,16 +40,12 @@ #undef _XOPEN_SOURCE #endif -#include -#include "compile.h" /* for the PyCodeObject */ -#include "eval.h" /* for PyEval_EvalCode */ - struct Text; -PyObject* bpy_text_import( struct Text *text ); -PyObject* bpy_text_import_name( char *name, int *found ); -PyObject* bpy_text_reimport( PyObject *module, int *found ); -/* void bpy_text_clear_modules( int clear_all );*/ /* Clear user modules */ +PyObject* bpy_text_import(struct Text *text); +PyObject* bpy_text_import_name(char *name, int *found); +PyObject* bpy_text_reimport(PyObject *module, int *found); +/* void bpy_text_clear_modules(int clear_all);*/ /* Clear user modules */ void bpy_text_filename_get(char *fn, struct Text *text); @@ -60,4 +56,4 @@ extern PyMethodDef bpy_reload_meth; struct Main *bpy_import_main_get(void); void bpy_import_main_set(struct Main *maggie); -#endif /* EXPP_bpy_import_h */ +#endif /* BPY_INTERNAL_IMPORT_H */ diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 3ff0d86b433..47b4c114944 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -23,13 +23,12 @@ * ***** END GPL LICENSE BLOCK ***** */ - - /* grr, python redefines */ #ifdef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE #endif +#include #include "bpy.h" #include "bpy_rna.h" diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 3ffef0db803..b0e631babda 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -36,6 +36,16 @@ #ifndef DISABLE_PYTHON +#ifdef _POSIX_C_SOURCE +#undef _POSIX_C_SOURCE +#endif + +#ifdef _XOPEN_SOURCE +#undef _XOPEN_SOURCE +#endif + +#include + extern "C" { #include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */ #include "py_capi_utils.h" -- cgit v1.2.3