Hi, Unfortunately. it's not fixing actual problem -- both of buildbot and release environment fails to compile current Blender. This happens because there's no qsort_r (or something like this) funciton in libc2.7.
I haven't seen this usage of function in recent recast library svn and i think we can easily avoid it's usage from blender-side. At least, it's not so difficult to implement own sort function which will accept context parameter. And currently, we'll have different behavior with mingw and msvc: mingw now isn't thread safe here. I'd prefer not to introduce difference into platforms. If this code currently can't be called from concurrent threads -- it's better to use qsort+static variable for context. Benoit, you maintains this code, so i hope you'll be able to solve this issue. Antony Riakiotakis wrote: > Revision: 40189 > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40189 > Author: psy-fi > Date: 2011-09-13 19:51:58 +0000 (Tue, 13 Sep 2011) > Log Message: > ----------- > fix compilation for MinGW by substituting qsort_r with qsort. What aversion > do MinGW guys have for including '_r' variants of functions anyway? > Warning: a clean build will be needed probably to account for recent merge > changes, or link errors will occur. > > Modified Paths: > -------------- > trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp > trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp > > Modified: > trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp > =================================================================== > --- trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp > 2011-09-13 16:54:01 UTC (rev 40188) > +++ trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp > 2011-09-13 19:51:58 UTC (rev 40189) > @@ -94,7 +94,20 @@ > > return (drsqr<= rsqr) ? 1 : 0; > } > - > +#ifdef FREE_WINDOWS > +static float *_mingw_verts; > +static int ptcmp(const void *v1, const void *v2) > +{ > + const float* p1 =&_mingw_verts[(*(const int*)v1)*3]; > + const float* p2 =&_mingw_verts[(*(const int*)v2)*3]; > + if (p1[0]< p2[0]) > + return -1; > + else if (p1[0]> p2[0]) > + return 1; > + else > + return 0; > +} > +#else > #if defined(_MSC_VER) > static int ptcmp(void* up, const void *v1, const void *v2) > #elif defined(__APPLE__) || defined(__FreeBSD__) > @@ -113,6 +126,7 @@ > else > return 0; > } > +#endif > > // Based on Paul Bourke's triangulate.c > // http://astronomy.swin.edu.au/~pbourke/terrain/triangulate/triangulate.c > @@ -126,6 +140,9 @@ > qsort_s(&idx[0], idx.size(), sizeof(int), ptcmp, verts); > #elif defined(__APPLE__) || defined(__FreeBSD__) > qsort_r(&idx[0], idx.size(), sizeof(int), verts, ptcmp); > +#elif defined(FREE_WINDOWS) > + _mingw_verts = verts; > + qsort(&idx[0], idx.size(), sizeof(int), ptcmp); > #else > qsort_r(&idx[0], idx.size(), sizeof(int), ptcmp, verts); > #endif > > Modified: > trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp > =================================================================== > --- trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp > 2011-09-13 16:54:01 UTC (rev 40188) > +++ trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp > 2011-09-13 19:51:58 UTC (rev 40189) > @@ -289,6 +289,15 @@ > const int* recastData; > const int* trisToFacesMap; > }; > + > +#ifdef FREE_WINDOWS > +static SortContext *_mingw_context; > +static int compareByData(const void * a, const void * b) > +{ > + return ( > _mingw_context->recastData[_mingw_context->trisToFacesMap[*(int*)a]] - > + > _mingw_context->recastData[_mingw_context->trisToFacesMap[*(int*)b]] ); > +} > +#else > #if defined(_MSC_VER) > static int compareByData(void* data, const void * a, const void * b) > #elif defined(__APPLE__) || defined(__FreeBSD__) > @@ -301,6 +310,7 @@ > return ( context->recastData[context->trisToFacesMap[*(int*)a]] - > context->recastData[context->trisToFacesMap[*(int*)b]] ); > } > +#endif > > bool buildNavMeshData(const int nverts, const float* verts, > const int ntris, const > unsigned short *tris, > @@ -327,6 +337,9 @@ > qsort_s(trisMapping, ntris, sizeof(int), compareByData,&context); > #elif defined(__APPLE__) || defined(__FreeBSD__) > qsort_r(trisMapping, ntris, sizeof(int),&context, compareByData); > +#elif defined(FREE_WINDOWS) > + _mingw_context =&context; > + qsort(trisMapping, ntris, sizeof(int), compareByData); > #else > qsort_r(trisMapping, ntris, sizeof(int), compareByData,&context); > #endif > > _______________________________________________ > Bf-blender-cvs mailing list > bf-blender-...@blender.org > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > -- With best regards, Sergey I. Sharybin _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers