It was reported on IRC that this fails to build in release mode with scons.
I was able to get it building with a small addition to the SConscript, but not sure if this fix is correct or not. I leave to someone else to commit if so :) Patch: Index: source/blender/makesrna/intern/SConscript =================================================================== --- source/blender/makesrna/intern/SConscript (revision 43517) +++ source/blender/makesrna/intern/SConscript (working copy) @@ -101,6 +101,10 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): if env['WITH_BF_INTERNATIONAL']: defs.append('WITH_INTERNATIONAL') +if not env['BF_DEBUG']: + defs.append('NDEBUG') + + makesrna_tool.Append(CPPDEFINES=defs) makesrna_tool.Append (CPPPATH = Split(incs)) On Wed, Jan 18, 2012 at 7:18 PM, Campbell Barton <ideasma...@gmail.com> wrote: > Revision: 43511 > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43511 > Author: campbellbarton > Date: 2012-01-19 00:18:25 +0000 (Thu, 19 Jan 2012) > Log Message: > ----------- > debug function DM_debug_info / DM_debug_print, with access from python > through Object.dm_info('SOURCE/DEFORM/FINAL') > > this is to help tracking down issues with modifiers where loosing data > layers between modifiers can cause bugs, also to helo with comparing > bmesh/trunk's modifier stack. > > Modified Paths: > -------------- > trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h > trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c > trunk/blender/source/blender/makesrna/intern/rna_object_api.c > > Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h > =================================================================== > --- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h 2012-01-18 > 22:42:57 UTC (rev 43510) > +++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h 2012-01-19 > 00:18:25 UTC (rev 43511) > @@ -584,5 +584,10 @@ > /* Set object's bounding box based on DerivedMesh min/max data */ > void DM_set_object_boundbox(struct Object *ob, DerivedMesh *dm); > > +/* debug only */ > +#ifndef NDEBUG > +char *DM_debug_info(DerivedMesh *dm); > +void DM_debug_print(DerivedMesh *dm); > #endif > > +#endif > > Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c > =================================================================== > --- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c > 2012-01-18 22:42:57 UTC (rev 43510) > +++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c > 2012-01-19 00:18:25 UTC (rev 43511) > @@ -2313,3 +2313,78 @@ > #endif /* WITH_GAMEENGINE */ > > /* --- NAVMESH (end) --- */ > + > + > +/* derivedmesh info printing function, > + * to help track down differences DM output */ > + > +#ifndef NDEBUG > +#include "BLI_dynstr.h" > + > +static void dm_debug_info_layers(DynStr *dynstr, DerivedMesh *dm, void > *(*getElemDataArray)(DerivedMesh *, int)) > +{ > + int type; > + > + for (type = 0; type < CD_NUMTYPES; type++) { > + /* note: doesnt account for multiple layers */ > + void *pt = getElemDataArray(dm, type); > + if (pt) { > + const char *name = CustomData_layertype_name(type); > + const int size = CustomData_sizeof(type); > + const char *structname; > + int structnum; > + CustomData_file_write_info(type, &structname, > &structnum); > + BLI_dynstr_appendf(dynstr, > + " dict(name='%s', > struct='%s', type=%d, ptr='%p', elem=%d, length=%d),\n", > + name, structname, > type, (void *)pt, size, (int)(MEM_allocN_len(pt) / size)); > + } > + } > +} > + > +char *DM_debug_info(DerivedMesh *dm) > +{ > + DynStr *dynstr= BLI_dynstr_new(); > + char *ret; > + const char *tstr; > + > + BLI_dynstr_appendf(dynstr, "{\n"); > + BLI_dynstr_appendf(dynstr, " 'ptr': '%p',\n", (void *)dm); > + switch (dm->type) { > + case DM_TYPE_CDDM: tstr = "DM_TYPE_CDDM"; break; > + case DM_TYPE_EDITMESH: tstr = "DM_TYPE_EDITMESH"; break; > + case DM_TYPE_CCGDM: tstr = "DM_TYPE_CCGDM"; break; > + default: tstr = "UNKNOWN"; break; > + } > + BLI_dynstr_appendf(dynstr, " 'type': '%s',\n", tstr); > + BLI_dynstr_appendf(dynstr, " 'numVertData': %d,\n", > dm->numVertData); > + BLI_dynstr_appendf(dynstr, " 'numEdgeData': %d,\n", > dm->numEdgeData); > + BLI_dynstr_appendf(dynstr, " 'numFaceData': %d,\n", > dm->numFaceData); > + BLI_dynstr_appendf(dynstr, " 'deformedOnly': %d,\n", > dm->deformedOnly); > + > + BLI_dynstr_appendf(dynstr, " 'vertexLayers': (\n"); > + dm_debug_info_layers(dynstr, dm, dm->getVertDataArray); > + BLI_dynstr_appendf(dynstr, " ),\n"); > + > + BLI_dynstr_appendf(dynstr, " 'edgeLayers': (\n"); > + dm_debug_info_layers(dynstr, dm, dm->getEdgeDataArray); > + BLI_dynstr_appendf(dynstr, " ),\n"); > + > + BLI_dynstr_appendf(dynstr, " 'faceLayers': (\n"); > + dm_debug_info_layers(dynstr, dm, dm->getFaceDataArray); > + BLI_dynstr_appendf(dynstr, " ),\n"); > + > + BLI_dynstr_appendf(dynstr, "}\n"); > + > + ret = BLI_dynstr_get_cstring(dynstr); > + BLI_dynstr_free(dynstr); > + return ret; > +} > + > +void DM_debug_print(DerivedMesh *dm) > +{ > + char *str = DM_debug_info(dm); > + printf(str); > + fflush(stdout); > +} > + > +#endif /* NDEBUG */ > > Modified: trunk/blender/source/blender/makesrna/intern/rna_object_api.c > =================================================================== > --- trunk/blender/source/blender/makesrna/intern/rna_object_api.c > 2012-01-18 22:42:57 UTC (rev 43510) > +++ trunk/blender/source/blender/makesrna/intern/rna_object_api.c > 2012-01-19 00:18:25 UTC (rev 43511) > @@ -63,6 +63,7 @@ > #include "BKE_font.h" > #include "BKE_mball.h" > #include "BKE_modifier.h" > +#include "BKE_cdderivedmesh.h" > > #include "DNA_mesh_types.h" > #include "DNA_scene_types.h" > @@ -470,6 +471,44 @@ > return object_is_modified(scene, ob) & settings; > } > > +#ifndef NDEBUG > +void rna_Object_dm_info(struct Object *ob, int type, char *result) > +{ > + DerivedMesh *dm = NULL; > + int dm_release = FALSE; > + char *ret = NULL; > + > + result[0] = '\0'; > + > + switch(type) { > + case 0: > + if (ob->type == OB_MESH) { > + dm = CDDM_from_mesh(ob->data, ob); > + ret = DM_debug_info(dm); > + dm_release = TRUE; > + } > + break; > + case 1: > + dm = ob->derivedDeform; > + break; > + case 2: > + dm = ob->derivedFinal; > + break; > + } > + > + if (dm) { > + ret = DM_debug_info(dm); > + if (dm_release) { > + dm->release(dm); > + } > + if (ret) { > + strcpy(result, ret); > + MEM_freeN(ret); > + } > + } > +} > +#endif /* NDEBUG */ > + > #else > > void RNA_api_object(StructRNA *srna) > @@ -483,6 +522,15 @@ > {0, NULL, 0, NULL, NULL} > }; > > +#ifndef NDEBUG > + static EnumPropertyItem mesh_dm_info_items[] = { > + {0, "SOURCE", 0, "Source", "Source mesh"}, > + {1, "DEFORM", 0, "Deform", "Objects deform mesh"}, > + {2, "FINAL", 0, "Final", "Objects final mesh"}, > + {0, NULL, 0, NULL, NULL} > + }; > +#endif > + > /* mesh */ > func= RNA_def_function(srna, "to_mesh", "rna_Object_to_mesh"); > RNA_def_function_ui_description(func, "Create a Mesh datablock with > modifiers applied"); > @@ -585,6 +633,20 @@ > RNA_def_property_flag(parm, PROP_REQUIRED); > parm= RNA_def_boolean(func, "result", 0, "", "Object visibility"); > RNA_def_function_return(func, parm); > + > + > +#ifndef NDEBUG > + /* mesh */ > + func= RNA_def_function(srna, "dm_info", "rna_Object_dm_info"); > + RNA_def_function_ui_description(func, "Returns a string for derived > mesh data"); > + > + parm= RNA_def_enum(func, "type", mesh_dm_info_items, 0, "", "Modifier > settings to apply"); > + RNA_def_property_flag(parm, PROP_REQUIRED); > + /* weak!, no way to return dynamic string type */ > + parm= RNA_def_string(func, "result", "result", 1024, "result", ""); > + RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string > return value */ > + RNA_def_function_output(func, parm); > +#endif /* NDEBUG */ > } > > > > _______________________________________________ > Bf-blender-cvs mailing list > bf-blender-...@blender.org > http://lists.blender.org/mailman/listinfo/bf-blender-cvs _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers