mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-17 22:11:36 +00:00
MSYS2 Mingw64 compilation (#84)
This commit is contained in:
@@ -184,7 +184,7 @@ IF(UNICODE_SUPPORT)
|
|||||||
MESSAGE(STATUS "ICU libraries found")
|
MESSAGE(STATUS "ICU libraries found")
|
||||||
# NOTE icudata appears to be icudt on Windows/MSVC and icudata on others
|
# NOTE icudata appears to be icudt on Windows/MSVC and icudata on others
|
||||||
# dl is included to resolve dlopen and friends symbols
|
# dl is included to resolve dlopen and friends symbols
|
||||||
IF(MSVC)
|
IF(MSVC OR MINGW)
|
||||||
SET(ICU_LIBRARIES icuuc icudt)
|
SET(ICU_LIBRARIES icuuc icudt)
|
||||||
ADD_DEBUG_VARIANTS(ICU_LIBRARIES "${ICU_LIBRARIES}" "d")
|
ADD_DEBUG_VARIANTS(ICU_LIBRARIES "${ICU_LIBRARIES}" "d")
|
||||||
ADD_DEFINITIONS(-DU_STATIC_IMPLEMENTATION) # required for static ICU
|
ADD_DEFINITIONS(-DU_STATIC_IMPLEMENTATION) # required for static ICU
|
||||||
@@ -316,7 +316,12 @@ IF(MSVC)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
ElSE()
|
ElSE()
|
||||||
ADD_DEFINITIONS(-fPIC -Wno-non-virtual-dtor)
|
IF(WIN32)
|
||||||
|
# -fPIC is not relevant on Windows and create pointless warnings
|
||||||
|
ADD_DEFINITIONS(-Wno-non-virtual-dtor)
|
||||||
|
ELSE()
|
||||||
|
ADD_DEFINITIONS(-fPIC -Wno-non-virtual-dtor)
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS}
|
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS}
|
||||||
|
|||||||
@@ -27,9 +27,12 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <boost/cstdint.hpp>
|
#include <boost/cstdint.hpp>
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
// NB: Streams are only re-opened as binary when compiled with MSVC currently.
|
||||||
|
// It is unclear what the correct behaviour would be compiled with e.g MinGW
|
||||||
|
#if defined(_MSC_VER)
|
||||||
#define SET_BINARY_STREAMS
|
#define SET_BINARY_STREAMS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SET_BINARY_STREAMS
|
#ifdef SET_BINARY_STREAMS
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|||||||
@@ -47,23 +47,53 @@ using namespace IfcParse;
|
|||||||
// strtod_l() is used and a reference to the "C" locale is obtained here. The alternative is
|
// strtod_l() is used and a reference to the "C" locale is obtained here. The alternative is
|
||||||
// to use std::istringstream::imbue(std::locale::classic()), but there are subtleties in
|
// to use std::istringstream::imbue(std::locale::classic()), but there are subtleties in
|
||||||
// parsing in MSVC2010 and it appears to be much slower.
|
// parsing in MSVC2010 and it appears to be much slower.
|
||||||
#ifdef _MSC_VER
|
#if defined(_MSC_VER)
|
||||||
|
|
||||||
static _locale_t locale = (_locale_t) 0;
|
static _locale_t locale = (_locale_t) 0;
|
||||||
void init_locale() {
|
void init_locale() {
|
||||||
if (locale == (_locale_t) 0) {
|
if (locale == (_locale_t) 0) {
|
||||||
locale = _create_locale(LC_NUMERIC, "C");
|
locale = _create_locale(LC_NUMERIC, "C");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#if defined(__MINGW64__) || defined(__MINGW32__)
|
||||||
|
#include <locale>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
typedef void* locale_t;
|
||||||
|
static locale_t locale = (locale_t)0;
|
||||||
|
|
||||||
|
void init_locale() {}
|
||||||
|
|
||||||
|
double strtod_l(const char* start, char** end, locale_t loc) {
|
||||||
|
double d;
|
||||||
|
std::stringstream ss;
|
||||||
|
ss.imbue(std::locale::classic());
|
||||||
|
ss << start;
|
||||||
|
ss >> d;
|
||||||
|
size_t nread = ss.tellg();
|
||||||
|
*end = const_cast<char*>(start) + nread;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
#include <xlocale.h>
|
#include <xlocale.h>
|
||||||
#endif
|
#endif
|
||||||
static locale_t locale = (locale_t) 0;
|
#include <locale.h>
|
||||||
|
|
||||||
|
static locale_t locale = (locale_t)0;
|
||||||
void init_locale() {
|
void init_locale() {
|
||||||
if (locale == (locale_t) 0) {
|
if (locale == (locale_t)0) {
|
||||||
locale = newlocale(LC_NUMERIC_MASK, "C", (locale_t) 0);
|
locale = newlocale(LC_NUMERIC_MASK, "C", (locale_t)0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user