From 94af7242939ef8da07f63feb3d44981ca26beab5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Jun 2009 05:43:58 +0000 Subject: [PATCH] YoFrankie bug [#18857] On start gives ImportError: No module named frankie_scripts GameEngine sys.path creation was broken because of a pesky slash at the end of each path name. Win32 sys.paths were also failing when running a game that switched between blend files in different directories On win32 for some reason making absolute paths from lib->name failed, work around this by using lib->filename. STR_String.h, cast to float to quiet compiler warnings. --- intern/string/STR_String.h | 2 +- source/gameengine/Ketsji/KX_PythonInit.cpp | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/intern/string/STR_String.h b/intern/string/STR_String.h index ec945c80c7c..34b5e3681ff 100644 --- a/intern/string/STR_String.h +++ b/intern/string/STR_String.h @@ -142,7 +142,7 @@ public: inline operator const char *() const { return pData; } inline char *Ptr() { return pData; } inline const char *ReadPtr() const { return pData; } - inline float ToFloat() const { float x=atof(pData); return x; } + inline float ToFloat() const { float x=(float)atof(pData); return x; } inline int ToInt() const { return atoi(pData); } // Operators diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index ff5a37801f4..3294789249d 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -1508,10 +1508,12 @@ static void initPySysObjects__append(PyObject *sys_path, char *filename) char expanded[FILE_MAXDIR + FILE_MAXFILE]; BLI_split_dirfile_basic(filename, expanded, NULL); /* get the dir part of filename only */ - BLI_convertstringcode(expanded, gp_GamePythonPath); - + BLI_convertstringcode(expanded, gp_GamePythonPath); /* filename from lib->filename is (always?) absolute, so this may not be needed but it wont hurt */ + BLI_cleanup_file(gp_GamePythonPath, expanded); /* Dont use BLI_cleanup_dir because it adds a slash - BREAKS WIN32 ONLY */ item= PyString_FromString(expanded); +// printf("SysPath - '%s', '%s', '%s'\n", expanded, filename, gp_GamePythonPath); + if(PySequence_Index(sys_path, item) == -1) { PyErr_Clear(); /* PySequence_Index sets a ValueError */ PyList_Insert(sys_path, 0, item); @@ -1535,7 +1537,9 @@ static void initPySysObjects(Main *maggie) Library *lib= (Library *)maggie->library.first; while(lib) { - initPySysObjects__append(sys_path, lib->name); + /* lib->name wont work in some cases (on win32), + * even when expanding with gp_GamePythonPath, using lib->filename is less trouble */ + initPySysObjects__append(sys_path, lib->filename); lib= (Library *)lib->id.next; } @@ -2083,6 +2087,7 @@ void pathGamePythonConfig( char *path ) void setGamePythonPath(char *path) { BLI_strncpy(gp_GamePythonPath, path, sizeof(gp_GamePythonPath)); + BLI_cleanup_file(NULL, gp_GamePythonPath); /* not absolutely needed but makes resolving path problems less confusing later */ if (gp_GamePythonPathOrig[0] == '\0') BLI_strncpy(gp_GamePythonPathOrig, path, sizeof(gp_GamePythonPathOrig));