This fixes the single largest source of problems when including vlc/*.h out of the box.
if ${have_nanosleep}; then
AC_DEFINE(HAVE_NANOSLEEP, 1, [Define if nanosleep is available.])
fi
+fi # end "${SYS}" != "mingw32" -a "${SYS}" != "mingwce"
dnl Check for misc headers
-AC_MSG_CHECKING(for pthread_cond_t in pthread.h)
-AC_EGREP_HEADER(pthread_cond_t,pthread.h,[
- AC_MSG_RESULT(yes)
- AC_DEFINE(PTHREAD_COND_T_IN_PTHREAD_H, 1,
- Define if <pthread.h> defines pthread_cond_t.)],[
- AC_MSG_RESULT(no)])
-
AC_MSG_CHECKING(for strncasecmp in strings.h)
AC_EGREP_HEADER(strncasecmp,strings.h,[
AC_MSG_RESULT(yes)
# include <kernel/scheduler.h>
# include <byteorder.h>
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) /* pthreads (like Linux & BSD) */
+#else /* pthreads (like Linux & BSD) */
# define LIBVLC_USE_PTHREAD 1
# define _APPLE_C_SOURCE 1 /* Proper pthread semantics on OSX */
# include <time.h>
# endif
-#else
-# error no threads available on your system !
-
#endif
/*****************************************************************************
# define VLC_THREAD_PRIORITY_OUTPUT 15
# define VLC_THREAD_PRIORITY_HIGHEST 15
-#elif defined(PTHREAD_COND_T_IN_PTHREAD_H)
+#elif defined(LIBVLC_USE_PTHREAD)
# define VLC_THREAD_PRIORITY_LOW 0
# define VLC_THREAD_PRIORITY_INPUT 20
# define VLC_THREAD_PRIORITY_AUDIO 10
} vlc_threadvar_t;
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#else
typedef pthread_t vlc_thread_t;
typedef struct
{
#define vlc_mutex_lock( P_MUTEX ) \
__vlc_mutex_lock( __FILE__, __LINE__, P_MUTEX )
-#if defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#if defined(LIBVLC_USE_PTHREAD)
static inline unsigned long int CAST_PTHREAD_TO_INT (pthread_t th)
{
union { pthread_t th; unsigned long int i; } v = { };
i_result = acquire_sem( p_mutex->lock );
}
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
# define vlc_assert_locked( m ) \
assert (pthread_mutex_lock (&((m)->mutex)) == EDEADLK)
return B_OK;
}
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
i_result = pthread_mutex_unlock( &p_mutex->mutex );
if ( i_result )
{
i_result = 0;
}
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
i_result = pthread_cond_signal( &p_condvar->cond );
if ( i_result )
{
vlc_mutex_lock( p_mutex );
i_result = 0;
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
# ifdef DEBUG
/* In debug mode, timeout */
#elif defined( HAVE_KERNEL_SCHEDULER_H )
# error Unimplemented
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
lldiv_t d = lldiv( deadline, 1000000 );
struct timespec ts = { d.quot, d.rem * 1000 };
#elif defined( UNDER_CE ) || defined( WIN32 )
i_ret = ( TlsSetValue( p_tls->handle, p_value ) != 0 );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
i_ret = pthread_setspecific( p_tls->handle, p_value );
#endif
#elif defined( UNDER_CE ) || defined( WIN32 )
p_ret = TlsGetValue( p_tls->handle );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
p_ret = pthread_getspecific( p_tls->handle );
#endif
change_unsafe();
change_need_restart();
-#if !defined(__APPLE__) && !defined(SYS_BEOS) && defined(PTHREAD_COND_T_IN_PTHREAD_H)
+#if !defined(__APPLE__) && !defined(SYS_BEOS) && defined(LIBVLC_USE_PTHREAD)
add_bool( "rt-priority", VLC_FALSE, NULL, RT_PRIORITY_TEXT,
RT_PRIORITY_LONGTEXT, VLC_TRUE );
change_need_restart();
#endif
-#if !defined(SYS_BEOS) && defined(PTHREAD_COND_T_IN_PTHREAD_H)
+#if !defined(SYS_BEOS) && defined(LIBVLC_USE_PTHREAD)
add_integer( "rt-offset", 0, NULL, RT_OFFSET_TEXT,
RT_OFFSET_LONGTEXT, VLC_TRUE );
change_need_restart();
static int i_win9x_cv = 1;
#elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
static pthread_mutex_t once_mutex = PTHREAD_MUTEX_INITIALIZER;
#endif
i_win9x_cv = 1;
}
#elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_lock( &once_mutex );
#endif
}
#elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
#endif
p_root = vlc_object_create( p_libvlc_global, VLC_OBJECT_GLOBAL );
while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP );
#elif defined( HAVE_KERNEL_SCHEDULER_H )
while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_unlock( &once_mutex );
#endif
#if defined( UNDER_CE )
#elif defined( WIN32 )
#elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_lock( &once_mutex );
#endif
#if defined( UNDER_CE )
#elif defined( WIN32 )
#elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_unlock( &once_mutex );
#endif
return VLC_SUCCESS;
p_mutex->init = 9999;
return B_OK;
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
# if defined(DEBUG)
{
/* Create error-checking mutex to detect problems more easily. */
/* Create mutex returns a recursive mutex */
p_mutex->mutex = CreateMutex( 0, FALSE, 0 );
return ( p_mutex->mutex != NULL ? 0 : 1 );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
pthread_mutexattr_t attr;
int i_result;
p_mutex->init = 0;
return B_OK;
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
i_result = pthread_mutex_destroy( &p_mutex->mutex );
if( i_result )
{
p_condvar->init = 9999;
return 0;
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
pthread_condattr_t attr;
int ret;
p_condvar->init = 0;
return 0;
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
i_result = pthread_cond_destroy( &p_condvar->cond );
if( i_result )
{
p_tls->handle = TlsAlloc();
i_ret = !( p_tls->handle == 0xFFFFFFFF );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
i_ret = pthread_key_create( &p_tls->handle, NULL );
#endif
return i_ret;
i_priority, p_data );
i_ret = resume_thread( p_priv->thread_id );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
i_ret = pthread_create( &p_priv->thread_id, NULL, func, p_data );
#ifndef __APPLE__
return 1;
}
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
# ifndef __APPLE__
if( config_GetInt( p_this, "rt-priority" ) > 0 )
# endif
int32_t exit_value;
i_ret = (B_OK == wait_for_thread( p_priv->thread_id, &exit_value ));
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
i_ret = pthread_join( p_priv->thread_id, NULL );
#endif