[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40189] trunk/blender: fix compilation for MinGW by substituting qsort_r with qsort.
Sergey I. Sharybin
g.ulairi at gmail.com
Thu Sep 15 10:38:19 CEST 2011
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-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
--
With best regards, Sergey I. Sharybin
More information about the Bf-committers
mailing list