forked from bartvdbraak/blender
Py/RNA API: WITH_PYTHON_SAFETY
compile time option which enables extra safety checks. since this is noticeably slower I rather not enable by default yet.
This commit is contained in:
parent
c7dc8ddf7d
commit
e8c322ee85
@ -69,6 +69,7 @@ get_blender_version()
|
|||||||
# Blender internal features
|
# Blender internal features
|
||||||
option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
|
option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
|
||||||
option(WITH_PYTHON "Enable Embedded Python API" ON)
|
option(WITH_PYTHON "Enable Embedded Python API" ON)
|
||||||
|
option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency)." OFF)
|
||||||
option(WITH_PYTHON_MODULE "Enable building as a python module (experemental)" OFF)
|
option(WITH_PYTHON_MODULE "Enable building as a python module (experemental)" OFF)
|
||||||
option(WITH_BUILDINFO "Include extra build details" ON)
|
option(WITH_BUILDINFO "Include extra build details" ON)
|
||||||
option(WITH_IK_ITASC "Enable ITASC IK solver" ON)
|
option(WITH_IK_ITASC "Enable ITASC IK solver" ON)
|
||||||
|
@ -72,7 +72,7 @@ def print_arguments(args, bc):
|
|||||||
|
|
||||||
def validate_arguments(args, bc):
|
def validate_arguments(args, bc):
|
||||||
opts_list = [
|
opts_list = [
|
||||||
'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC', 'BF_PYTHON_DLL',
|
'WITH_BF_PYTHON', 'WITH_BF_PYTHON_SAFETY', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC', 'BF_PYTHON_DLL',
|
||||||
'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
|
'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
|
||||||
'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
|
'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
|
||||||
'BF_LIBSAMPLERATE', 'BF_LIBSAMPLERATE_INC', 'BF_LIBSAMPLERATE_LIB', 'BF_LIBSAMPLERATE_LIBPATH', 'WITH_BF_STATICLIBSAMPLERATE', 'BF_LIBSAMPLERATE_LIB_STATIC',
|
'BF_LIBSAMPLERATE', 'BF_LIBSAMPLERATE_INC', 'BF_LIBSAMPLERATE_LIB', 'BF_LIBSAMPLERATE_LIBPATH', 'WITH_BF_STATICLIBSAMPLERATE', 'BF_LIBSAMPLERATE_LIB_STATIC',
|
||||||
@ -211,6 +211,7 @@ def read_opts(env, cfg, args):
|
|||||||
localopts.AddVariables(
|
localopts.AddVariables(
|
||||||
('LCGDIR', 'location of cvs lib dir'),
|
('LCGDIR', 'location of cvs lib dir'),
|
||||||
(BoolVariable('WITH_BF_PYTHON', 'Compile with python', True)),
|
(BoolVariable('WITH_BF_PYTHON', 'Compile with python', True)),
|
||||||
|
(BoolVariable('WITH_BF_PYTHON_SAFETY', 'Internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency)', False)),
|
||||||
('BF_PYTHON', 'base path for python', ''),
|
('BF_PYTHON', 'base path for python', ''),
|
||||||
('BF_PYTHON_VERSION', 'Python version to use', ''),
|
('BF_PYTHON_VERSION', 'Python version to use', ''),
|
||||||
('BF_PYTHON_INC', 'include path for Python headers', ''),
|
('BF_PYTHON_INC', 'include path for Python headers', ''),
|
||||||
|
@ -1,24 +1,37 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
Import ('env')
|
|
||||||
|
|
||||||
sources = env.Glob('intern/*.c')
|
# TODO, split into 2 files.
|
||||||
|
|
||||||
|
Import ('env')
|
||||||
|
|
||||||
incs = '. ../editors/include ../makesdna ../makesrna ../blenlib ../blenkernel ../nodes'
|
incs = '. ../editors/include ../makesdna ../makesrna ../blenlib ../blenkernel ../nodes'
|
||||||
incs += ' ../imbuf ../blenloader ../render/extern/include ../windowmanager'
|
incs += ' ../imbuf ../blenloader ../render/extern/include ../windowmanager'
|
||||||
incs += ' #intern/guardedalloc #intern/memutil #extern/glew/include'
|
incs += ' #intern/guardedalloc #intern/memutil #extern/glew/include'
|
||||||
incs += ' #intern/audaspace/intern ' + env['BF_PYTHON_INC']
|
incs += ' #intern/audaspace/intern ' + env['BF_PYTHON_INC']
|
||||||
|
|
||||||
|
is_debug = (env['OURPLATFORM'] in ('win32-mingw', 'win32-vc','win64-vc') and env['BF_DEBUG'])
|
||||||
|
|
||||||
|
# generic
|
||||||
defs = []
|
defs = []
|
||||||
|
|
||||||
|
if is_debug:
|
||||||
|
defs.append('_DEBUG')
|
||||||
|
|
||||||
|
sources = env.Glob('generic/*.c')
|
||||||
|
env.BlenderLib( libname = 'bf_python_ext', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [362,165]) # ketsji is 360
|
||||||
|
|
||||||
|
|
||||||
|
# bpy
|
||||||
|
defs = []
|
||||||
|
|
||||||
|
if is_debug:
|
||||||
|
defs.append('_DEBUG')
|
||||||
|
|
||||||
|
if env['WITH_BF_PYTHON_SAFETY']:
|
||||||
|
defs.append('WITH_PYTHON_SAFETY')
|
||||||
|
|
||||||
if env['BF_BUILDINFO']:
|
if env['BF_BUILDINFO']:
|
||||||
defs.append('BUILD_DATE')
|
defs.append('BUILD_DATE')
|
||||||
|
|
||||||
if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc','win64-vc') and env['BF_DEBUG']:
|
sources = env.Glob('intern/*.c')
|
||||||
defs.append('_DEBUG')
|
|
||||||
|
|
||||||
env.BlenderLib( libname = 'bf_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [361,160])
|
env.BlenderLib( libname = 'bf_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [361,160])
|
||||||
|
|
||||||
|
|
||||||
# generic
|
|
||||||
sources = env.Glob('generic/*.c')
|
|
||||||
env.BlenderLib( libname = 'bf_python_ext', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [362,165]) # ketsji is 360
|
|
||||||
|
@ -76,4 +76,8 @@ if(WITH_PYTHON_MODULE)
|
|||||||
add_definitions(-DWITH_PYTHON_MODULE)
|
add_definitions(-DWITH_PYTHON_MODULE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_PYTHON_SAFETY)
|
||||||
|
add_definitions(-DWITH_PYTHON_SAFETY)
|
||||||
|
endif()
|
||||||
|
|
||||||
blender_add_lib(bf_python "${SRC}" "${INC}")
|
blender_add_lib(bf_python "${SRC}" "${INC}")
|
||||||
|
@ -29,23 +29,31 @@
|
|||||||
#ifndef BPY_RNA_H
|
#ifndef BPY_RNA_H
|
||||||
#define BPY_RNA_H
|
#define BPY_RNA_H
|
||||||
|
|
||||||
|
|
||||||
/* --- bpy build options --- */
|
/* --- bpy build options --- */
|
||||||
|
#ifdef WITH_PYTHON_SAFETY
|
||||||
|
|
||||||
/* play it safe and keep optional for now, need to test further now this affects looping on 10000's of verts for eg. */
|
/* play it safe and keep optional for now, need to test further now this affects looping on 10000's of verts for eg. */
|
||||||
// #define USE_WEAKREFS
|
#define USE_WEAKREFS
|
||||||
|
|
||||||
/* method to invalidate removed py data, XXX, slow to remove objects, otherwise no overhead */
|
/* method to invalidate removed py data, XXX, slow to remove objects, otherwise no overhead */
|
||||||
//#define USE_PYRNA_INVALIDATE_GC
|
/* #define USE_PYRNA_INVALIDATE_GC */
|
||||||
|
|
||||||
/* different method */
|
/* different method */
|
||||||
//#define USE_PYRNA_INVALIDATE_WEAKREF
|
#define USE_PYRNA_INVALIDATE_WEAKREF
|
||||||
|
|
||||||
/* support for inter references, currently only needed for corner case */
|
/* support for inter references, currently only needed for corner case */
|
||||||
// #define USE_PYRNA_STRUCT_REFERENCE
|
#define USE_PYRNA_STRUCT_REFERENCE
|
||||||
|
|
||||||
/* use real collection iterators rather then faking with a list */
|
/* use real collection iterators rather then faking with a list */
|
||||||
#define USE_PYRNA_ITER
|
#define USE_PYRNA_ITER
|
||||||
|
|
||||||
|
#else /* WITH_PYTHON_SAFETY */
|
||||||
|
|
||||||
|
/* default, no defines! */
|
||||||
|
|
||||||
|
#endif /* !WITH_PYTHON_SAFETY */
|
||||||
|
|
||||||
|
|
||||||
/* sanity checks on above defs */
|
/* sanity checks on above defs */
|
||||||
#if defined(USE_PYRNA_INVALIDATE_WEAKREF) && !defined(USE_WEAKREFS)
|
#if defined(USE_PYRNA_INVALIDATE_WEAKREF) && !defined(USE_WEAKREFS)
|
||||||
#define USE_WEAKREFS
|
#define USE_WEAKREFS
|
||||||
|
Loading…
Reference in New Issue
Block a user