--- misc/liblangtag-0.4.0/configure.ac +++ misc/build/liblangtag-0.4.0/configure.ac @@ -173,8 +173,9 @@ __sync_synchronize(); j = __sync_fetch_and_sub(&i, 1); return j; - ]])], [AC_MSG_ERROR([liblangtag has to be built with -march=i486 or later.])] - [lt_cv_has_atomic=no])]) + ]])], [AC_MSG_ERROR([liblangtag has to be built with -march=i486 or later.])], + [lt_cv_has_atomic=no + CFLAGS="$_save_cflags"])]) ]) if test "x$lt_cv_has_atomic" = "xyes"; then AC_DEFINE(LT_HAVE_ATOMIC_BUILTINS, 1, [Have buit-in atomic functions]) @@ -291,8 +291,14 @@ dnl ====================================================================== dnl check another libraries dnl ====================================================================== +case $host_os in + cygwin* | mingw*) + ;; -AX_PTHREAD([], + *) + AX_PTHREAD([], [AC_MSG_ERROR([*** pthread library are required])]) + ;; +esac GOBJECT_INTROSPECTION_CHECK([1.30.0]) if test "x$enable_introspection" != "xyes"; then --- misc/liblangtag-0.4.0/configure +++ misc/build/liblangtag-0.4.0/configure @@ -12607,7 +12607,9 @@ _ACEOF if ac_fn_c_try_link "$LINENO"; then : as_fn_error $? "liblangtag has to be built with -march=i486 or later." "$LINENO" 5 +else lt_cv_has_atomic=no + CFLAGS="$_save_cflags" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext @@ -13203,6 +13203,10 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu +case $host_os in + cygwin* | mingw*) + ;; + *) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h @@ -13584,6 +13584,8 @@ ax_pthread_ok=no as_fn_error $? "*** pthread library are required" "$LINENO" 5 fi +;; +esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --- misc/liblangtag-0.4.0/liblangtag/lt-macros.h +++ misc/build/liblangtag-0.4.0/liblangtag/lt-macros.h @@ -14,7 +14,9 @@ #error "Only can be included directly." #endif +#ifndef _WIN32 #include +#endif #ifndef __LT_MACROS_H__ #define __LT_MACROS_H__ @@ -206,6 +206,14 @@ LT_BEGIN_DECLS +#ifdef _MSC_VER +#ifdef _M_AMD64 +typedef signed long long ssize_t; +#else +typedef signed int ssize_t; +#endif +#endif + typedef void * lt_pointer_t; typedef int lt_bool_t; typedef lt_pointer_t (* lt_copy_func_t) (lt_pointer_t data); --- misc/liblangtag-0.4.0/liblangtag/lt-atomic.h +++ misc/build/liblangtag-0.4.0/liblangtag/lt-atomic.h @@ -17,7 +17,11 @@ #include "config.h" #endif +#if !defined(LT_HAVE_ATOMIC_BUILTINS) && !defined(_WIN32) #include +#elif defined(_WIN32) +#include +#endif #include "lt-messages.h" LT_BEGIN_DECLS @@ -26,14 +30,40 @@ LT_INLINE_FUNC int lt_atomic_int_inc (volatile int *v); LT_INLINE_FUNC lt_bool_t lt_atomic_int_dec_and_test(volatile int *v); -#ifndef LT_HAVE_ATOMIC_BUILTINS +#if !defined(LT_HAVE_ATOMIC_BUILTINS) && !defined(_WIN32) static pthread_mutex_t __lt_atomic_lock = PTHREAD_MUTEX_INITIALIZER; #endif /*< private >*/ /*< public >*/ -#ifdef LT_HAVE_ATOMIC_BUILTINS +#ifdef _WIN32 +LT_INLINE_FUNC int +lt_atomic_int_get(volatile int *v) +{ + lt_return_val_if_fail (v != NULL, 0); + + return (int)InterlockedExchangeAdd((LONG*)v, 0); +} + +LT_INLINE_FUNC int +lt_atomic_int_inc(volatile int *v) +{ + lt_return_val_if_fail (v != NULL, 0); + + return (int)InterlockedExchangeAdd((LONG*)v, 1) + 1; +} + +lt_bool_t +lt_atomic_int_dec_and_test(volatile int *v) +{ + lt_return_val_if_fail (v != NULL, FALSE); + + return 1 == InterlockedExchangeAdd((LONG*)v, -1) - 1; +} + + +#elif defined(LT_HAVE_ATOMIC_BUILTINS) LT_INLINE_FUNC int lt_atomic_int_get(volatile int *v) { --- misc/liblangtag-0.4.0/liblangtag/lt-messages.h +++ misc/build/liblangtag-0.4.0/liblangtag/lt-messages.h @@ -298,10 +298,17 @@ _lt_return_after_eval_if_fail(__expr__,__eval__) #define lt_return_val_after_eval_if_fail(__expr__,__val__,__eval__) \ _lt_return_val_after_eval_if_fail(__expr__,__val__,__eval__) +#ifdef __GNUC__ #define lt_warn_if_reached() \ lt_message_printf(LT_MSG_WARNING, LT_MSG_FLAG_NONE, 0, \ "(%s:%d): %s: code should not be reached", \ __FILE__, __LINE__, __PRETTY_FUNCTION__) +#else +#define lt_warn_if_reached() \ + lt_message_printf(LT_MSG_WARNING, LT_MSG_FLAG_NONE, 0, \ + "(%s:%d): code should not be reached", \ + __FILE__, __LINE__) +#endif LT_END_DECLS --- misc/liblangtag-0.4.0/liblangtag/lt-error.c +++ misc/build/liblangtag-0.4.0/liblangtag/lt-error.c @@ -14,7 +14,9 @@ #include "config.h" #endif +#ifndef _WIN32 #include +#endif #include #include "lt-list.h" #include "lt-mem.h" @@ -120,9 +120,13 @@ d->message = lt_strdup_vprintf(message, ap); va_end(ap); +#ifdef _WIN32 + size = 0; +#else size = backtrace(traces, 1024); if (size > 0) d->traces = backtrace_symbols(traces, size); +#endif d->stack_size = size; lt_mem_add_ref(&d->parent, d->message, free); --- misc/liblangtag-0.4.0/liblangtag/lt-ext-module.c +++ misc/build/liblangtag-0.4.0/liblangtag/lt-ext-module.c @@ -15,11 +15,15 @@ #endif #include +#ifdef ENABLE_MODULE #include +#endif #ifdef HAVE_DLFCN_H #include #endif +#ifndef _WIN32 #include +#endif #include #include #include --- misc/liblangtag-0.4.0/liblangtag/lt-xml.c +++ misc/build/liblangtag-0.4.0/liblangtag/lt-xml.c @@ -14,7 +14,11 @@ #include "config.h" #endif +#ifndef _WIN32 #include +#else +#include +#endif #include #include #include @@ -40,7 +44,9 @@ }; static lt_xml_t *__xml = NULL; +#ifndef _WIN32 static pthread_mutex_t __lt_xml_lock = PTHREAD_MUTEX_INITIALIZER; +#endif /*< private >*/ static lt_bool_t @@ -309,11 +315,18 @@ { lt_error_t *err = NULL; +#ifdef _WIN32 + HANDLE __lt_xml_lock = CreateMutex(NULL, FALSE, NULL); +#else pthread_mutex_lock(&__lt_xml_lock); +#endif if (__xml) { +#ifdef _WIN32 + ReleaseMutex(__lt_xml_lock); +#else pthread_mutex_unlock(&__lt_xml_lock); - +#endif return lt_xml_ref(__xml); } @@ -389,8 +402,11 @@ lt_xml_unref(__xml); } +#ifdef _WIN32 + ReleaseMutex(__lt_xml_lock); +#else pthread_mutex_unlock(&__lt_xml_lock); - +#endif return __xml; } --- misc/liblangtag-0.4.0/liblangtag/lt-messages.c +++ misc/build/liblangtag-0.4.0/liblangtag/lt-messages.c @@ -17,7 +17,9 @@ #include "config.h" #endif +#ifndef _WIN32 #include +#endif #include #include #include @@ -98,6 +98,7 @@ static void _lt_message_stacktrace(void) { +#ifndef _WIN32 void *traces[1024]; char **strings; int size, i; @@ -119,6 +119,7 @@ } free(strings); } +#endif } static void --- misc/liblangtag-0.4.0/liblangtag/lt-string.c +++ misc/build/liblangtag-0.4.0/liblangtag/lt-string.c @@ -302,8 +302,10 @@ lt_return_val_if_fail (string != NULL, NULL); lt_return_val_if_fail (path != NULL, string); +#ifndef _WIN32 if (lt_string_length(string) == 0 && path[0] != LT_DIR_SEPARATOR) lt_string_append(string, LT_DIR_SEPARATOR_S); +#endif va_start(ap, path); p = path; --- misc/liblangtag-0.4.0/liblangtag/lt-tag.c +++ misc/build/liblangtag-0.4.0/liblangtag/lt-tag.c @@ -15,9 +15,15 @@ #endif #include +#ifndef _WIN32 #include +#endif #include +#ifndef HAVE_STDINT_H +typedef int int32_t; +#else #include +#endif #include #include #include "lt-database.h"