diff options
-rw-r--r-- | release/scripts/modules/sys_info.py | 15 | ||||
-rw-r--r-- | source/blender/python/SConscript | 5 | ||||
-rw-r--r-- | source/blender/python/intern/CMakeLists.txt | 11 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app.c | 3 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_build_options.c | 7 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_sdl.c | 136 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_sdl.h | 32 |
7 files changed, 209 insertions, 0 deletions
diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py index 74a6f4c36e8..1b63d1d9d8d 100644 --- a/release/scripts/modules/sys_info.py +++ b/release/scripts/modules/sys_info.py @@ -118,6 +118,18 @@ def write_sysinfo(op): else: output.write("Blender was built without FFmpeg support\n") + if bpy.app.build_options.sdl: + output.write("\nSDL\n") + output.write(lilies) + output.write("Version: %s\n" % bpy.app.sdl.version_string) + output.write("Loading method: ") + if bpy.app.build_options.sdl_dynload: + output.write("dynamically loaded by Blender (WITH_SDL_DYNLOAD=ON)\n") + else: + output.write("linked (WITH_SDL_DYNLOAD=OFF)\n") + if not bpy.app.sdl.available: + output.write("WARNING: Blender could not load SDL library\n") + output.write("\nOther Libraries:\n") output.write(lilies) ocio = bpy.app.ocio @@ -148,6 +160,9 @@ def write_sysinfo(op): else: output.write("Blender was built without Cycles support\n") + if not bpy.app.build_options.sdl: + output.write("SDL: Blender was built without SDL support\n") + if bpy.app.background: output.write("\nOpenGL: missing, background mode\n") else: diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript index 9988e0981aa..5f032f25cf3 100644 --- a/source/blender/python/SConscript +++ b/source/blender/python/SConscript @@ -159,6 +159,11 @@ if env['WITH_BF_OPENAL']: if env['WITH_BF_SDL']: defs.append('WITH_SDL') + incs += ' ' + env['BF_SDL_INC'] + + if env['WITH_BF_SDL_DYNLOAD']: + defs.append('WITH_SDL_DYNLOAD') + incs += ' #extern/sdlew/include' if env['WITH_BF_JACK']: defs.append('WITH_JACK') diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt index a75db23d20b..8f85dbe11d7 100644 --- a/source/blender/python/intern/CMakeLists.txt +++ b/source/blender/python/intern/CMakeLists.txt @@ -52,6 +52,7 @@ set(SRC bpy_app_handlers.c bpy_app_ocio.c bpy_app_oiio.c + bpy_app_sdl.c bpy_app_translations.c bpy_driver.c bpy_interface.c @@ -210,9 +211,19 @@ if(WITH_OPENAL) endif() if(WITH_SDL) + list(APPEND INC_SYS + ${SDL_INCLUDE_DIR} + ) add_definitions(-DWITH_SDL) endif() +if(WITH_SDL_DYNLOAD) + list(APPEND INC + ../../../../extern/sdlew/include + ) + add_definitions(-DWITH_SDL_DYNLOAD) +endif() + if(WITH_JACK) add_definitions(-DWITH_JACK) endif() diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index cca419101d3..c8a4971847b 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -36,6 +36,7 @@ #include "bpy_app_ffmpeg.h" #include "bpy_app_ocio.h" #include "bpy_app_oiio.h" +#include "bpy_app_sdl.h" #include "bpy_app_build_options.h" #include "bpy_app_translations.h" @@ -97,6 +98,7 @@ static PyStructSequence_Field app_info_fields[] = { {(char *)"ffmpeg", (char *)"FFmpeg library information backend"}, {(char *)"ocio", (char *)"OpenColorIO library information backend"}, {(char *)"oiio", (char *)"OpenImageIO library information backend"}, + {(char *)"sdl", (char *)"SDL library information backend"}, {(char *)"build_options", (char *)"A set containing most important enabled optional build features"}, {(char *)"handlers", (char *)"Application handler callbacks"}, {(char *)"translations", (char *)"Application and addons internationalization API"}, @@ -173,6 +175,7 @@ static PyObject *make_app_info(void) SetObjItem(BPY_app_ffmpeg_struct()); SetObjItem(BPY_app_ocio_struct()); SetObjItem(BPY_app_oiio_struct()); + SetObjItem(BPY_app_sdl_struct()); SetObjItem(BPY_app_build_options_struct()); SetObjItem(BPY_app_handlers_struct()); SetObjItem(BPY_app_translations_struct()); diff --git a/source/blender/python/intern/bpy_app_build_options.c b/source/blender/python/intern/bpy_app_build_options.c index 022713558d7..975d76ca42d 100644 --- a/source/blender/python/intern/bpy_app_build_options.c +++ b/source/blender/python/intern/bpy_app_build_options.c @@ -57,6 +57,7 @@ static PyStructSequence_Field app_builtopts_info_fields[] = { {(char *)"international", NULL}, {(char *)"openal", NULL}, {(char *)"sdl", NULL}, + {(char *)"sdl_dynload", NULL}, {(char *)"jack", NULL}, {(char *)"libmv", NULL}, {(char *)"mod_boolean", NULL}, @@ -230,6 +231,12 @@ static PyObject *make_builtopts_info(void) SetObjIncref(Py_False); #endif +#ifdef WITH_SDL_DYNLOAD + SetObjIncref(Py_True); +#else + SetObjIncref(Py_False); +#endif + #ifdef WITH_JACK SetObjIncref(Py_True); #else diff --git a/source/blender/python/intern/bpy_app_sdl.c b/source/blender/python/intern/bpy_app_sdl.c new file mode 100644 index 00000000000..c91595b5900 --- /dev/null +++ b/source/blender/python/intern/bpy_app_sdl.c @@ -0,0 +1,136 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Sergey Sharybin, Sybren A. Stuvel + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/bpy_app_sdl.c + * \ingroup pythonintern + */ + +#include <Python.h> +#include "BLI_utildefines.h" + +#include "bpy_app_sdl.h" + +#ifdef WITH_SDL +# include "SDL.h" +# ifdef WITH_SDL_DYNLOAD +# include "sdlew.h" +# endif +#endif + +static PyTypeObject BlenderAppSDLType; + +static PyStructSequence_Field app_sdl_info_fields[] = { + {(char *)"supported", (char *)("Boolean, True when Blender is built with SDL support")}, + {(char *)"version", (char *)("The SDL version as a tuple of 3 numbers")}, + {(char *)"version_string", (char *)("The SDL version formatted as a string")}, + {(char *)"available", (char *)("Boolean, True when SDL is available. This is False when " + "either *supported* is False, or *dynload* is True and " + "Blender cannot find the correct library.")}, + {NULL} +}; + +static PyStructSequence_Desc app_sdl_info_desc = { + (char *)"bpy.app.sdl", /* name */ + (char *)"This module contains information about SDL blender is linked against", /* doc */ + app_sdl_info_fields, /* fields */ + ARRAY_SIZE(app_sdl_info_fields) - 1 +}; + +static PyObject *make_sdl_info(void) +{ + PyObject *sdl_info; + int pos = 0; +#ifdef WITH_SDL + bool sdl_available = false; + SDL_version version = {0, 0, 0}; +#endif + + sdl_info = PyStructSequence_New(&BlenderAppSDLType); + if (sdl_info == NULL) { + return NULL; + } + +#define SetStrItem(str) \ + PyStructSequence_SET_ITEM(sdl_info, pos++, PyUnicode_FromString(str)) + +#define SetObjItem(obj) \ + PyStructSequence_SET_ITEM(sdl_info, pos++, obj) + +#ifdef WITH_SDL + SetObjItem(PyBool_FromLong(1)); + +# ifdef WITH_SDL_DYNLOAD + if (sdlewInit() == SDLEW_SUCCESS) { + SDL_GetVersion(&version); + sdl_available = true; + } +# else // WITH_SDL_DYNLOAD=OFF + sdl_available = true; +# if SDL_MAJOR_VERSION >= 2 + SDL_GetVersion(&version); +# else + SDL_VERSION(&version); +# endif +# endif + + SetObjItem(Py_BuildValue("(iii)", version.major, version.minor, version.patch)); + if (sdl_available) { + SetObjItem(PyUnicode_FromFormat("%d.%d.%d", version.major, version.minor, version.patch)); + } + else { + SetStrItem("Unknown"); + } + SetObjItem(PyBool_FromLong(sdl_available)); + +#else // WITH_SDL=OFF + SetObjItem(PyBool_FromLong(0)); + SetObjItem(Py_BuildValue("(iii)", 0, 0, 0)); + SetStrItem("Unknown"); + SetObjItem(PyBool_FromLong(0)); +#endif + + if (PyErr_Occurred()) { + Py_CLEAR(sdl_info); + return NULL; + } + +#undef SetStrItem +#undef SetObjItem + + return sdl_info; +} + +PyObject *BPY_app_sdl_struct(void) +{ + PyObject *ret; + + PyStructSequence_InitType(&BlenderAppSDLType, &app_sdl_info_desc); + + ret = make_sdl_info(); + + /* prevent user from creating new instances */ + BlenderAppSDLType.tp_init = NULL; + BlenderAppSDLType.tp_new = NULL; + BlenderAppSDLType.tp_hash = (hashfunc)_Py_HashPointer; /* without this we can't do set(sys.modules) [#29635] */ + + return ret; +} diff --git a/source/blender/python/intern/bpy_app_sdl.h b/source/blender/python/intern/bpy_app_sdl.h new file mode 100644 index 00000000000..e826a59de70 --- /dev/null +++ b/source/blender/python/intern/bpy_app_sdl.h @@ -0,0 +1,32 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Sergey Sharybin, Sybren A. Stuvel + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/bpy_app_sdl.h + * \ingroup pythonintern + */ + +#ifndef __BPY_APP_SDL_H__ +#define __BPY_APP_SDL_H__ + +PyObject *BPY_app_sdl_struct(void); + +#endif /* __BPY_APP_SDL_H__ */ |