Update to support building with MinGW #78

We cannot call MinGW a fully supported platform for C++11 yet:

 - Concurrency is not yet supported by MinGW, so it is disabled by default
 - A problem in the memory model / library loader is preventing derived type
   casts from working. This may be able to be worked around, but has not been
   yet.
This commit is contained in:
Jason Turner 2012-11-28 16:06:45 -07:00
parent 47ab27fd11
commit 691e002f90
4 changed files with 28 additions and 8 deletions

View File

@ -2,7 +2,13 @@ cmake_minimum_required(VERSION 2.8)
project(chaiscript)
option(MULTITHREAD_SUPPORT_ENABLED "Multithreaded Support Enabled" TRUE)
# MINGW does not yet support C++11's concurrency features
if (MINGW)
option(MULTITHREAD_SUPPORT_ENABLED "Multithreaded Support Enabled" FALSE)
else()
option(MULTITHREAD_SUPPORT_ENABLED "Multithreaded Support Enabled" TRUE)
endif()
option(BUILD_MODULES "Build Extra Modules (stl, reflection)" TRUE)
option(BUILD_SAMPLES "Build Samples Folder" FALSE)
@ -39,7 +45,9 @@ include(CPack)
include(cmake/CheckCXX11Features.cmake)
find_library(READLINE_LIBRARY NAMES readline PATH /usr/lib /usr/local/lib /opt/local/lib)
if(NOT MINGW)
find_library(READLINE_LIBRARY NAMES readline PATH /usr/lib /usr/local/lib /opt/local/lib)
endif()
if(HAS_CXX11_VARIADIC_TEMPLATES)
message(STATUS "Variadic Template support detected")
@ -88,6 +96,12 @@ else()
set (EXTRA_LINKER_FLAGS )
endif()
# limitations in MinGW require us to make an optimized build
# for the sake of object sizes or something
if (MINGW)
add_definitions(-O3)
endif()
include_directories(include)

View File

@ -5,6 +5,7 @@
// http://www.chaiscript.com
#include <iostream>
#include <ctime>
#include <chaiscript/chaiscript.hpp>
#include <chaiscript/dispatchkit/bootstrap_stl.hpp>

View File

@ -15,16 +15,20 @@
#include <readline/readline.h>
#include <readline/history.h>
#else
char *mystrdup (const char *s) {
char *d = static_cast<char*>(malloc (strlen (s) + 1)); // Space for length plus nul
if (d == nullptr) return nullptr; // No memory
strcpy (d,s); // Copy the characters
return d; // Return the new string
}
char* readline(const char* p)
{
std::string retval;
std::cout << p ;
std::getline(std::cin, retval);
#ifdef CHAISCRIPT_MSVC
return std::cin.eof() ? NULL : _strdup(retval.c_str());
#else
return std::cin.eof() ? NULL : strdup(retval.c_str());
#endif
return std::cin.eof() ? NULL : mystrdup(retval.c_str());
}
void add_history(const char*){}
void using_history(){}

View File

@ -1,6 +1,7 @@
// Tests to make sure that the order in which function dispatches occur is correct
#include <chaiscript/dispatchkit/type_info.hpp>
#include <cstdlib>
void test_type(const chaiscript::Type_Info &ti, bool t_is_const, bool t_is_pointer, bool t_is_reference, bool t_is_void,
bool t_is_undef)