YoFrankie bug [#18857] On start gives ImportError: No module named frankie_scripts
authorCampbell Barton <ideasman42@gmail.com>
Mon, 1 Jun 2009 05:43:58 +0000 (05:43 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 1 Jun 2009 05:43:58 +0000 (05:43 +0000)
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
source/gameengine/Ketsji/KX_PythonInit.cpp

index ec945c80c7c26f4f940fff697a3dcd08b489ce7d..34b5e3681ffb4d2b4a382229d2d1267eb88b1aca 100644 (file)
@@ -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
index ff5a37801f4283e9051957e83a64cbdf915f2593..3294789249df42f00bd23acecf921c8051f8b571 100644 (file)
@@ -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));