Fix linux and windows build issues.

- Linux makefile overrides and removes the optimization flags.
- Old linux gcc doesn't understand lambdas.
- MSVC doesn't like extern and explicit instantiation in same file.
develop
Alexander Gavrilov 2013-09-30 22:51:29 +04:00
parent 9e81d27cd1
commit 599af0a4d9
5 changed files with 14 additions and 6 deletions

@ -104,9 +104,9 @@ OPTION(BUILD_PLUGINS "Build the plugins." ON)
# enable C++11 features # enable C++11 features
IF(UNIX) IF(UNIX)
add_definitions(-DLINUX_BUILD) add_definitions(-DLINUX_BUILD)
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -Wall -Wno-unused-variable") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -Wall -Wno-unused-variable")
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -m32 -march=i686 -mtune=generic -std=c++0x") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -m32 -march=i686 -mtune=generic -std=c++0x")
SET(CMAKE_C_FLAGS "-fvisibility=hidden -m32 -march=i686 -mtune=generic") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -m32 -march=i686 -mtune=generic")
ELSEIF(MSVC) ELSEIF(MSVC)
# for msvc, tell it to always use 8-byte pointers to member functions to avoid confusion # for msvc, tell it to always use 8-byte pointers to member functions to avoid confusion
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /vmg /vmm /MP") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /vmg /vmm /MP")

@ -56,6 +56,8 @@ distribution.
#pragma warning( disable: 4018) #pragma warning( disable: 4018)
// nonstandard extension used: enum 'df::whatever::etc' used in qualified name // nonstandard extension used: enum 'df::whatever::etc' used in qualified name
#pragma warning( disable: 4482) #pragma warning( disable: 4482)
// nonstandard extension used: 'extern' before template explicit instantiation
#pragma warning( disable: 4231)
#endif #endif
#endif #endif

@ -99,8 +99,10 @@ namespace Random
} }
}; };
#ifndef DFHACK_RANDOM_CPP
extern template void MersenneRNG::unitvector<float>(float *p, int size); extern template void MersenneRNG::unitvector<float>(float *p, int size);
extern template void MersenneRNG::unitvector<double>(double *p, int size); extern template void MersenneRNG::unitvector<double>(double *p, int size);
#endif
} }
} }

@ -29,6 +29,8 @@ distribution.
#include <map> #include <map>
using namespace std; using namespace std;
#define DFHACK_RANDOM_CPP
#include "modules/Random.h" #include "modules/Random.h"
#include "VersionInfo.h" #include "VersionInfo.h"
#include "MemAccess.h" #include "MemAccess.h"

@ -427,7 +427,7 @@ public:
void clearSelection() void clearSelection()
{ {
for_each_(list, [] (ListEntry<T> &e) { e.selected = false; }); for_each_(list, clear_fn);
} }
void selectItem(const T elem) void selectItem(const T elem)
@ -550,8 +550,7 @@ public:
void sort() void sort()
{ {
if (force_sort || list.size() < 100) if (force_sort || list.size() < 100)
std::sort(list.begin(), list.end(), std::sort(list.begin(), list.end(), sort_fn);
[] (ListEntry<T> const& a, ListEntry<T> const& b) { return a.text.compare(b.text) < 0; });
filterDisplay(); filterDisplay();
} }
@ -569,6 +568,9 @@ public:
} }
private: private:
static void clear_fn(ListEntry<T> &e) { e.selected = false; }
static bool sort_fn(ListEntry<T> const& a, ListEntry<T> const& b) { return a.text.compare(b.text) < 0; }
vector<ListEntry<T>> list; vector<ListEntry<T>> list;
vector<ListEntry<T>*> display_list; vector<ListEntry<T>*> display_list;
string search_string; string search_string;