diff --git a/configure.ac b/configure.ac index d02b9d2479..f5dccf1626 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright (C) 2005-2013 Red Hat, Inc. +dnl Copyright (C) 2005-2014 Red Hat, Inc. dnl dnl This library is free software; you can redistribute it and/or dnl modify it under the terms of the GNU Lesser General Public @@ -276,6 +276,22 @@ dnl LIB_PTHREAD and LIBMULTITHREAD were set during gl_INIT by gnulib. old_LIBS=$LIBS LIBS="$LIBS $LIB_PTHREAD $LIBMULTITHREAD" AC_CHECK_FUNCS([pthread_mutexattr_init]) +dnl At least mingw64-winpthreads #defines pthread_sigmask to 0, +dnl which in turn causes compilation to complain about unused variables. +dnl Expose this broken implementation, so we can work around it. +AC_CACHE_CHECK([whether pthread_sigmask does anything], + [lv_cv_pthread_sigmask_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]], [[ + int (*foo)(int, const sigset_t *, sigset_t *) = &pthread_sigmask; + return !foo; + ]])], [lv_cv_pthread_sigmask_works=yes], [lv_cv_pthread_sigmask_works=no])]) +if test "x$lv_cv_pthread_sigmask_works" != xyes; then + AC_DEFINE([FUNC_PTHREAD_SIGMASK_BROKEN], [1], + [Define to 1 if pthread_sigmask is not a real function]) +fi LIBS=$old_libs dnl Availability of various common headers (non-fatal if missing). diff --git a/src/util/virutil.h b/src/util/virutil.h index 2229c7332a..029265c2c0 100644 --- a/src/util/virutil.h +++ b/src/util/virutil.h @@ -1,7 +1,7 @@ /* * virutil.h: common, generic utility functions * - * Copyright (C) 2010-2013 Red Hat, Inc. + * Copyright (C) 2010-2014 Red Hat, Inc. * Copyright (C) 2006, 2007 Binary Karma * Copyright (C) 2006 Shuveb Hussain * @@ -96,20 +96,34 @@ const char *virEnumToString(const char *const*types, const char *name ## TypeToString(int type); \ int name ## TypeFromString(const char*type); +/* No-op workarounds for functionality missing in mingw. */ # ifndef HAVE_GETUID -static inline int getuid (void) { return 0; } +static inline int getuid(void) { return 0; } # endif # ifndef HAVE_GETEUID -static inline int geteuid (void) { return 0; } +static inline int geteuid(void) { return 0; } # endif # ifndef HAVE_GETGID -static inline int getgid (void) { return 0; } +static inline int getgid(void) { return 0; } # endif # ifndef HAVE_GETEGID -static inline int getegid (void) { return 0; } +static inline int getegid(void) { return 0; } +# endif + +# ifdef FUNC_PTHREAD_SIGMASK_BROKEN +# undef pthread_sigmask +static inline int pthread_sigmask(int how, + const void *set, + void *old) +{ + (void) how; + (void) set; + (void) old; + return 0; +} # endif char *virGetHostname(void);