summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDiogo Franco <diogomfranco@gmail.com>2011-03-27 12:38:01 -0300
committerUoti Urpala <uau@mplayer2.org>2011-03-30 14:50:47 +0300
commit5c731e2ea669bbc732e51dc95c1ec68cc41050e6 (patch)
tree44f2f7560c6d277493777f1b9638f0c66e30fe32
parent7131fceb0b80c462604e65fe1869db6e14791b4e (diff)
downloadmpv-5c731e2ea669bbc732e51dc95c1ec68cc41050e6.tar.bz2
mpv-5c731e2ea669bbc732e51dc95c1ec68cc41050e6.tar.xz
configure, Windows: support static pthreads on Windows
Windows pthreads requires certain functions to be called to initialize itself. It can do that through DllMain but no such luck when linked statically; mplayer needs to call the initialization explicitly.
-rwxr-xr-xconfigure13
-rw-r--r--mplayer.c13
2 files changed, 25 insertions, 1 deletions
diff --git a/configure b/configure
index 21360b36e0..4a0f88712e 100755
--- a/configure
+++ b/configure
@@ -3186,7 +3186,14 @@ if test "$_pthreads" = auto ; then
cat > $TMPC << EOF
#include <pthread.h>
static void *func(void *arg) { return arg; }
-int main(void) { pthread_t tid; return pthread_create(&tid, 0, func, 0) == 0 ? 0 : 1; }
+int main(void) {
+ pthread_t tid;
+#ifdef PTW32_STATIC_LIB
+ pthread_win32_process_attach_np();
+ pthread_win32_thread_attach_np();
+#endif
+ return pthread_create (&tid, 0, func, 0) != 0;
+}
EOF
_pthreads=no
if ! hpux ; then
@@ -3194,6 +3201,10 @@ if ! hpux ; then
# for crosscompilation, we cannot execute the program, be happy if we can link statically
cc_check $THREAD_CFLAGS $_ld_tmp && (tmp_run || test "$_ld_static") && _ld_pthread="$_ld_tmp" && _pthreads=yes && break
done
+ if test "$_pthreads" = no && mingw32 ; then
+ _ld_tmp="-lpthreadGC2 -lws2_32"
+ cc_check $_ld_tmp -DPTW32_STATIC_LIB && (tmp_run || test "$_ld_static") && _ld_pthread="$_ld_tmp" && _pthreads=yes && CFLAGS="$CFLAGS -DPTW32_STATIC_LIB"
+ fi
fi
fi
if test "$_pthreads" = yes ; then
diff --git a/mplayer.c b/mplayer.c
index b9c7dcdac4..542bae7309 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -3889,10 +3889,23 @@ if (HAVE_CMOV)
#endif /* ARCH_X86 */
}
+#ifdef PTW32_STATIC_LIB
+static void detach_ptw32(void)
+{
+ pthread_win32_thread_detach_np();
+ pthread_win32_process_detach_np();
+}
+#endif
+
/* This preprocessor directive is a hack to generate a mplayer-nomain.o object
* file for some tools to link against. */
#ifndef DISABLE_MAIN
int main(int argc,char* argv[]){
+#ifdef PTW32_STATIC_LIB
+ pthread_win32_process_attach_np();
+ pthread_win32_thread_attach_np();
+ atexit(detach_ptw32);
+#endif
if (argc > 1 && !strcmp(argv[1], "-leak-report"))
talloc_enable_leak_report();