diff --git a/src/libmv/multiview/euclidean_resection.cc b/src/libmv/multiview/euclidean_resection.cc index 6d918a1..9286251 100644 --- a/src/libmv/multiview/euclidean_resection.cc +++ b/src/libmv/multiview/euclidean_resection.cc @@ -32,6 +32,8 @@ namespace libmv { namespace euclidean_resection { +typedef unsigned int uint; + bool EuclideanResection(const Mat2X &x_camera, const Mat3X &X_world, Mat3 *R, Vec3 *t, diff --git a/src/libmv/numeric/numeric.h b/src/libmv/numeric/numeric.h index f39d126..21e0f06 100644 --- a/src/libmv/numeric/numeric.h +++ b/src/libmv/numeric/numeric.h @@ -40,7 +40,7 @@ } #endif //_WIN32 || __APPLE__ -#if _WIN32 +#if (defined(WIN32) || defined(WIN64)) && !defined(__MINGW32__) inline long lround(double d) { return (long)(d>0 ? d+0.5 : ceil(d-0.5)); } diff --git a/src/third_party/glog/src/config.h b/src/third_party/glog/src/config.h index ed8d56e..06ed686 100644 --- a/src/third_party/glog/src/config.h +++ b/src/third_party/glog/src/config.h @@ -4,6 +4,8 @@ /* Namespace for Google classes */ #ifdef __APPLE__ #include "config_mac.h" +#elif __MINGW32__ + #include "windows/config.h" #elif __GNUC__ #include "config_linux.h" #elif _MSC_VER diff --git a/src/third_party/glog/src/utilities.h b/src/third_party/glog/src/utilities.h index ee54f94..c4ae256 100644 --- a/src/third_party/glog/src/utilities.h +++ b/src/third_party/glog/src/utilities.h @@ -101,7 +101,9 @@ // correctly when GetStackTrace() is called with max_depth == 0. // Some code may do that. -#if defined(HAVE_LIB_UNWIND) +#if __MINGW32__ +# undef STACKTRACE_H +#elif defined(HAVE_LIB_UNWIND) # define STACKTRACE_H "stacktrace_libunwind-inl.h" #elif !defined(NO_FRAME_POINTER) # if defined(__i386__) && __GNUC__ >= 2 diff --git a/src/third_party/glog/src/windows/glog/logging.h b/src/third_party/glog/src/windows/glog/logging.h index 7a6df74..4257375 100755 --- a/src/third_party/glog/src/windows/glog/logging.h +++ b/src/third_party/glog/src/windows/glog/logging.h @@ -59,7 +59,7 @@ // Annoying stuff for windows -- makes sure clients can import these functions #ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) +# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) # define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) # else # define GOOGLE_GLOG_DLL_DECL @@ -86,6 +86,15 @@ #include #endif +#ifdef __MINGW32__ +# include +# include +# include // the normal place uint16_t is defined +# include // the normal place u_int16_t is defined +# include // a third place for uint16_t or u_int16_t +# define _exit(x) exit(x) +#endif + namespace google { #if 0 // the C99 format @@ -98,11 +107,16 @@ typedef int32_t int32; typedef u_int32_t uint32; typedef int64_t int64; typedef u_int64_t uint64; -#elif 1 // the windows (vc7) format +#elif defined(_MSC_VER) typedef __int32 int32; typedef unsigned __int32 uint32; typedef __int64 int64; typedef unsigned __int64 uint64; +#elif defined(__MINGW32__) +typedef int32_t int32; +typedef uint32_t uint32; +typedef int64_t int64; +typedef uint64_t uint64; #else #error Do not know how to define a 32-bit integer quantity on your system #endif diff --git a/src/third_party/glog/src/windows/port.h b/src/third_party/glog/src/windows/port.h index d093bf5..d507812 100755 --- a/src/third_party/glog/src/windows/port.h +++ b/src/third_party/glog/src/windows/port.h @@ -59,14 +59,16 @@ * used by both C and C++ code, so we put all the C++ together. */ -/* 4244: otherwise we get problems when substracting two size_t's to an int - * 4251: it's complaining about a private struct I've chosen not to dllexport - * 4355: we use this in a constructor, but we do it safely - * 4715: for some reason VC++ stopped realizing you can't return after abort() - * 4800: we know we're casting ints/char*'s to bools, and we're ok with that - * 4996: Yes, we're ok using "unsafe" functions like fopen() and strerror() - */ -#pragma warning(disable:4244 4251 4355 4715 4800 4996) +#if _MSC_VER + /* 4244: otherwise we get problems when substracting two size_t's to an int + * 4251: it's complaining about a private struct I've chosen not to dllexport + * 4355: we use this in a constructor, but we do it safely + * 4715: for some reason VC++ stopped realizing you can't return after abort() + * 4800: we know we're casting ints/char*'s to bools, and we're ok with that + * 4996: Yes, we're ok using "unsafe" functions like fopen() and strerror() + */ +# pragma warning(disable:4244 4251 4355 4715 4800 4996) +#endif /* file I/O */ #define PATH_MAX 1024 @@ -108,7 +110,9 @@ extern int snprintf(char *str, size_t size, extern int safe_vsnprintf(char *str, size_t size, const char *format, va_list ap); #define vsnprintf(str, size, format, ap) safe_vsnprintf(str, size, format, ap) +#if !defined(__MINGW32__) #define va_copy(dst, src) (dst) = (src) +#endif /* Windows doesn't support specifying the number of buckets as a * hash_map constructor arg, so we leave this blank. @@ -130,13 +134,30 @@ enum { PTHREAD_ONCE_INIT = 0 }; // important that this be 0! for SpinLock #define pthread_equal(pthread_t_1, pthread_t_2) ((pthread_t_1)==(pthread_t_2)) inline struct tm* localtime_r(const time_t* timep, struct tm* result) { +#if __MINGW32__ + struct tm *local_result; + local_result = localtime (timep); + + if (local_result == NULL || result == NULL) + return NULL; + + memcpy (result, local_result, sizeof (result)); + + return result; +#else localtime_s(result, timep); return result; +#endif } inline char* strerror_r(int errnum, char* buf, size_t buflen) { +#if __MINGW32__ + strncpy(buf, "Not implemented yet", buflen); + return buf; +#else strerror_s(buf, buflen, errnum); return buf; +#endif } #ifndef __cplusplus