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

Reply via email to