aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2015-07-09 19:24:05 +0200
committerEven Rouault <even.rouault@spatialys.com>2015-07-09 19:24:05 +0200
commit9f05b2dd07712d35fe3fa78934631b6a0142891f (patch)
tree7f60956bddca449be290ffda0298e40e524e9d98
parentd895a12eee04c04a254f2a5a759f763e2fc28519 (diff)
downloadPROJ-9f05b2dd07712d35fe3fa78934631b6a0142891f.tar.gz
PROJ-9f05b2dd07712d35fe3fa78934631b6a0142891f.zip
Make multistresstext.exe compile, and work, with mingw cross compiler (autoconf build)
-rw-r--r--Makefile.in1
-rw-r--r--cmake/Makefile.in1
-rwxr-xr-xconfigure47
-rw-r--r--configure.in6
-rw-r--r--jniwrap/Makefile.in1
-rw-r--r--jniwrap/org/Makefile.in1
-rw-r--r--jniwrap/org/proj4/Makefile.in1
-rw-r--r--man/Makefile.in1
-rw-r--r--man/man1/Makefile.in1
-rw-r--r--man/man3/Makefile.in1
-rw-r--r--nad/Makefile.in1
-rw-r--r--src/Makefile.am4
-rw-r--r--src/Makefile.in5
-rw-r--r--src/multistresstest.c24
14 files changed, 89 insertions, 6 deletions
diff --git a/Makefile.in b/Makefile.in
index 5fe6be41..7d3fbcc0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -289,6 +289,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/cmake/Makefile.in b/cmake/Makefile.in
index bd9b8629..c7108fd3 100644
--- a/cmake/Makefile.in
+++ b/cmake/Makefile.in
@@ -177,6 +177,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/configure b/configure
index e770a0dc..aee920f0 100755
--- a/configure
+++ b/configure
@@ -635,6 +635,7 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+THREAD_LIB
MUTEX_SETTING
JNI_INCLUDE
CPP
@@ -12575,8 +12576,52 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mutexes" >&5
$as_echo_n "checking for mutexes... " >&6; }
+THREAD_LIB=""
if test "$with_mutex" = yes -o x"$with_mutex" = x ; then
MUTEX_SETTING=pthread
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
+if ${ac_cv_lib_pthread_pthread_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_create ();
+int
+main ()
+{
+return pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthread_pthread_create=yes
+else
+ ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+ PTHREAD_EXISTS=YES
+fi
+
+ if test -n "$PTHREAD_EXISTS" ; then
+ THREAD_LIB="-lpthread"
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutexattr_settype in -lpthread" >&5
$as_echo_n "checking for pthread_mutexattr_settype in -lpthread... " >&6; }
if ${ac_cv_lib_pthread_pthread_mutexattr_settype+:} false; then :
@@ -12632,6 +12677,8 @@ fi
MUTEX_SETTING=$MUTEX_SETTING
+THREAD_LIB=$THREAD_LIB
+
ac_config_files="$ac_config_files Makefile cmake/Makefile src/Makefile man/Makefile man/man1/Makefile man/man3/Makefile nad/Makefile jniwrap/Makefile jniwrap/org/Makefile jniwrap/org/proj4/Makefile"
diff --git a/configure.in b/configure.in
index b0f7176b..20e929ca 100644
--- a/configure.in
+++ b/configure.in
@@ -90,8 +90,13 @@ AC_ARG_WITH([mutex],
[Disable real mutex locks (lacking pthreads)]),,)
AC_MSG_CHECKING([for mutexes])
+THREAD_LIB=""
if test "$with_mutex" = yes -o x"$with_mutex" = x ; then
MUTEX_SETTING=pthread
+ AC_CHECK_LIB(pthread,pthread_create,PTHREAD_EXISTS=YES,,,)
+ if test -n "$PTHREAD_EXISTS" ; then
+ THREAD_LIB="-lpthread"
+ fi
AC_CHECK_LIB(pthread,pthread_mutexattr_settype,,,)
AC_MSG_RESULT([enabled, pthread])
else
@@ -100,6 +105,7 @@ else
fi
AC_SUBST(MUTEX_SETTING,$MUTEX_SETTING)
+AC_SUBST(THREAD_LIB,$THREAD_LIB)
AC_OUTPUT(Makefile cmake/Makefile src/Makefile man/Makefile man/man1/Makefile \
man/man3/Makefile nad/Makefile \
diff --git a/jniwrap/Makefile.in b/jniwrap/Makefile.in
index 07463d22..4b1dc5c8 100644
--- a/jniwrap/Makefile.in
+++ b/jniwrap/Makefile.in
@@ -237,6 +237,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/jniwrap/org/Makefile.in b/jniwrap/org/Makefile.in
index c5dc6a9b..289f9b79 100644
--- a/jniwrap/org/Makefile.in
+++ b/jniwrap/org/Makefile.in
@@ -237,6 +237,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/jniwrap/org/proj4/Makefile.in b/jniwrap/org/proj4/Makefile.in
index d2691e2a..b3465be2 100644
--- a/jniwrap/org/proj4/Makefile.in
+++ b/jniwrap/org/proj4/Makefile.in
@@ -177,6 +177,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/man/Makefile.in b/man/Makefile.in
index 835acba8..178eeb41 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -237,6 +237,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/man/man1/Makefile.in b/man/man1/Makefile.in
index 9652baa7..aff916d0 100644
--- a/man/man1/Makefile.in
+++ b/man/man1/Makefile.in
@@ -208,6 +208,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/man/man3/Makefile.in b/man/man3/Makefile.in
index bd5ebd67..24007b03 100644
--- a/man/man3/Makefile.in
+++ b/man/man3/Makefile.in
@@ -208,6 +208,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/nad/Makefile.in b/nad/Makefile.in
index 6cc682cb..4cc945c5 100644
--- a/nad/Makefile.in
+++ b/nad/Makefile.in
@@ -207,6 +207,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
diff --git a/src/Makefile.am b/src/Makefile.am
index a996cbae..e53e7082 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -24,8 +24,8 @@ proj_LDADD = libproj.la
cs2cs_LDADD = libproj.la
nad2bin_LDADD = libproj.la
geod_LDADD = libproj.la
-multistresstest_LDADD = libproj.la -lpthread
-test228_LDADD = libproj.la -lpthread
+multistresstest_LDADD = libproj.la @THREAD_LIB@
+test228_LDADD = libproj.la @THREAD_LIB@
lib_LTLIBRARIES = libproj.la
diff --git a/src/Makefile.in b/src/Makefile.in
index a71265df..856cd107 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -324,6 +324,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+THREAD_LIB = @THREAD_LIB@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
@@ -398,8 +399,8 @@ proj_LDADD = libproj.la
cs2cs_LDADD = libproj.la
nad2bin_LDADD = libproj.la
geod_LDADD = libproj.la
-multistresstest_LDADD = libproj.la -lpthread
-test228_LDADD = libproj.la -lpthread
+multistresstest_LDADD = libproj.la @THREAD_LIB@
+test228_LDADD = libproj.la @THREAD_LIB@
lib_LTLIBRARIES = libproj.la
libproj_la_LDFLAGS = -no-undefined -version-info 9:0:0
libproj_la_SOURCES = \
diff --git a/src/multistresstest.c b/src/multistresstest.c
index d9c9aea0..e9da3323 100644
--- a/src/multistresstest.c
+++ b/src/multistresstest.c
@@ -287,8 +287,11 @@ static void *PosixTestThread( void *pData )
/************************************************************************/
/* main() */
/************************************************************************/
-int main( int argc, char **argv )
-
+#ifdef _WIN32
+static DWORD WINAPI do_main( LPVOID unused )
+#else
+int do_main(void)
+#endif
{
/* -------------------------------------------------------------------- */
/* Our first pass is to establish the correct answers for all */
@@ -393,3 +396,20 @@ int main( int argc, char **argv )
return 0;
}
+
+
+int main( int argc, char **argv )
+{
+#ifdef _WIN32
+ /* This is an incredible weirdness but with mingw cross-compiler */
+ /* 1. - b/a; where double a = 6378206.4; and double b = 6356583.8; */
+ /* does not evaluate the same in the main thread or in a thread forked */
+ /* by CreateThread(), so run the main in a thread... */
+ HANDLE thread = CreateThread(NULL, 0, do_main, NULL, 0, NULL);
+ WaitForSingleObject(thread, INFINITE);
+ CloseHandle( thread );
+#else
+ do_main();
+#endif
+ return 0;
+}