Some fixups, mainly to support MinGW builds
This commit is contained in:
16
SConstruct
16
SConstruct
@@ -4,6 +4,9 @@ import os
|
||||
import subprocess
|
||||
|
||||
platform = ARGUMENTS.get('OS', Platform())
|
||||
toolset = ARGUMENTS.get('toolset', 'default')
|
||||
sixty_four = ARGUMENTS.get('64bit', false)
|
||||
arch = 'x86_64' if sixty_four else 'x86'
|
||||
|
||||
if str(platform) not in ("darwin", "win32"):
|
||||
print "Sorry, your platform is not supported."
|
||||
@@ -14,7 +17,10 @@ if str(platform) not in ("darwin", "win32"):
|
||||
|
||||
print 'Building for:', platform
|
||||
|
||||
env = Environment(TARGET_ARCH='x86',ENV=os.environ)
|
||||
if toolset != 'default':
|
||||
env = Environment(TARGET_ARCH=arch,ENV=os.environ, tools = [toolset])
|
||||
else:
|
||||
env = Environment(TARGET_ARCH=arch,ENV=os.environ)
|
||||
env.VariantDir('#build/obj', 'src')
|
||||
env.VariantDir('#build/obj/test', 'test')
|
||||
|
||||
@@ -38,7 +44,8 @@ if path.exists(".git"):
|
||||
env.Command('src/tools/gitrev.hpp', git_refs, gen_gitrev)
|
||||
else:
|
||||
# Zipped source downloads from github do not include the repo (probably a good thing)
|
||||
env.Command('src/tools/gitrev.hpp', '', """
|
||||
# TODO: This does not work on Windows
|
||||
env.Command('src/tools/gitrev.hpp', '', r"""
|
||||
echo -e "\n#define GIT_REVISION \"\"\n#define GIT_TAG \"\"\n#define GIT_TAG_REVISION \"\"\n" > #TARGET
|
||||
""")
|
||||
|
||||
@@ -196,13 +203,15 @@ if not env.GetOption('clean'):
|
||||
print "There's a problem with your compiler!"
|
||||
Exit(1)
|
||||
|
||||
if not conf.CheckLib('zlib' if str(platform) == "win32" else 'z'):
|
||||
if not conf.CheckLib('zlib' if (str(platform) == "win32" and 'mingw' not in env["TOOLS"]) else 'z'):
|
||||
print 'zlib must be installed!'
|
||||
Exit(1)
|
||||
|
||||
def check_lib(lib, disp, suffixes=[], versions=[]):
|
||||
if str(platform) == "win32" and lib.startswith("boost"):
|
||||
lib = "lib" + lib
|
||||
if "mingw" in env["TOOLS"] and lib.startswith("sfml"):
|
||||
lib = "lib" + lib
|
||||
possible_names = [lib]
|
||||
if str(platform) == "win32":
|
||||
if 'msvc' in env['TOOLS']:
|
||||
@@ -367,3 +376,4 @@ SConscript("build/pkg/SConscript")
|
||||
# Cleanup
|
||||
|
||||
env.Clean('.', 'build')
|
||||
env.Clean('.', '.sconsign.dblite')
|
||||
|
||||
@@ -34,7 +34,7 @@ elif str(platform) == "win32":
|
||||
game_sources.extend(Split("""
|
||||
boe.menus.win.cpp
|
||||
"""))
|
||||
game_sources.append(env.RES('#build/obj/BladesOfExile.res', '#rsrc/menus/BladesOfExile.rc'))
|
||||
game_sources.append(env.RES('#rsrc/menus/BladesOfExile.rc'))
|
||||
|
||||
boe = env.Program("#build/bin/Blades of Exile", common_sources + party_classes + game_sources)
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@ void add_outdoor_maps() {
|
||||
|
||||
void start_data_dump() {
|
||||
fs::path path = progDir/"Data Dump.txt";
|
||||
std::ofstream fout(path.c_str());
|
||||
std::ofstream fout(path.string().c_str());
|
||||
|
||||
fout << "Begin data dump:\n";
|
||||
fout << " Overall mode " << overall_mode << "\n";
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
#ifndef BoE_boe_menus_h
|
||||
#define BoE_boe_menus_h
|
||||
|
||||
// Needed for MinGW builds for some reason
|
||||
#ifdef FILE_OPEN
|
||||
#undef FILE_OPEN
|
||||
#endif
|
||||
|
||||
void init_menubar();
|
||||
void adjust_monst_menu();
|
||||
void init_spell_menus();
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <windows.h>
|
||||
#include <gl/GL.h>
|
||||
#undef HELP_INDEX // Except this one
|
||||
#undef FILE_OPEN
|
||||
|
||||
// This is the index of each menu on the menubar
|
||||
enum {
|
||||
|
||||
@@ -423,7 +423,9 @@ void cPlayer::sort_items() {
|
||||
item_priority[items[i].variety]) {
|
||||
no_swaps = false;
|
||||
std::swap(items[i + 1], items[i]);
|
||||
std::swap(equip[i + 1], equip[i]);
|
||||
auto temp_equip = equip[i];
|
||||
equip[i] = equip[i + 1];
|
||||
equip[i + 1] = temp_equip;
|
||||
if(weap_poisoned.slot == i + 1)
|
||||
weap_poisoned.slot--;
|
||||
else if(weap_poisoned.slot == i)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
Import("env")
|
||||
|
||||
env = env.Clone()
|
||||
env.Append(CXXFLAGS="-fpermissive")
|
||||
dlog_util = env.StaticLibrary("#build/lib/dlogutil", Glob("*.cpp") + Glob("xml-parser/*.cpp"))
|
||||
|
||||
Return("dlog_util")
|
||||
@@ -51,7 +51,7 @@ Cursor::Cursor(fs::path imgPath, float hotSpotX, float hotSpotY) {
|
||||
sf::Image gif;
|
||||
if(!gif.loadFromFile(imgPath.string())) {
|
||||
std::string error = "Error loading cursor from " + imgPath.string();
|
||||
throw std::exception(error.c_str());
|
||||
throw error;
|
||||
}
|
||||
// Calculate the AND and XOR masks
|
||||
HBITMAP cursorAnd = CreateCompatibleBitmap(GetDC(NULL), gif.getSize().x, gif.getSize().y);
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
|
||||
#if defined(_MSC_VER) && !defined(NDEBUG)
|
||||
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <windows.h>
|
||||
@@ -36,3 +38,5 @@ void set_debug_buffers() {
|
||||
std::cout.rdbuf(&dbg_buf);
|
||||
std::cerr.rdbuf(&dbg_err_buf);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -132,7 +132,7 @@ bool load_party(fs::path file_to_load, cUniverse& univ){
|
||||
}
|
||||
|
||||
bool load_party_v1(fs::path file_to_load, cUniverse& real_univ, bool town_restore, bool in_scen, bool maps_there, bool must_port){
|
||||
std::ifstream fin(file_to_load.c_str(), std::ios_base::binary);
|
||||
std::ifstream fin(file_to_load.string().c_str(), std::ios_base::binary);
|
||||
fin.seekg(3*sizeof(short),std::ios_base::beg); // skip the header, which is 6 bytes in the old format
|
||||
|
||||
legacy::party_record_type store_party;
|
||||
|
||||
@@ -968,11 +968,13 @@ bool operator==(const tessel_ref_t& a, const tessel_ref_t& b) {
|
||||
return a.key == b.key;
|
||||
}
|
||||
|
||||
template<> struct std::hash<tessel_ref_t> {
|
||||
namespace std {
|
||||
template<> struct hash<tessel_ref_t> {
|
||||
size_t operator()(tessel_ref_t key) const {
|
||||
return key.key;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
std::unordered_map<tessel_ref_t, tessel_t> tiling_reservoir;
|
||||
static int tessel_index = 0;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <fstream>
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
#include <iterator>
|
||||
#include <numeric>
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ void erase_if(ContainerT& items, const PredicateT& predicate) {
|
||||
// Case-insensitive string comparison seems to be semi-standard, but with different names.
|
||||
#if defined(__APPLE__)
|
||||
#define strnicmp strncasecmp
|
||||
#elif defined(_MSC_VER)
|
||||
#elif defined(_WIN32)
|
||||
#define strnicmp _strnicmp
|
||||
#else
|
||||
#error Missing strnicmp / strncasecmp
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
#include <windows.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
struct accel_table_t {
|
||||
std::vector<ACCEL> table;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
void set_pref(std::string keypath, bool value);
|
||||
bool get_bool_pref(std::string keypath, bool fallback = false);
|
||||
|
||||
@@ -41,7 +41,7 @@ void append_iarray_pref(std::string keypath, int value) {
|
||||
if(prefs.find(keypath) == prefs.end() || prefs[keypath].type() != typeid(iarray))
|
||||
prefs[keypath] = iarray{value};
|
||||
else {
|
||||
iarray& arr = boost::any_cast<iarray>(prefs[keypath]);
|
||||
iarray& arr = boost::any_cast<iarray&>(prefs[keypath]);
|
||||
arr.push_back(value);
|
||||
prefs[keypath] = arr;
|
||||
}
|
||||
@@ -49,7 +49,7 @@ void append_iarray_pref(std::string keypath, int value) {
|
||||
|
||||
std::vector<int> get_iarray_pref(std::string keypath) {
|
||||
if(prefs.find(keypath) == prefs.end()) return {};
|
||||
if(prefs[keypath].type() == typeid(iarray)) return boost::any_cast<iarray>(prefs[keypath]);
|
||||
if(prefs[keypath].type() == typeid(iarray)) return boost::any_cast<iarray&>(prefs[keypath]);
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ static bool save_prefs(fs::path fpath) {
|
||||
std::ofstream fout(fpath.string().c_str());
|
||||
for(auto& kv : prefs) {
|
||||
if(kv.second.type() == typeid(iarray)) {
|
||||
iarray& arr = boost::any_cast<iarray>(kv.second);
|
||||
const iarray& arr = boost::any_cast<iarray&>(kv.second);
|
||||
fout << kv.first << " = [";
|
||||
for(int i : arr) fout << i << ' ';
|
||||
fout.seekp(-1,std::ios::cur); // To overwrite the final space written in the loop
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace ResMgr {
|
||||
if(!fs::exists(fpath))
|
||||
throw xResMgrErr("Failed to load GIF cursor: " + fpath.string());
|
||||
int x = 0, y = 0, f_sz;
|
||||
std::ifstream fin(fpath.c_str(), std::ios::binary);
|
||||
std::ifstream fin(fpath.string().c_str(), std::ios::binary);
|
||||
fin.seekg(0, std::ios::end);
|
||||
f_sz = fin.tellg();
|
||||
fin.clear();
|
||||
@@ -99,7 +99,7 @@ namespace ResMgr {
|
||||
/// Each line in the file becomes one string in the resulting list.
|
||||
/// (Empty lines are included too.)
|
||||
template<> inline StringRsrc* resLoader<StringRsrc>::operator() (fs::path fpath) {
|
||||
std::ifstream fin(fpath.c_str());
|
||||
std::ifstream fin(fpath.string().c_str());
|
||||
if(fin.fail()) {
|
||||
std::cerr << std_fmterr << ": Error opening file";
|
||||
throw xResMgrErr("Failed to load string list: " + fpath.string());
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <algorithm>
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <cstring>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// For some bizarre reason, Visual Studio doesn't declare snprintf in <cstdio>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <SFML/Graphics/RenderWindow.hpp>
|
||||
#include <SFML/Graphics/Image.hpp>
|
||||
#include <sstream>
|
||||
#include <cmath>
|
||||
|
||||
extern sf::RenderWindow mainPtr;
|
||||
OPENFILENAMEA getParty, getScen, getRsrc, putParty, putScen, putRsrc;
|
||||
|
||||
Reference in New Issue
Block a user