| Fix thread detection with uClibc in timer_time.m4 |
| |
| The timer_time.m4 gl_TIMER_TIME function determines which libraries |
| need to be linked to get access to the timer function, generally -lrt |
| for Linux systems. On platforms where threads are used, librt |
| typically uses thread functions from libpthread. |
| |
| However, the test to determine whether the platform has thread or not |
| is incorrect: it assumes that if the C library is uClibc, then threads |
| are not available. This is actually not true: uClibc has configurable |
| thread support, and when thread support is available, librt calls |
| libpthread functions. |
| |
| This is important when static linking is used, because otherwise only |
| -lrt is used at link time, which fails because librt calls undefined |
| thread functions. Both -lrt and -lpthread must be passed. |
| |
| This problem is fixed by making the uClibc thread detection a bit |
| smarter, thanks to the usage of the __HAS_NO_THREADS__ macro defined |
| in <bits/uClibc_config.h>, which itself is included by <features.h>. |
| |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| |
| Index: b/m4/timer_time.m4 |
| =================================================================== |
| --- a/m4/timer_time.m4 |
| +++ b/m4/timer_time.m4 |
| @@ -28,7 +28,7 @@ |
| #include <features.h> |
| #ifdef __GNU_LIBRARY__ |
| #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || (__GLIBC__ > 2)) \ |
| - && !defined __UCLIBC__ |
| + && !(__UCLIBC__ && __HAS_NO_THREADS__) |
| Thread emulation available |
| #endif |
| #endif |