diff options
author | eroen <eroen@occam.eroen.eu> | 2016-07-25 00:43:02 +0200 |
---|---|---|
committer | eroen <eroen@occam.eroen.eu> | 2016-07-25 00:55:20 +0200 |
commit | 8c635b2c191a2ad0e71c7b47dbe2d59f00eec2f2 (patch) | |
tree | da1e8d8f5e46d33e8a4a2999bee7bc2a55407c85 | |
parent | dwarf-fortress-0.43.03 - expliciy coreutils dep (diff) | |
download | eroen-8c635b2c191a2ad0e71c7b47dbe2d59f00eec2f2.tar.gz eroen-8c635b2c191a2ad0e71c7b47dbe2d59f00eec2f2.tar.bz2 eroen-8c635b2c191a2ad0e71c7b47dbe2d59f00eec2f2.zip |
dfhack-0.43.03.1 - bump
-rw-r--r-- | games-util/dfhack/dfhack-0.43.03.1.ebuild | 87 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack | 32 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack-0.43.03.1/01-respect.patch | 92 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack-0.43.03.1/02-respect-dfhack_lua_destination.patch | 1176 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack-0.43.03.1/03-respect-0.patch | 62 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack-0.43.03.1/04-respect-1.patch | 61 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack-0.43.03.1/05-introduce.patch | 570 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack-0.43.03.1/series | 6 | ||||
-rw-r--r-- | games-util/dfhack/files/dfhack-run | 9 |
9 files changed, 2095 insertions, 0 deletions
diff --git a/games-util/dfhack/dfhack-0.43.03.1.ebuild b/games-util/dfhack/dfhack-0.43.03.1.ebuild new file mode 100644 index 0000000..494a323 --- /dev/null +++ b/games-util/dfhack/dfhack-0.43.03.1.ebuild @@ -0,0 +1,87 @@ +# By eroen, 2012-2016 +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. + +EAPI=6 + +inherit versionator multilib git-r3 cmake-utils + +df_PV=$(get_version_component_range 1-3) + +DESCRIPTION="Memory hacking library for Dwarf Fortress and a set of tools that use it" +HOMEPAGE="http://github.com/DFHack/dfhack" +EGIT_REPO_URI="git://github.com/DFHack/dfhack.git https://github.com/DFHack/dfhack.git" +if [[ $PV == *.9999 ]]; then + EGIT_BRANCH="develop" +elif [[ $PV == *_alpha* ]]; then + EGIT_COMMIT="${PV/_alpha/-alpha}" +else + EGIT_COMMIT="$(replace_version_separator 3 "-r")" +fi + +# KEYWORDS="-* ~amd64" # ~x86 + +CMAKE_MIN_VERSION=2.8.0 +CMAKE_REMOVE_MODULES_LIST="FindCurses FindDoxygen CMakeVS10FindMake" + +LICENSE="ZLIB MIT BSD-2 BSD CC-BY-SA-3.0" +SLOT="0" +IUSE="" + +HDEPEND=" + >=sys-devel/gcc-4.5[multilib] + dev-lang/perl + dev-perl/XML-LibXML + dev-perl/XML-LibXSLT + dev-vcs/git + " +LIBRARY_DEPEND=" + sys-libs/zlib[abi_x86_32] + " +DEPEND="${LIBRARY_DEPEND} + ${HDEPEND}" +RDEPEND="${LIBRARY_DEPEND} + ~games-roguelike/dwarf-fortress-$df_PV" + +pkg_setup() { + multilib_toolchain_setup x86 +} + +PATCHES=( "$FILESDIR"/dfhack-$PV ) +src_prepare() { + default + cp "$FILESDIR"/dfhack{,-run} "$T" || die +} + +src_configure() { + local mycmakeargs=( + -DCMAKE_INSTALL_PREFIX=/opt/dfhack + -DDFHACK_DATA_DESTINATION=/opt/dfhack/hack + -DDFHACK_LUA_DESTINATION=/opt/dfhack/hack/lua + -DDFHACK_PLUGIN_DESTINATION=/opt/dfhack/hack/plugins + -DDFHACK_LIBRARY_DESTINATION=/opt/dfhack/hack + -DDFHACK_RUBY_DESTINATION=/opt/dfhack/hack/ruby + -DEXTERNAL_TINYXML=OFF + ) + + cmake-utils_src_configure +} + +DOCS="" +src_install() { + cmake-utils_src_install + + dobin "$T"/dfhack{,-run} +} + +pkg_postinst() { + elog "Due to Dwarf Fortress' special needs regarding working directory," + elog "specifying relative paths to DFHack plugins can give unintended results." + elog + elog "Your dfhack.init should be placed in \${HOME}/.dwarf-fortress ," + elog "otherwise the example configuration will be used." + elog + elog "To start DFHack, please run dfhack" +} diff --git a/games-util/dfhack/files/dfhack b/games-util/dfhack/files/dfhack new file mode 100644 index 0000000..22287af --- /dev/null +++ b/games-util/dfhack/files/dfhack @@ -0,0 +1,32 @@ +#!/bin/sh + +gamesdir=/opt/dwarf-fortress +dfhackdir=/opt/dfhack +install="$HOME/.dwarf-fortress" + +do_install() { + cp -rn "$gamesdir"/data "$install"/ + # DF gets unhappy when this is out of sync + cp -f "$gamesdir"/data/index "$install"/data/ + cp -rsn "$gamesdir"/* "$install"/ +} + +do_dfhack_install() { + cp -rn "$dfhackdir"/dfhack-config "$install"/ + cp -ns "$dfhackdir"/dfhack.init-example "$install"/ +} + +if [ -d "$install" ]; then + # delete dangling symlinks + find -L "$install/" -type l -delete + # ignore "are the same file" errors + do_install 2>/dev/null +else + mkdir "$install" || exit + do_install || exit +fi + +cd "$install" || exit +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$dfhackdir/hack/lib:$dfhackdir/hack" +export LD_PRELOAD="${LD_PRELOAD:+$LD_PRELOAD:}$dfhackdir/hack/libdfhack.so" +exec ./libs/Dwarf_Fortress "$@" diff --git a/games-util/dfhack/files/dfhack-0.43.03.1/01-respect.patch b/games-util/dfhack/files/dfhack-0.43.03.1/01-respect.patch new file mode 100644 index 0000000..05f3d5a --- /dev/null +++ b/games-util/dfhack/files/dfhack-0.43.03.1/01-respect.patch @@ -0,0 +1,92 @@ +Respect DFHACK_DATA_DESTINATION + +From: eroen <eroen@occam.eroen.eu> + + +--- + CMakeLists.txt | 2 +- + library/CMakeLists.txt | 3 +++ + library/Core.cpp | 14 ++++++++++---- + 3 files changed, 14 insertions(+), 5 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9b9b985..93ea2e6 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -125,7 +125,7 @@ ENDIF() + # external tools will be installed here: + SET(DFHACK_BINARY_DESTINATION .) + # dfhack data goes here: +-SET(DFHACK_DATA_DESTINATION hack) ++SET(DFHACK_DATA_DESTINATION hack CACHE INTERNAL "") + # plugin libs go here: + SET(DFHACK_PLUGIN_DESTINATION hack/plugins) + # dfhack header files go here: +diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt +index 54300ec..28875b0 100644 +--- a/library/CMakeLists.txt ++++ b/library/CMakeLists.txt +@@ -78,6 +78,9 @@ RemoteServer.cpp + RemoteTools.cpp + ) + ++set_property( SOURCE "Core.cpp" APPEND PROPERTY COMPILE_DEFINITIONS ++ "DFHACK_DATA_DESTINATION=\"${DFHACK_DATA_DESTINATION}\"" ) ++ + SET(MAIN_SOURCES_WINDOWS + Console-windows.cpp + Hooks-windows.cpp +diff --git a/library/Core.cpp b/library/Core.cpp +index f5bc9d4..d71a26a 100644 +--- a/library/Core.cpp ++++ b/library/Core.cpp +@@ -75,6 +75,7 @@ using namespace DFHack; + #include <stdio.h> + #include <iomanip> + #include <stdlib.h> ++#include <string.h> + #include <fstream> + #include "tinythread.h" + #include "md5wrapper.h" +@@ -375,7 +376,7 @@ static command_result runRubyScript(color_ostream &out, PluginManager *plug_mgr, + rbcmd += "'" + args[i] + "', "; + rbcmd += "]\n"; + +- rbcmd += "catch(:script_finished) { load './hack/scripts/" + name + ".rb' }"; ++ rbcmd += "catch(:script_finished) { load '" DFHACK_DATA_DESTINATION "/scripts/" + name + ".rb' }"; + + return plug_mgr->ruby->eval_ruby(out, rbcmd.c_str()); + } +@@ -493,6 +494,7 @@ void Core::getScriptPaths(std::vector<std::string> *dest) + } + dest->push_back(df_path + "/raw/scripts"); + dest->push_back(df_path + "/hack/scripts"); ++ dest->push_back(DFHACK_DATA_DESTINATION "/scripts"); + for (auto it = script_paths[1].begin(); it != script_paths[1].end(); ++it) + dest->push_back(*it); + } +@@ -1440,7 +1442,11 @@ void Core::fatal (std::string output) + std::string Core::getHackPath() + { + #ifdef LINUX_BUILD +- return p->getPath() + "/hack/"; ++ if(strncmp(DFHACK_DATA_DESTINATION, "hack", 5) == 0) ++ // This is the default value ++ return p->getPath() + "/hack/"; ++ else ++ return DFHACK_DATA_DESTINATION "/"; + #else + return p->getPath() + "\\hack\\"; + #endif +@@ -1459,9 +1465,9 @@ bool Core::Init() + + // find out what we are... + #ifdef LINUX_BUILD +- const char * path = "hack/symbols.xml"; ++ const char * path = DFHACK_DATA_DESTINATION "/symbols.xml"; + #else +- const char * path = "hack\\symbols.xml"; ++ const char * path = DFHACK_DATA_DESTINATION "\\symbols.xml"; + #endif + vif = new DFHack::VersionInfoFactory(); + cerr << "Identifying DF version.\n"; diff --git a/games-util/dfhack/files/dfhack-0.43.03.1/02-respect-dfhack_lua_destination.patch b/games-util/dfhack/files/dfhack-0.43.03.1/02-respect-dfhack_lua_destination.patch new file mode 100644 index 0000000..3134056 --- /dev/null +++ b/games-util/dfhack/files/dfhack-0.43.03.1/02-respect-dfhack_lua_destination.patch @@ -0,0 +1,1176 @@ +respect DFHACK_LUA_DESTINATION + +From: eroen <eroen@occam.eroen.eu> + + +--- + CMakeLists.txt | 3 + depends/lua/CMakeLists.txt | 5 + depends/lua/include/luaconf.h | 553 -------------------------------------- + depends/lua/include/luaconf.h.in | 553 ++++++++++++++++++++++++++++++++++++++ + 4 files changed, 559 insertions(+), 555 deletions(-) + delete mode 100644 depends/lua/include/luaconf.h + create mode 100644 depends/lua/include/luaconf.h.in + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 93ea2e6..300f7a5 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -131,7 +131,7 @@ SET(DFHACK_PLUGIN_DESTINATION hack/plugins) + # dfhack header files go here: + SET(DFHACK_INCLUDES_DESTINATION hack/include) + # dfhack lua files go here: +-SET(DFHACK_LUA_DESTINATION hack/lua) ++SET(DFHACK_LUA_DESTINATION hack/lua CACHE INTERNAL "") + # the windows .lib file goes here: + SET(DFHACK_DEVLIB_DESTINATION hack) + +@@ -183,6 +183,7 @@ else() + endif() + find_package(ZLIB REQUIRED) + include_directories(depends/protobuf) ++include_directories("${CMAKE_CURRENT_BINARY_DIR}/depends/lua/include") + include_directories(depends/lua/include) + include_directories(depends/md5) + include_directories(depends/jsoncpp) +diff --git a/depends/lua/CMakeLists.txt b/depends/lua/CMakeLists.txt +index b77bce6..3fa0859 100644 +--- a/depends/lua/CMakeLists.txt ++++ b/depends/lua/CMakeLists.txt +@@ -15,6 +15,10 @@ IF(UNIX) + SET(CMAKE_C_FLAGS "-m32") + ENDIF() + ++configure_file("include/luaconf.h.in" "include/luaconf.h" @ONLY) ++SET_SOURCE_FILES_PROPERTIES("${CMAKE_CURRENT_BINARY_DIR}/include" PROPERTIES HEADER_FILE_ONLY TRUE) ++include_directories("${CMAKE_CURRENT_BINARY_DIR}/include") ++ + SET (HDR_LIBLUA + include/lapi.h + include/lauxlib.h +@@ -35,7 +39,6 @@ include/lstring.h + include/ltable.h + include/ltm.h + include/lua.h +-include/luaconf.h + include/lualib.h + include/lundump.h + include/lvm.h +diff --git a/depends/lua/include/luaconf.h b/depends/lua/include/luaconf.h +deleted file mode 100644 +index af09ffb..0000000 +--- a/depends/lua/include/luaconf.h ++++ /dev/null +@@ -1,553 +0,0 @@ +-/* +-** $Id: luaconf.h,v 1.176.1.1 2013/04/12 18:48:47 roberto Exp $ +-** Configuration file for Lua +-** See Copyright Notice in lua.h +-*/ +- +- +-#ifndef lconfig_h +-#define lconfig_h +- +-#include <limits.h> +-#include <stddef.h> +- +- +-/* +-** ================================================================== +-** Search for "@@" to find all configurable definitions. +-** =================================================================== +-*/ +- +- +-/* +-@@ LUA_ANSI controls the use of non-ansi features. +-** CHANGE it (define it) if you want Lua to avoid the use of any +-** non-ansi feature or library. +-*/ +-#if !defined(LUA_ANSI) && defined(__STRICT_ANSI__) +-#define LUA_ANSI +-#endif +- +- +-#if !defined(LUA_ANSI) && defined(_WIN32) && !defined(_WIN32_WCE) +-#define LUA_WIN /* enable goodies for regular Windows platforms */ +-#endif +- +-#if defined(LUA_WIN) +-#define LUA_DL_DLL +-#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ +-#endif +- +- +- +-#if defined(LUA_USE_LINUX) +-#define LUA_USE_POSIX +-#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ +-#define LUA_USE_READLINE /* needs some extra libraries */ +-#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */ +-#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ +-#define LUA_USE_LONGLONG /* assume support for long long */ +-#endif +- +-#if defined(LUA_USE_MACOSX) +-#define LUA_USE_POSIX +-#define LUA_USE_DLOPEN /* does not need -ldl */ +-#define LUA_USE_READLINE /* needs an extra library: -lreadline */ +-#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */ +-#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ +-#define LUA_USE_LONGLONG /* assume support for long long */ +-#endif +- +- +- +-/* +-@@ LUA_USE_POSIX includes all functionality listed as X/Open System +-@* Interfaces Extension (XSI). +-** CHANGE it (define it) if your system is XSI compatible. +-*/ +-#if defined(LUA_USE_POSIX) +-#define LUA_USE_MKSTEMP +-#define LUA_USE_ISATTY +-#define LUA_USE_POPEN +-#define LUA_USE_ULONGJMP +-#define LUA_USE_GMTIME_R +-#endif +- +- +- +-/* +-@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for +-@* Lua libraries. +-@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for +-@* C libraries. +-** CHANGE them if your machine has a non-conventional directory +-** hierarchy or if you want to install your libraries in +-** non-conventional directories. +-*/ +-#if defined(_WIN32) /* { */ +-/* +-** In Windows, any exclamation mark ('!') in the path is replaced by the +-** path of the directory of the executable file of the current process. +-*/ +-#define LUA_LDIR "!\\hack\\lua\\" +-#define LUA_CDIR "!\\" +-#define LUA_PATH_DEFAULT \ +- LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" ".\\?.lua" +-#define LUA_CPATH_DEFAULT \ +- LUA_CDIR"?.dll;" ".\\?.dll" +- +-#else /* }{ */ +- +-#define LUA_LDIR "./hack/lua/" +-#define LUA_CDIR "./hack/" +-#define LUA_PATH_DEFAULT \ +- LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" "./?.lua" +-#define LUA_CPATH_DEFAULT \ +- LUA_CDIR"?.so;" "./?.so" +-#endif /* } */ +- +-#define LUA_PATH "DFHACK_LUA_PATH" +-#define LUA_CPATH "DFHACK_LUA_CPATH" +- +-/* +-@@ LUA_DIRSEP is the directory separator (for submodules). +-** CHANGE it if your machine does not use "/" as the directory separator +-** and is not Windows. (On Windows Lua automatically uses "\".) +-*/ +-#if defined(_WIN32) +-#define LUA_DIRSEP "\\" +-#else +-#define LUA_DIRSEP "/" +-#endif +- +- +-/* +-@@ LUA_ENV is the name of the variable that holds the current +-@@ environment, used to access global names. +-** CHANGE it if you do not like this name. +-*/ +-#define LUA_ENV "_ENV" +- +- +-/* +-@@ LUA_API is a mark for all core API functions. +-@@ LUALIB_API is a mark for all auxiliary library functions. +-@@ LUAMOD_API is a mark for all standard library opening functions. +-** CHANGE them if you need to define those functions in some special way. +-** For instance, if you want to create one Windows DLL with the core and +-** the libraries, you may want to use the following definition (define +-** LUA_BUILD_AS_DLL to get it). +-*/ +-#if defined(LUA_BUILD_AS_DLL) /* { */ +- +-#if defined(_MSC_VER) +-#if defined(LUA_CORE) || defined(LUA_LIB) /* { */ +-#define LUA_API __declspec(dllexport) +-#else /* }{ */ +-#define LUA_API __declspec(dllimport) +-#endif /* } */ +-#else +-#define LUA_API __attribute__ ((visibility("default"))) +-#endif +- +-#else /* }{ */ +- +-#define LUA_API extern +- +-#endif /* } */ +- +- +-/* more often than not the libs go together with the core */ +-#define LUALIB_API LUA_API +-#define LUAMOD_API LUALIB_API +- +- +-/* +-@@ LUAI_FUNC is a mark for all extern functions that are not to be +-@* exported to outside modules. +-@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables +-@* that are not to be exported to outside modules (LUAI_DDEF for +-@* definitions and LUAI_DDEC for declarations). +-** CHANGE them if you need to mark them in some special way. Elf/gcc +-** (versions 3.2 and later) mark them as "hidden" to optimize access +-** when Lua is compiled as a shared library. Not all elf targets support +-** this attribute. Unfortunately, gcc does not offer a way to check +-** whether the target offers that support, and those without support +-** give a warning about it. To avoid these warnings, change to the +-** default definition. +-*/ +-#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ +- defined(__ELF__) /* { */ +-#define LUAI_FUNC __attribute__((visibility("hidden"))) extern +-#define LUAI_DDEC LUAI_FUNC +-#define LUAI_DDEF /* empty */ +- +-#else /* }{ */ +-#define LUAI_FUNC extern +-#define LUAI_DDEC extern +-#define LUAI_DDEF /* empty */ +-#endif /* } */ +- +- +- +-/* +-@@ LUA_QL describes how error messages quote program elements. +-** CHANGE it if you want a different appearance. +-*/ +-#define LUA_QL(x) "'" x "'" +-#define LUA_QS LUA_QL("%s") +- +- +-/* +-@@ LUA_IDSIZE gives the maximum size for the description of the source +-@* of a function in debug information. +-** CHANGE it if you want a different size. +-*/ +-#define LUA_IDSIZE 60 +- +- +-/* +-@@ luai_writestring/luai_writeline define how 'print' prints its results. +-** They are only used in libraries and the stand-alone program. (The #if +-** avoids including 'stdio.h' everywhere.) +-*/ +-#if defined(LUA_LIB) || defined(lua_c) +-#include <stdio.h> +-#define luai_writestring(s,l) fwrite((s), sizeof(char), (l), stdout) +-#define luai_writeline() (luai_writestring("\n", 1), fflush(stdout)) +-#endif +- +-/* +-@@ luai_writestringerror defines how to print error messages. +-** (A format string with one argument is enough for Lua...) +-*/ +-#define luai_writestringerror(s,p) \ +- (fprintf(stderr, (s), (p)), fflush(stderr)) +- +- +-/* +-@@ LUAI_MAXSHORTLEN is the maximum length for short strings, that is, +-** strings that are internalized. (Cannot be smaller than reserved words +-** or tags for metamethods, as these strings must be internalized; +-** #("function") = 8, #("__newindex") = 10.) +-*/ +-#define LUAI_MAXSHORTLEN 40 +- +- +- +-/* +-** {================================================================== +-** Compatibility with previous versions +-** =================================================================== +-*/ +- +-/* +-@@ LUA_COMPAT_ALL controls all compatibility options. +-** You can define it to get all options, or change specific options +-** to fit your specific needs. +-*/ +-#if defined(LUA_COMPAT_ALL) /* { */ +- +-/* +-@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'. +-** You can replace it with 'table.unpack'. +-*/ +-#define LUA_COMPAT_UNPACK +- +-/* +-@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'. +-** You can replace it with 'package.searchers'. +-*/ +-#define LUA_COMPAT_LOADERS +- +-/* +-@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall. +-** You can call your C function directly (with light C functions). +-*/ +-#define lua_cpcall(L,f,u) \ +- (lua_pushcfunction(L, (f)), \ +- lua_pushlightuserdata(L,(u)), \ +- lua_pcall(L,1,0,0)) +- +- +-/* +-@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library. +-** You can rewrite 'log10(x)' as 'log(x, 10)'. +-*/ +-#define LUA_COMPAT_LOG10 +- +-/* +-@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base +-** library. You can rewrite 'loadstring(s)' as 'load(s)'. +-*/ +-#define LUA_COMPAT_LOADSTRING +- +-/* +-@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library. +-*/ +-#define LUA_COMPAT_MAXN +- +-/* +-@@ The following macros supply trivial compatibility for some +-** changes in the API. The macros themselves document how to +-** change your code to avoid using them. +-*/ +-#define lua_strlen(L,i) lua_rawlen(L, (i)) +- +-#define lua_objlen(L,i) lua_rawlen(L, (i)) +- +-#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) +-#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) +- +-/* +-@@ LUA_COMPAT_MODULE controls compatibility with previous +-** module functions 'module' (Lua) and 'luaL_register' (C). +-*/ +-#define LUA_COMPAT_MODULE +- +-#endif /* } */ +- +-/* }================================================================== */ +- +- +- +-/* +-@@ LUAI_BITSINT defines the number of bits in an int. +-** CHANGE here if Lua cannot automatically detect the number of bits of +-** your machine. Probably you do not need to change this. +-*/ +-/* avoid overflows in comparison */ +-#if INT_MAX-20 < 32760 /* { */ +-#define LUAI_BITSINT 16 +-#elif INT_MAX > 2147483640L /* }{ */ +-/* int has at least 32 bits */ +-#define LUAI_BITSINT 32 +-#else /* }{ */ +-#error "you must define LUA_BITSINT with number of bits in an integer" +-#endif /* } */ +- +- +-/* +-@@ LUA_INT32 is an signed integer with exactly 32 bits. +-@@ LUAI_UMEM is an unsigned integer big enough to count the total +-@* memory used by Lua. +-@@ LUAI_MEM is a signed integer big enough to count the total memory +-@* used by Lua. +-** CHANGE here if for some weird reason the default definitions are not +-** good enough for your machine. Probably you do not need to change +-** this. +-*/ +-#if LUAI_BITSINT >= 32 /* { */ +-#define LUA_INT32 int +-#define LUAI_UMEM size_t +-#define LUAI_MEM ptrdiff_t +-#else /* }{ */ +-/* 16-bit ints */ +-#define LUA_INT32 long +-#define LUAI_UMEM unsigned long +-#define LUAI_MEM long +-#endif /* } */ +- +- +-/* +-@@ LUAI_MAXSTACK limits the size of the Lua stack. +-** CHANGE it if you need a different limit. This limit is arbitrary; +-** its only purpose is to stop Lua to consume unlimited stack +-** space (and to reserve some numbers for pseudo-indices). +-*/ +-#if LUAI_BITSINT >= 32 +-#define LUAI_MAXSTACK 1000000 +-#else +-#define LUAI_MAXSTACK 15000 +-#endif +- +-/* reserve some space for error handling */ +-#define LUAI_FIRSTPSEUDOIDX (-LUAI_MAXSTACK - 1000) +- +- +- +- +-/* +-@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. +-** CHANGE it if it uses too much C-stack space. +-*/ +-#define LUAL_BUFFERSIZE BUFSIZ +- +- +- +- +-/* +-** {================================================================== +-@@ LUA_NUMBER is the type of numbers in Lua. +-** CHANGE the following definitions only if you want to build Lua +-** with a number type different from double. You may also need to +-** change lua_number2int & lua_number2integer. +-** =================================================================== +-*/ +- +-#define LUA_NUMBER_DOUBLE +-#define LUA_NUMBER double +- +-/* +-@@ LUAI_UACNUMBER is the result of an 'usual argument conversion' +-@* over a number. +-*/ +-#define LUAI_UACNUMBER double +- +- +-/* +-@@ LUA_NUMBER_SCAN is the format for reading numbers. +-@@ LUA_NUMBER_FMT is the format for writing numbers. +-@@ lua_number2str converts a number to a string. +-@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. +-*/ +-#define LUA_NUMBER_SCAN "%lf" +-#define LUA_NUMBER_FMT "%.14g" +-#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) +-#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ +- +- +-/* +-@@ l_mathop allows the addition of an 'l' or 'f' to all math operations +-*/ +-#define l_mathop(x) (x) +- +- +-/* +-@@ lua_str2number converts a decimal numeric string to a number. +-@@ lua_strx2number converts an hexadecimal numeric string to a number. +-** In C99, 'strtod' does both conversions. C89, however, has no function +-** to convert floating hexadecimal strings to numbers. For these +-** systems, you can leave 'lua_strx2number' undefined and Lua will +-** provide its own implementation. +-*/ +-#define lua_str2number(s,p) strtod((s), (p)) +- +-#if defined(LUA_USE_STRTODHEX) +-#define lua_strx2number(s,p) strtod((s), (p)) +-#endif +- +- +-/* +-@@ The luai_num* macros define the primitive operations over numbers. +-*/ +- +-/* the following operations need the math library */ +-#if defined(lobject_c) || defined(lvm_c) +-#include <math.h> +-#define luai_nummod(L,a,b) ((a) - l_mathop(floor)((a)/(b))*(b)) +-#define luai_numpow(L,a,b) (l_mathop(pow)(a,b)) +-#endif +- +-/* these are quite standard operations */ +-#if defined(LUA_CORE) +-#define luai_numadd(L,a,b) ((a)+(b)) +-#define luai_numsub(L,a,b) ((a)-(b)) +-#define luai_nummul(L,a,b) ((a)*(b)) +-#define luai_numdiv(L,a,b) ((a)/(b)) +-#define luai_numunm(L,a) (-(a)) +-#define luai_numeq(a,b) ((a)==(b)) +-#define luai_numlt(L,a,b) ((a)<(b)) +-#define luai_numle(L,a,b) ((a)<=(b)) +-#define luai_numisnan(L,a) (!luai_numeq((a), (a))) +-#endif +- +- +- +-/* +-@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. +-** CHANGE that if ptrdiff_t is not adequate on your machine. (On most +-** machines, ptrdiff_t gives a good choice between int or long.) +-*/ +-#define LUA_INTEGER ptrdiff_t +- +-/* +-@@ LUA_UNSIGNED is the integral type used by lua_pushunsigned/lua_tounsigned. +-** It must have at least 32 bits. +-*/ +-#define LUA_UNSIGNED unsigned LUA_INT32 +- +- +- +-/* +-** Some tricks with doubles +-*/ +- +-#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) /* { */ +-/* +-** The next definitions activate some tricks to speed up the +-** conversion from doubles to integer types, mainly to LUA_UNSIGNED. +-** +-@@ LUA_MSASMTRICK uses Microsoft assembler to avoid clashes with a +-** DirectX idiosyncrasy. +-** +-@@ LUA_IEEE754TRICK uses a trick that should work on any machine +-** using IEEE754 with a 32-bit integer type. +-** +-@@ LUA_IEEELL extends the trick to LUA_INTEGER; should only be +-** defined when LUA_INTEGER is a 32-bit integer. +-** +-@@ LUA_IEEEENDIAN is the endianness of doubles in your machine +-** (0 for little endian, 1 for big endian); if not defined, Lua will +-** check it dynamically for LUA_IEEE754TRICK (but not for LUA_NANTRICK). +-** +-@@ LUA_NANTRICK controls the use of a trick to pack all types into +-** a single double value, using NaN values to represent non-number +-** values. The trick only works on 32-bit machines (ints and pointers +-** are 32-bit values) with numbers represented as IEEE 754-2008 doubles +-** with conventional endianess (12345678 or 87654321), in CPUs that do +-** not produce signaling NaN values (all NaNs are quiet). +-*/ +- +-/* Microsoft compiler on a Pentium (32 bit) ? */ +-#if defined(LUA_WIN) && defined(_MSC_VER) && defined(_M_IX86) /* { */ +- +-#define LUA_MSASMTRICK +-#define LUA_IEEEENDIAN 0 +-#define LUA_NANTRICK +- +- +-/* pentium 32 bits? */ +-#elif defined(__i386__) || defined(__i386) || defined(__X86__) /* }{ */ +- +-#define LUA_IEEE754TRICK +-#define LUA_IEEELL +-#define LUA_IEEEENDIAN 0 +-#define LUA_NANTRICK +- +-/* pentium 64 bits? */ +-#elif defined(__x86_64) /* }{ */ +- +-#define LUA_IEEE754TRICK +-#define LUA_IEEEENDIAN 0 +- +-#elif defined(__POWERPC__) || defined(__ppc__) /* }{ */ +- +-#define LUA_IEEE754TRICK +-#define LUA_IEEEENDIAN 1 +- +-#else /* }{ */ +- +-/* assume IEEE754 and a 32-bit integer type */ +-#define LUA_IEEE754TRICK +- +-#endif /* } */ +- +-#endif /* } */ +- +-/* }================================================================== */ +- +- +- +- +-/* =================================================================== */ +- +-/* +-** Local configuration. You can use this space to add your redefinitions +-** without modifying the main part of the file. +-*/ +- +- +- +-#endif +- +diff --git a/depends/lua/include/luaconf.h.in b/depends/lua/include/luaconf.h.in +new file mode 100644 +index 0000000..e6d08b4 +--- /dev/null ++++ b/depends/lua/include/luaconf.h.in +@@ -0,0 +1,553 @@ ++/* ++** $Id: luaconf.h,v 1.176.1.1 2013/04/12 18:48:47 roberto Exp $ ++** Configuration file for Lua ++** See Copyright Notice in lua.h ++*/ ++ ++ ++#ifndef lconfig_h ++#define lconfig_h ++ ++#include <limits.h> ++#include <stddef.h> ++ ++ ++/* ++** ================================================================== ++** Search for "@@" to find all configurable definitions. ++** =================================================================== ++*/ ++ ++ ++/* ++@@ LUA_ANSI controls the use of non-ansi features. ++** CHANGE it (define it) if you want Lua to avoid the use of any ++** non-ansi feature or library. ++*/ ++#if !defined(LUA_ANSI) && defined(__STRICT_ANSI__) ++#define LUA_ANSI ++#endif ++ ++ ++#if !defined(LUA_ANSI) && defined(_WIN32) && !defined(_WIN32_WCE) ++#define LUA_WIN /* enable goodies for regular Windows platforms */ ++#endif ++ ++#if defined(LUA_WIN) ++#define LUA_DL_DLL ++#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ ++#endif ++ ++ ++ ++#if defined(LUA_USE_LINUX) ++#define LUA_USE_POSIX ++#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ ++#define LUA_USE_READLINE /* needs some extra libraries */ ++#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */ ++#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ ++#define LUA_USE_LONGLONG /* assume support for long long */ ++#endif ++ ++#if defined(LUA_USE_MACOSX) ++#define LUA_USE_POSIX ++#define LUA_USE_DLOPEN /* does not need -ldl */ ++#define LUA_USE_READLINE /* needs an extra library: -lreadline */ ++#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */ ++#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ ++#define LUA_USE_LONGLONG /* assume support for long long */ ++#endif ++ ++ ++ ++/* ++@@ LUA_USE_POSIX includes all functionality listed as X/Open System ++@* Interfaces Extension (XSI). ++** CHANGE it (define it) if your system is XSI compatible. ++*/ ++#if defined(LUA_USE_POSIX) ++#define LUA_USE_MKSTEMP ++#define LUA_USE_ISATTY ++#define LUA_USE_POPEN ++#define LUA_USE_ULONGJMP ++#define LUA_USE_GMTIME_R ++#endif ++ ++ ++ ++/* ++@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for ++@* Lua libraries. ++@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for ++@* C libraries. ++** CHANGE them if your machine has a non-conventional directory ++** hierarchy or if you want to install your libraries in ++** non-conventional directories. ++*/ ++#if defined(_WIN32) /* { */ ++/* ++** In Windows, any exclamation mark ('!') in the path is replaced by the ++** path of the directory of the executable file of the current process. ++*/ ++#define LUA_LDIR "!\\hack\\lua\\" ++#define LUA_CDIR "!\\" ++#define LUA_PATH_DEFAULT \ ++ LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" ".\\?.lua" ++#define LUA_CPATH_DEFAULT \ ++ LUA_CDIR"?.dll;" ".\\?.dll" ++ ++#else /* }{ */ ++ ++#define LUA_LDIR "@DFHACK_LUA_DESTINATION@" "/" ++#define LUA_CDIR "./hack/" ++#define LUA_PATH_DEFAULT \ ++ LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" "./?.lua" ++#define LUA_CPATH_DEFAULT \ ++ LUA_CDIR"?.so;" "./?.so" ++#endif /* } */ ++ ++#define LUA_PATH "DFHACK_LUA_PATH" ++#define LUA_CPATH "DFHACK_LUA_CPATH" ++ ++/* ++@@ LUA_DIRSEP is the directory separator (for submodules). ++** CHANGE it if your machine does not use "/" as the directory separator ++** and is not Windows. (On Windows Lua automatically uses "\".) ++*/ ++#if defined(_WIN32) ++#define LUA_DIRSEP "\\" ++#else ++#define LUA_DIRSEP "/" ++#endif ++ ++ ++/* ++@@ LUA_ENV is the name of the variable that holds the current ++@@ environment, used to access global names. ++** CHANGE it if you do not like this name. ++*/ ++#define LUA_ENV "_ENV" ++ ++ ++/* ++@@ LUA_API is a mark for all core API functions. ++@@ LUALIB_API is a mark for all auxiliary library functions. ++@@ LUAMOD_API is a mark for all standard library opening functions. ++** CHANGE them if you need to define those functions in some special way. ++** For instance, if you want to create one Windows DLL with the core and ++** the libraries, you may want to use the following definition (define ++** LUA_BUILD_AS_DLL to get it). ++*/ ++#if defined(LUA_BUILD_AS_DLL) /* { */ ++ ++#if defined(_MSC_VER) ++#if defined(LUA_CORE) || defined(LUA_LIB) /* { */ ++#define LUA_API __declspec(dllexport) ++#else /* }{ */ ++#define LUA_API __declspec(dllimport) ++#endif /* } */ ++#else ++#define LUA_API __attribute__ ((visibility("default"))) ++#endif ++ ++#else /* }{ */ ++ ++#define LUA_API extern ++ ++#endif /* } */ ++ ++ ++/* more often than not the libs go together with the core */ ++#define LUALIB_API LUA_API ++#define LUAMOD_API LUALIB_API ++ ++ ++/* ++@@ LUAI_FUNC is a mark for all extern functions that are not to be ++@* exported to outside modules. ++@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables ++@* that are not to be exported to outside modules (LUAI_DDEF for ++@* definitions and LUAI_DDEC for declarations). ++** CHANGE them if you need to mark them in some special way. Elf/gcc ++** (versions 3.2 and later) mark them as "hidden" to optimize access ++** when Lua is compiled as a shared library. Not all elf targets support ++** this attribute. Unfortunately, gcc does not offer a way to check ++** whether the target offers that support, and those without support ++** give a warning about it. To avoid these warnings, change to the ++** default definition. ++*/ ++#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ ++ defined(__ELF__) /* { */ ++#define LUAI_FUNC __attribute__((visibility("hidden"))) extern ++#define LUAI_DDEC LUAI_FUNC ++#define LUAI_DDEF /* empty */ ++ ++#else /* }{ */ ++#define LUAI_FUNC extern ++#define LUAI_DDEC extern ++#define LUAI_DDEF /* empty */ ++#endif /* } */ ++ ++ ++ ++/* ++@@ LUA_QL describes how error messages quote program elements. ++** CHANGE it if you want a different appearance. ++*/ ++#define LUA_QL(x) "'" x "'" ++#define LUA_QS LUA_QL("%s") ++ ++ ++/* ++@@ LUA_IDSIZE gives the maximum size for the description of the source ++@* of a function in debug information. ++** CHANGE it if you want a different size. ++*/ ++#define LUA_IDSIZE 60 ++ ++ ++/* ++@@ luai_writestring/luai_writeline define how 'print' prints its results. ++** They are only used in libraries and the stand-alone program. (The #if ++** avoids including 'stdio.h' everywhere.) ++*/ ++#if defined(LUA_LIB) || defined(lua_c) ++#include <stdio.h> ++#define luai_writestring(s,l) fwrite((s), sizeof(char), (l), stdout) ++#define luai_writeline() (luai_writestring("\n", 1), fflush(stdout)) ++#endif ++ ++/* ++@@ luai_writestringerror defines how to print error messages. ++** (A format string with one argument is enough for Lua...) ++*/ ++#define luai_writestringerror(s,p) \ ++ (fprintf(stderr, (s), (p)), fflush(stderr)) ++ ++ ++/* ++@@ LUAI_MAXSHORTLEN is the maximum length for short strings, that is, ++** strings that are internalized. (Cannot be smaller than reserved words ++** or tags for metamethods, as these strings must be internalized; ++** #("function") = 8, #("__newindex") = 10.) ++*/ ++#define LUAI_MAXSHORTLEN 40 ++ ++ ++ ++/* ++** {================================================================== ++** Compatibility with previous versions ++** =================================================================== ++*/ ++ ++/* ++@@ LUA_COMPAT_ALL controls all compatibility options. ++** You can define it to get all options, or change specific options ++** to fit your specific needs. ++*/ ++#if defined(LUA_COMPAT_ALL) /* { */ ++ ++/* ++@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'. ++** You can replace it with 'table.unpack'. ++*/ ++#define LUA_COMPAT_UNPACK ++ ++/* ++@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'. ++** You can replace it with 'package.searchers'. ++*/ ++#define LUA_COMPAT_LOADERS ++ ++/* ++@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall. ++** You can call your C function directly (with light C functions). ++*/ ++#define lua_cpcall(L,f,u) \ ++ (lua_pushcfunction(L, (f)), \ ++ lua_pushlightuserdata(L,(u)), \ ++ lua_pcall(L,1,0,0)) ++ ++ ++/* ++@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library. ++** You can rewrite 'log10(x)' as 'log(x, 10)'. ++*/ ++#define LUA_COMPAT_LOG10 ++ ++/* ++@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base ++** library. You can rewrite 'loadstring(s)' as 'load(s)'. ++*/ ++#define LUA_COMPAT_LOADSTRING ++ ++/* ++@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library. ++*/ ++#define LUA_COMPAT_MAXN ++ ++/* ++@@ The following macros supply trivial compatibility for some ++** changes in the API. The macros themselves document how to ++** change your code to avoid using them. ++*/ ++#define lua_strlen(L,i) lua_rawlen(L, (i)) ++ ++#define lua_objlen(L,i) lua_rawlen(L, (i)) ++ ++#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) ++#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) ++ ++/* ++@@ LUA_COMPAT_MODULE controls compatibility with previous ++** module functions 'module' (Lua) and 'luaL_register' (C). ++*/ ++#define LUA_COMPAT_MODULE ++ ++#endif /* } */ ++ ++/* }================================================================== */ ++ ++ ++ ++/* ++@@ LUAI_BITSINT defines the number of bits in an int. ++** CHANGE here if Lua cannot automatically detect the number of bits of ++** your machine. Probably you do not need to change this. ++*/ ++/* avoid overflows in comparison */ ++#if INT_MAX-20 < 32760 /* { */ ++#define LUAI_BITSINT 16 ++#elif INT_MAX > 2147483640L /* }{ */ ++/* int has at least 32 bits */ ++#define LUAI_BITSINT 32 ++#else /* }{ */ ++#error "you must define LUA_BITSINT with number of bits in an integer" ++#endif /* } */ ++ ++ ++/* ++@@ LUA_INT32 is an signed integer with exactly 32 bits. ++@@ LUAI_UMEM is an unsigned integer big enough to count the total ++@* memory used by Lua. ++@@ LUAI_MEM is a signed integer big enough to count the total memory ++@* used by Lua. ++** CHANGE here if for some weird reason the default definitions are not ++** good enough for your machine. Probably you do not need to change ++** this. ++*/ ++#if LUAI_BITSINT >= 32 /* { */ ++#define LUA_INT32 int ++#define LUAI_UMEM size_t ++#define LUAI_MEM ptrdiff_t ++#else /* }{ */ ++/* 16-bit ints */ ++#define LUA_INT32 long ++#define LUAI_UMEM unsigned long ++#define LUAI_MEM long ++#endif /* } */ ++ ++ ++/* ++@@ LUAI_MAXSTACK limits the size of the Lua stack. ++** CHANGE it if you need a different limit. This limit is arbitrary; ++** its only purpose is to stop Lua to consume unlimited stack ++** space (and to reserve some numbers for pseudo-indices). ++*/ ++#if LUAI_BITSINT >= 32 ++#define LUAI_MAXSTACK 1000000 ++#else ++#define LUAI_MAXSTACK 15000 ++#endif ++ ++/* reserve some space for error handling */ ++#define LUAI_FIRSTPSEUDOIDX (-LUAI_MAXSTACK - 1000) ++ ++ ++ ++ ++/* ++@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. ++** CHANGE it if it uses too much C-stack space. ++*/ ++#define LUAL_BUFFERSIZE BUFSIZ ++ ++ ++ ++ ++/* ++** {================================================================== ++@@ LUA_NUMBER is the type of numbers in Lua. ++** CHANGE the following definitions only if you want to build Lua ++** with a number type different from double. You may also need to ++** change lua_number2int & lua_number2integer. ++** =================================================================== ++*/ ++ ++#define LUA_NUMBER_DOUBLE ++#define LUA_NUMBER double ++ ++/* ++@@ LUAI_UACNUMBER is the result of an 'usual argument conversion' ++@* over a number. ++*/ ++#define LUAI_UACNUMBER double ++ ++ ++/* ++@@ LUA_NUMBER_SCAN is the format for reading numbers. ++@@ LUA_NUMBER_FMT is the format for writing numbers. ++@@ lua_number2str converts a number to a string. ++@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. ++*/ ++#define LUA_NUMBER_SCAN "%lf" ++#define LUA_NUMBER_FMT "%.14g" ++#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) ++#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ ++ ++ ++/* ++@@ l_mathop allows the addition of an 'l' or 'f' to all math operations ++*/ ++#define l_mathop(x) (x) ++ ++ ++/* ++@@ lua_str2number converts a decimal numeric string to a number. ++@@ lua_strx2number converts an hexadecimal numeric string to a number. ++** In C99, 'strtod' does both conversions. C89, however, has no function ++** to convert floating hexadecimal strings to numbers. For these ++** systems, you can leave 'lua_strx2number' undefined and Lua will ++** provide its own implementation. ++*/ ++#define lua_str2number(s,p) strtod((s), (p)) ++ ++#if defined(LUA_USE_STRTODHEX) ++#define lua_strx2number(s,p) strtod((s), (p)) ++#endif ++ ++ ++/* ++@@ The luai_num* macros define the primitive operations over numbers. ++*/ ++ ++/* the following operations need the math library */ ++#if defined(lobject_c) || defined(lvm_c) ++#include <math.h> ++#define luai_nummod(L,a,b) ((a) - l_mathop(floor)((a)/(b))*(b)) ++#define luai_numpow(L,a,b) (l_mathop(pow)(a,b)) ++#endif ++ ++/* these are quite standard operations */ ++#if defined(LUA_CORE) ++#define luai_numadd(L,a,b) ((a)+(b)) ++#define luai_numsub(L,a,b) ((a)-(b)) ++#define luai_nummul(L,a,b) ((a)*(b)) ++#define luai_numdiv(L,a,b) ((a)/(b)) ++#define luai_numunm(L,a) (-(a)) ++#define luai_numeq(a,b) ((a)==(b)) ++#define luai_numlt(L,a,b) ((a)<(b)) ++#define luai_numle(L,a,b) ((a)<=(b)) ++#define luai_numisnan(L,a) (!luai_numeq((a), (a))) ++#endif ++ ++ ++ ++/* ++@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. ++** CHANGE that if ptrdiff_t is not adequate on your machine. (On most ++** machines, ptrdiff_t gives a good choice between int or long.) ++*/ ++#define LUA_INTEGER ptrdiff_t ++ ++/* ++@@ LUA_UNSIGNED is the integral type used by lua_pushunsigned/lua_tounsigned. ++** It must have at least 32 bits. ++*/ ++#define LUA_UNSIGNED unsigned LUA_INT32 ++ ++ ++ ++/* ++** Some tricks with doubles ++*/ ++ ++#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) /* { */ ++/* ++** The next definitions activate some tricks to speed up the ++** conversion from doubles to integer types, mainly to LUA_UNSIGNED. ++** ++@@ LUA_MSASMTRICK uses Microsoft assembler to avoid clashes with a ++** DirectX idiosyncrasy. ++** ++@@ LUA_IEEE754TRICK uses a trick that should work on any machine ++** using IEEE754 with a 32-bit integer type. ++** ++@@ LUA_IEEELL extends the trick to LUA_INTEGER; should only be ++** defined when LUA_INTEGER is a 32-bit integer. ++** ++@@ LUA_IEEEENDIAN is the endianness of doubles in your machine ++** (0 for little endian, 1 for big endian); if not defined, Lua will ++** check it dynamically for LUA_IEEE754TRICK (but not for LUA_NANTRICK). ++** ++@@ LUA_NANTRICK controls the use of a trick to pack all types into ++** a single double value, using NaN values to represent non-number ++** values. The trick only works on 32-bit machines (ints and pointers ++** are 32-bit values) with numbers represented as IEEE 754-2008 doubles ++** with conventional endianess (12345678 or 87654321), in CPUs that do ++** not produce signaling NaN values (all NaNs are quiet). ++*/ ++ ++/* Microsoft compiler on a Pentium (32 bit) ? */ ++#if defined(LUA_WIN) && defined(_MSC_VER) && defined(_M_IX86) /* { */ ++ ++#define LUA_MSASMTRICK ++#define LUA_IEEEENDIAN 0 ++#define LUA_NANTRICK ++ ++ ++/* pentium 32 bits? */ ++#elif defined(__i386__) || defined(__i386) || defined(__X86__) /* }{ */ ++ ++#define LUA_IEEE754TRICK ++#define LUA_IEEELL ++#define LUA_IEEEENDIAN 0 ++#define LUA_NANTRICK ++ ++/* pentium 64 bits? */ ++#elif defined(__x86_64) /* }{ */ ++ ++#define LUA_IEEE754TRICK ++#define LUA_IEEEENDIAN 0 ++ ++#elif defined(__POWERPC__) || defined(__ppc__) /* }{ */ ++ ++#define LUA_IEEE754TRICK ++#define LUA_IEEEENDIAN 1 ++ ++#else /* }{ */ ++ ++/* assume IEEE754 and a 32-bit integer type */ ++#define LUA_IEEE754TRICK ++ ++#endif /* } */ ++ ++#endif /* } */ ++ ++/* }================================================================== */ ++ ++ ++ ++ ++/* =================================================================== */ ++ ++/* ++** Local configuration. You can use this space to add your redefinitions ++** without modifying the main part of the file. ++*/ ++ ++ ++ ++#endif ++ diff --git a/games-util/dfhack/files/dfhack-0.43.03.1/03-respect-0.patch b/games-util/dfhack/files/dfhack-0.43.03.1/03-respect-0.patch new file mode 100644 index 0000000..41de016 --- /dev/null +++ b/games-util/dfhack/files/dfhack-0.43.03.1/03-respect-0.patch @@ -0,0 +1,62 @@ +respect DFHACK_PLUGIN_DESTINATION + +From: eroen <eroen@occam.eroen.eu> + + +--- + CMakeLists.txt | 2 +- + library/CMakeLists.txt | 2 ++ + library/PluginManager.cpp | 7 ++++++- + 3 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 300f7a5..450af8d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -127,7 +127,7 @@ SET(DFHACK_BINARY_DESTINATION .) + # dfhack data goes here: + SET(DFHACK_DATA_DESTINATION hack CACHE INTERNAL "") + # plugin libs go here: +-SET(DFHACK_PLUGIN_DESTINATION hack/plugins) ++SET(DFHACK_PLUGIN_DESTINATION hack/plugins CACHE INTERNAL "") + # dfhack header files go here: + SET(DFHACK_INCLUDES_DESTINATION hack/include) + # dfhack lua files go here: +diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt +index 28875b0..0693a37 100644 +--- a/library/CMakeLists.txt ++++ b/library/CMakeLists.txt +@@ -80,6 +80,8 @@ RemoteTools.cpp + + set_property( SOURCE "Core.cpp" APPEND PROPERTY COMPILE_DEFINITIONS + "DFHACK_DATA_DESTINATION=\"${DFHACK_DATA_DESTINATION}\"" ) ++set_property( SOURCE "PluginManager.cpp" APPEND PROPERTY COMPILE_DEFINITIONS ++ "DFHACK_PLUGIN_DESTINATION=\"${DFHACK_PLUGIN_DESTINATION}\"" ) + + SET(MAIN_SOURCES_WINDOWS + Console-windows.cpp +diff --git a/library/PluginManager.cpp b/library/PluginManager.cpp +index 774d191..e2e1c27 100644 +--- a/library/PluginManager.cpp ++++ b/library/PluginManager.cpp +@@ -52,6 +52,7 @@ using namespace std; + using namespace tthread; + + #include <assert.h> ++#include <string.h> + + #define MUTEX_GUARD(lock) auto lock_##__LINE__ = make_mutex_guard(lock); + template <typename T> +@@ -70,7 +71,11 @@ tthread::lock_guard<T> make_mutex_guard (T *mutex) + + static string getPluginPath() + { +- return Core::getInstance().getHackPath() + "plugins/"; ++ if(strncmp(DFHACK_PLUGIN_DESTINATION, "hack/plugins", 13) == 0) ++ // This is the default value ++ return Core::getInstance().getHackPath() + "plugins/"; ++ else ++ return DFHACK_PLUGIN_DESTINATION "/"; + } + + static string getPluginPath (std::string name) diff --git a/games-util/dfhack/files/dfhack-0.43.03.1/04-respect-1.patch b/games-util/dfhack/files/dfhack-0.43.03.1/04-respect-1.patch new file mode 100644 index 0000000..69db42a --- /dev/null +++ b/games-util/dfhack/files/dfhack-0.43.03.1/04-respect-1.patch @@ -0,0 +1,61 @@ +respect DFHACK_LIBRARY_DESTINATION + +From: eroen <eroen@occam.eroen.eu> + + +--- + CMakeLists.txt | 4 ++-- + plugins/ruby/CMakeLists.txt | 2 ++ + plugins/ruby/ruby.cpp | 6 +++--- + 3 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 450af8d..5d267ab 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -115,11 +115,11 @@ set(DFHACK_VERSION "${DF_VERSION}-${DFHACK_RELEASE}") + # the dfhack libraries will be installed here: + IF(UNIX) + # put the lib into DF/hack +- SET(DFHACK_LIBRARY_DESTINATION hack) ++ SET(DFHACK_LIBRARY_DESTINATION hack CACHE INTERNAL "") + SET(DFHACK_EGGY_DESTINATION libs) + ELSE() + # windows is crap, therefore we can't do nice things with it. leave the libs on a nasty pile... +- SET(DFHACK_LIBRARY_DESTINATION .) ++ SET(DFHACK_LIBRARY_DESTINATION . CACHE INTERNAL "") + SET(DFHACK_EGGY_DESTINATION .) + ENDIF() + # external tools will be installed here: +diff --git a/plugins/ruby/CMakeLists.txt b/plugins/ruby/CMakeLists.txt +index 3aeac6d..f2974f6 100644 +--- a/plugins/ruby/CMakeLists.txt ++++ b/plugins/ruby/CMakeLists.txt +@@ -34,6 +34,8 @@ INCLUDE_DIRECTORIES("${dfhack_SOURCE_DIR}/depends/tthread") + + DFHACK_PLUGIN(ruby ruby.cpp LINK_LIBRARIES dfhack-tinythread) + ADD_DEPENDENCIES(ruby ruby-autogen-rb) ++set_property( SOURCE "ruby.cpp" APPEND PROPERTY COMPILE_DEFINITIONS ++ "DFHACK_LIBRARY_DESTINATION=\"${DFHACK_LIBRARY_DESTINATION}\"" ) + + INSTALL(FILES ${RUBYLIB} DESTINATION ${DFHACK_LIBRARY_DESTINATION}) + +diff --git a/plugins/ruby/ruby.cpp b/plugins/ruby/ruby.cpp +index adc451a..0dc423a 100644 +--- a/plugins/ruby/ruby.cpp ++++ b/plugins/ruby/ruby.cpp +@@ -325,11 +325,11 @@ static int df_loadruby(void) + { + const char *libpath = + #if defined(WIN32) +- "./libruby.dll"; ++ DFHACK_LIBRARY_DESTINATION "/libruby.dll"; + #elif defined(__APPLE__) +- "hack/libruby.dylib"; ++ DFHACK_LIBRARY_DESTINATION "/libruby.dylib"; + #else +- "hack/libruby.so"; ++ DFHACK_LIBRARY_DESTINATION "/libruby.so"; + #endif + + libruby_handle = OpenPlugin(libpath); diff --git a/games-util/dfhack/files/dfhack-0.43.03.1/05-introduce.patch b/games-util/dfhack/files/dfhack-0.43.03.1/05-introduce.patch new file mode 100644 index 0000000..76af137 --- /dev/null +++ b/games-util/dfhack/files/dfhack-0.43.03.1/05-introduce.patch @@ -0,0 +1,570 @@ +introduce DFHACK_RUBY_DESTINATION + +From: eroen <eroen@occam.eroen.eu> + + +--- + CMakeLists.txt | 2 + plugins/ruby/CMakeLists.txt | 8 + + plugins/ruby/ruby.cpp | 2 + plugins/ruby/ruby.rb | 247 ------------------------------------------- + plugins/ruby/ruby.rb.in | 247 +++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 256 insertions(+), 250 deletions(-) + delete mode 100644 plugins/ruby/ruby.rb + create mode 100644 plugins/ruby/ruby.rb.in + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5d267ab..b38bc1b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -132,6 +132,8 @@ SET(DFHACK_PLUGIN_DESTINATION hack/plugins CACHE INTERNAL "") + SET(DFHACK_INCLUDES_DESTINATION hack/include) + # dfhack lua files go here: + SET(DFHACK_LUA_DESTINATION hack/lua CACHE INTERNAL "") ++# dfhack ruby files go here: ++SET(DFHACK_RUBY_DESTINATION hack/ruby CACHE INTERNAL "") + # the windows .lib file goes here: + SET(DFHACK_DEVLIB_DESTINATION hack) + +diff --git a/plugins/ruby/CMakeLists.txt b/plugins/ruby/CMakeLists.txt +index f2974f6..352af6a 100644 +--- a/plugins/ruby/CMakeLists.txt ++++ b/plugins/ruby/CMakeLists.txt +@@ -35,12 +35,16 @@ INCLUDE_DIRECTORIES("${dfhack_SOURCE_DIR}/depends/tthread") + DFHACK_PLUGIN(ruby ruby.cpp LINK_LIBRARIES dfhack-tinythread) + ADD_DEPENDENCIES(ruby ruby-autogen-rb) + set_property( SOURCE "ruby.cpp" APPEND PROPERTY COMPILE_DEFINITIONS +- "DFHACK_LIBRARY_DESTINATION=\"${DFHACK_LIBRARY_DESTINATION}\"" ) ++ "DFHACK_LIBRARY_DESTINATION=\"${DFHACK_LIBRARY_DESTINATION}\"" ++ "DFHACK_RUBY_DESTINATION=\"${DFHACK_RUBY_DESTINATION}\"") + + INSTALL(FILES ${RUBYLIB} DESTINATION ${DFHACK_LIBRARY_DESTINATION}) + ++configure_file( ruby.rb.in ruby.rb @ONLY ) + INSTALL(DIRECTORY . +- DESTINATION hack/ruby ++ DESTINATION ${DFHACK_RUBY_DESTINATION} + FILES_MATCHING PATTERN "*.rb") ++INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/ruby.rb ++ DESTINATION ${DFHACK_RUBY_DESTINATION}) + + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${RUBYAUTOGEN} DESTINATION hack/ruby) +diff --git a/plugins/ruby/ruby.cpp b/plugins/ruby/ruby.cpp +index 0dc423a..bd5c430 100644 +--- a/plugins/ruby/ruby.cpp ++++ b/plugins/ruby/ruby.cpp +@@ -437,7 +437,7 @@ static void df_rubythread(void *p) + + // load the default ruby-level definitions in the background + state=0; +- rb_eval_string_protect("require './hack/ruby/ruby'", &state); ++ rb_eval_string_protect("require '" DFHACK_RUBY_DESTINATION "/ruby'", &state); + if (state) + dump_rb_error(); + +diff --git a/plugins/ruby/ruby.rb b/plugins/ruby/ruby.rb +deleted file mode 100644 +index 850ca09..0000000 +--- a/plugins/ruby/ruby.rb ++++ /dev/null +@@ -1,247 +0,0 @@ +-# redefine standard i/o methods to use the dfhack console +-module Kernel +- def puts(*a) +- a.flatten.each { |l| +- DFHack.print_str(l.to_s.chomp + "\n") +- } +- nil +- end +- +- def puts_err(*a) +- a.flatten.each { |l| +- DFHack.print_err(l.to_s.chomp + "\n") +- } +- nil +- end +- +- def p(*a) +- a.each { |e| +- puts_err e.inspect +- } +- nil +- end +-end +- +-module DFHack +- VERSION = version +- +- class OnupdateCallback +- attr_accessor :callback, :timelimit, :minyear, :minyeartick, :description +- def initialize(descr, cb, tl, initdelay=0) +- @description = descr +- @callback = cb +- @ticklimit = tl +- @minyear = (tl ? df.cur_year : 0) +- @minyeartick = (tl ? df.cur_year_tick+initdelay : 0) +- end +- +- # run callback if timedout +- def check_run(year, yeartick, yearlen) +- if @ticklimit +- return unless year > @minyear or (year == @minyear and yeartick >= @minyeartick) +- @minyear = year +- @minyeartick = yeartick + @ticklimit +- if @minyeartick > yearlen +- @minyear += 1 +- @minyeartick -= yearlen +- end +- end +- # t0 = Time.now +- @callback.call +- # dt = Time.now - t0 ; puts "rb cb #@description took #{'%.02f' % dt}s" if dt > 0.1 +- rescue Exception +- df.onupdate_unregister self +- puts_err "onupdate #@description unregistered: #$!", $!.backtrace +- end +- +- def <=>(o) +- [@minyear, @minyeartick] <=> [o.minyear, o.minyeartick] +- end +- end +- +- class << self +- attr_accessor :onupdate_list, :onstatechange_list +- +- # register a callback to be called every gframe or more +- # ex: DFHack.onupdate_register('fastdwarf') { DFHack.world.units[0].counters.job_counter = 0 } +- # if ticklimit is given, do not call unless this much game ticks have passed. Handles advmode time stretching. +- def onupdate_register(descr, ticklimit=nil, initialtickdelay=0, &b) +- raise ArgumentError, 'need a description as 1st arg' unless descr.kind_of?(::String) +- @onupdate_list ||= [] +- @onupdate_list << OnupdateCallback.new(descr, b, ticklimit, initialtickdelay) +- DFHack.onupdate_active = true +- if onext = @onupdate_list.sort.first +- DFHack.onupdate_minyear = onext.minyear +- DFHack.onupdate_minyeartick = onext.minyeartick +- end +- @onupdate_list.last +- end +- +- # delete the callback for onupdate ; use the value returned by onupdate_register or the description +- def onupdate_unregister(b) +- b = @onupdate_list.find { |bb| bb.description == b } if b.kind_of?(String) +- @onupdate_list.delete b +- if @onupdate_list.empty? +- DFHack.onupdate_active = false +- DFHack.onupdate_minyear = DFHack.onupdate_minyeartick = DFHack.onupdate_minyeartickadv = -1 +- end +- end +- +- # same as onupdate_register, but remove the callback once it returns true +- def onupdate_register_once(*a) +- handle = onupdate_register(*a) { +- onupdate_unregister(handle) if yield +- } +- end +- +- TICKS_PER_YEAR = 1200*28*12 +- # this method is called by ruby.cpp if df.onupdate_active is true +- def onupdate +- @onupdate_list ||= [] +- +- y = cur_year +- ytmax = TICKS_PER_YEAR +- if df.gamemode == :ADVENTURE and df.respond_to?(:cur_year_tick_advmode) +- yt = cur_year_tick_advmode +- ytmax *= 144 +- else +- yt = cur_year_tick +- end +- +- @onupdate_list.each { |o| +- o.check_run(y, yt, ytmax) +- } +- +- if onext = @onupdate_list.sort.first +- DFHack.onupdate_minyear = onext.minyear +- if ytmax > TICKS_PER_YEAR +- DFHack.onupdate_minyeartick = -1 +- DFHack.onupdate_minyeartickadv = onext.minyeartick +- else +- DFHack.onupdate_minyeartick = onext.minyeartick +- DFHack.onupdate_minyeartickadv = -1 +- end +- end +- end +- +- # register a callback to be called every gframe or more +- # ex: DFHack.onstatechange_register { |newstate| puts "state changed to #{newstate}" } +- def onstatechange_register(&b) +- @onstatechange_list ||= [] +- @onstatechange_list << b +- @onstatechange_list.last +- end +- +- # delete the callback for onstatechange ; use the value returned by onstatechange_register +- def onstatechange_unregister(b) +- @onstatechange_list.delete b +- end +- +- # same as onstatechange_register, but auto-unregisters if the block returns true +- def onstatechange_register_once +- handle = onstatechange_register { |st| +- onstatechange_unregister(handle) if yield(st) +- } +- end +- +- +- # this method is called by dfhack every 'onstatechange' +- def onstatechange(newstate) +- @onstatechange_list ||= [] +- @onstatechange_list.each { |cb| cb.call(newstate) } +- end +- +- # return true if the argument is under the cursor +- def at_cursor?(obj) +- same_pos?(obj, cursor) +- end +- +- # returns true if both arguments are at the same x/y/z +- def same_pos?(pos1, pos2) +- pos1 = pos1.pos if pos1.respond_to?(:pos) +- pos2 = pos2.pos if pos2.respond_to?(:pos) +- pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z +- end +- +- # try to match a user-specified name to one from the raws +- # uses case-switching and substring matching +- # eg match_rawname('coal', ['COAL_BITUMINOUS', 'BAUXITE']) => 'COAL_BITUMINOUS' +- def match_rawname(name, rawlist) +- rawlist.each { |r| return r if name == r } +- rawlist.each { |r| return r if name.downcase == r.downcase } +- may = rawlist.find_all { |r| r.downcase.index(name.downcase) } +- may.first if may.length == 1 +- end +- +- def translate_name(name, english=true, onlylastpart=false) +- out = [] +- +- if not onlylastpart +- out << name.first_name if name.first_name != '' +- if name.nickname != '' +- case respond_to?(:d_init) && d_init.nickname[gametype] +- when :REPLACE_ALL; return "`#{name.nickname}'" +- when :REPLACE_FIRST; out.pop +- end +- out << "`#{name.nickname}'" +- end +- end +- return out.join(' ') unless name.words.find { |w| w >= 0 } +- +- if not english +- tsl = world.raws.language.translations[name.language] +- if name.words[0] >= 0 or name.words[1] >= 0 +- out << '' +- out.last << tsl.words[name.words[0]] if name.words[0] >= 0 +- out.last << tsl.words[name.words[1]] if name.words[1] >= 0 +- end +- if name.words[5] >= 0 +- out << '' +- (2..5).each { |i| out.last << tsl.words[name.words[i]] if name.words[i] >= 0 } +- end +- if name.words[6] >= 0 +- out << tsl.words[name.words[6]] +- end +- else +- wl = world.raws.language +- if name.words[0] >= 0 or name.words[1] >= 0 +- out << '' +- out.last << wl.words[name.words[0]].forms[name.parts_of_speech[0]] if name.words[0] >= 0 +- out.last << wl.words[name.words[1]].forms[name.parts_of_speech[1]] if name.words[1] >= 0 +- end +- if name.words[5] >= 0 +- out << 'the' +- out.last.capitalize! if out.length == 1 +- out << wl.words[name.words[2]].forms[name.parts_of_speech[2]] if name.words[2] >= 0 +- out << wl.words[name.words[3]].forms[name.parts_of_speech[3]] if name.words[3] >= 0 +- if name.words[4] >= 0 +- out << wl.words[name.words[4]].forms[name.parts_of_speech[4]] +- out.last << '-' +- else +- out << '' +- end +- out.last << wl.words[name.words[5]].forms[name.parts_of_speech[5]] +- end +- if name.words[6] >= 0 +- out << 'of' +- out.last.capitalize! if out.length == 1 +- out << wl.words[name.words[6]].forms[name.parts_of_speech[6]] +- end +- end +- +- out.join(' ') +- end +- end +-end +- +-# global alias so we can write 'df.world.units.all[0]' +-def df +- DFHack +-end +- +-# load autogenned file +-require './hack/ruby/ruby-autogen-defs' +-require(RUBY_PLATFORM =~ /mswin|mingw|cygwin/i ? './hack/ruby/ruby-autogen-win' : './hack/ruby/ruby-autogen-gcc') +- +-# load all modules +-Dir['./hack/ruby/*.rb'].each { |m| require m.chomp('.rb') if m !~ /ruby-autogen/ } +diff --git a/plugins/ruby/ruby.rb.in b/plugins/ruby/ruby.rb.in +new file mode 100644 +index 0000000..c458e19 +--- /dev/null ++++ b/plugins/ruby/ruby.rb.in +@@ -0,0 +1,247 @@ ++# redefine standard i/o methods to use the dfhack console ++module Kernel ++ def puts(*a) ++ a.flatten.each { |l| ++ DFHack.print_str(l.to_s.chomp + "\n") ++ } ++ nil ++ end ++ ++ def puts_err(*a) ++ a.flatten.each { |l| ++ DFHack.print_err(l.to_s.chomp + "\n") ++ } ++ nil ++ end ++ ++ def p(*a) ++ a.each { |e| ++ puts_err e.inspect ++ } ++ nil ++ end ++end ++ ++module DFHack ++ VERSION = version ++ ++ class OnupdateCallback ++ attr_accessor :callback, :timelimit, :minyear, :minyeartick, :description ++ def initialize(descr, cb, tl, initdelay=0) ++ @description = descr ++ @callback = cb ++ @ticklimit = tl ++ @minyear = (tl ? df.cur_year : 0) ++ @minyeartick = (tl ? df.cur_year_tick+initdelay : 0) ++ end ++ ++ # run callback if timedout ++ def check_run(year, yeartick, yearlen) ++ if @ticklimit ++ return unless year > @minyear or (year == @minyear and yeartick >= @minyeartick) ++ @minyear = year ++ @minyeartick = yeartick + @ticklimit ++ if @minyeartick > yearlen ++ @minyear += 1 ++ @minyeartick -= yearlen ++ end ++ end ++ # t0 = Time.now ++ @callback.call ++ # dt = Time.now - t0 ; puts "rb cb #@description took #{'%.02f' % dt}s" if dt > 0.1 ++ rescue Exception ++ df.onupdate_unregister self ++ puts_err "onupdate #@description unregistered: #$!", $!.backtrace ++ end ++ ++ def <=>(o) ++ [@minyear, @minyeartick] <=> [o.minyear, o.minyeartick] ++ end ++ end ++ ++ class << self ++ attr_accessor :onupdate_list, :onstatechange_list ++ ++ # register a callback to be called every gframe or more ++ # ex: DFHack.onupdate_register('fastdwarf') { DFHack.world.units[0].counters.job_counter = 0 } ++ # if ticklimit is given, do not call unless this much game ticks have passed. Handles advmode time stretching. ++ def onupdate_register(descr, ticklimit=nil, initialtickdelay=0, &b) ++ raise ArgumentError, 'need a description as 1st arg' unless descr.kind_of?(::String) ++ @onupdate_list ||= [] ++ @onupdate_list << OnupdateCallback.new(descr, b, ticklimit, initialtickdelay) ++ DFHack.onupdate_active = true ++ if onext = @onupdate_list.sort.first ++ DFHack.onupdate_minyear = onext.minyear ++ DFHack.onupdate_minyeartick = onext.minyeartick ++ end ++ @onupdate_list.last ++ end ++ ++ # delete the callback for onupdate ; use the value returned by onupdate_register or the description ++ def onupdate_unregister(b) ++ b = @onupdate_list.find { |bb| bb.description == b } if b.kind_of?(String) ++ @onupdate_list.delete b ++ if @onupdate_list.empty? ++ DFHack.onupdate_active = false ++ DFHack.onupdate_minyear = DFHack.onupdate_minyeartick = DFHack.onupdate_minyeartickadv = -1 ++ end ++ end ++ ++ # same as onupdate_register, but remove the callback once it returns true ++ def onupdate_register_once(*a) ++ handle = onupdate_register(*a) { ++ onupdate_unregister(handle) if yield ++ } ++ end ++ ++ TICKS_PER_YEAR = 1200*28*12 ++ # this method is called by ruby.cpp if df.onupdate_active is true ++ def onupdate ++ @onupdate_list ||= [] ++ ++ y = cur_year ++ ytmax = TICKS_PER_YEAR ++ if df.gamemode == :ADVENTURE and df.respond_to?(:cur_year_tick_advmode) ++ yt = cur_year_tick_advmode ++ ytmax *= 144 ++ else ++ yt = cur_year_tick ++ end ++ ++ @onupdate_list.each { |o| ++ o.check_run(y, yt, ytmax) ++ } ++ ++ if onext = @onupdate_list.sort.first ++ DFHack.onupdate_minyear = onext.minyear ++ if ytmax > TICKS_PER_YEAR ++ DFHack.onupdate_minyeartick = -1 ++ DFHack.onupdate_minyeartickadv = onext.minyeartick ++ else ++ DFHack.onupdate_minyeartick = onext.minyeartick ++ DFHack.onupdate_minyeartickadv = -1 ++ end ++ end ++ end ++ ++ # register a callback to be called every gframe or more ++ # ex: DFHack.onstatechange_register { |newstate| puts "state changed to #{newstate}" } ++ def onstatechange_register(&b) ++ @onstatechange_list ||= [] ++ @onstatechange_list << b ++ @onstatechange_list.last ++ end ++ ++ # delete the callback for onstatechange ; use the value returned by onstatechange_register ++ def onstatechange_unregister(b) ++ @onstatechange_list.delete b ++ end ++ ++ # same as onstatechange_register, but auto-unregisters if the block returns true ++ def onstatechange_register_once ++ handle = onstatechange_register { |st| ++ onstatechange_unregister(handle) if yield(st) ++ } ++ end ++ ++ ++ # this method is called by dfhack every 'onstatechange' ++ def onstatechange(newstate) ++ @onstatechange_list ||= [] ++ @onstatechange_list.each { |cb| cb.call(newstate) } ++ end ++ ++ # return true if the argument is under the cursor ++ def at_cursor?(obj) ++ same_pos?(obj, cursor) ++ end ++ ++ # returns true if both arguments are at the same x/y/z ++ def same_pos?(pos1, pos2) ++ pos1 = pos1.pos if pos1.respond_to?(:pos) ++ pos2 = pos2.pos if pos2.respond_to?(:pos) ++ pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z ++ end ++ ++ # try to match a user-specified name to one from the raws ++ # uses case-switching and substring matching ++ # eg match_rawname('coal', ['COAL_BITUMINOUS', 'BAUXITE']) => 'COAL_BITUMINOUS' ++ def match_rawname(name, rawlist) ++ rawlist.each { |r| return r if name == r } ++ rawlist.each { |r| return r if name.downcase == r.downcase } ++ may = rawlist.find_all { |r| r.downcase.index(name.downcase) } ++ may.first if may.length == 1 ++ end ++ ++ def translate_name(name, english=true, onlylastpart=false) ++ out = [] ++ ++ if not onlylastpart ++ out << name.first_name if name.first_name != '' ++ if name.nickname != '' ++ case respond_to?(:d_init) && d_init.nickname[gametype] ++ when :REPLACE_ALL; return "`#{name.nickname}'" ++ when :REPLACE_FIRST; out.pop ++ end ++ out << "`#{name.nickname}'" ++ end ++ end ++ return out.join(' ') unless name.words.find { |w| w >= 0 } ++ ++ if not english ++ tsl = world.raws.language.translations[name.language] ++ if name.words[0] >= 0 or name.words[1] >= 0 ++ out << '' ++ out.last << tsl.words[name.words[0]] if name.words[0] >= 0 ++ out.last << tsl.words[name.words[1]] if name.words[1] >= 0 ++ end ++ if name.words[5] >= 0 ++ out << '' ++ (2..5).each { |i| out.last << tsl.words[name.words[i]] if name.words[i] >= 0 } ++ end ++ if name.words[6] >= 0 ++ out << tsl.words[name.words[6]] ++ end ++ else ++ wl = world.raws.language ++ if name.words[0] >= 0 or name.words[1] >= 0 ++ out << '' ++ out.last << wl.words[name.words[0]].forms[name.parts_of_speech[0]] if name.words[0] >= 0 ++ out.last << wl.words[name.words[1]].forms[name.parts_of_speech[1]] if name.words[1] >= 0 ++ end ++ if name.words[5] >= 0 ++ out << 'the' ++ out.last.capitalize! if out.length == 1 ++ out << wl.words[name.words[2]].forms[name.parts_of_speech[2]] if name.words[2] >= 0 ++ out << wl.words[name.words[3]].forms[name.parts_of_speech[3]] if name.words[3] >= 0 ++ if name.words[4] >= 0 ++ out << wl.words[name.words[4]].forms[name.parts_of_speech[4]] ++ out.last << '-' ++ else ++ out << '' ++ end ++ out.last << wl.words[name.words[5]].forms[name.parts_of_speech[5]] ++ end ++ if name.words[6] >= 0 ++ out << 'of' ++ out.last.capitalize! if out.length == 1 ++ out << wl.words[name.words[6]].forms[name.parts_of_speech[6]] ++ end ++ end ++ ++ out.join(' ') ++ end ++ end ++end ++ ++# global alias so we can write 'df.world.units.all[0]' ++def df ++ DFHack ++end ++ ++# load autogenned file ++require '@DFHACK_RUBY_DESTINATION@/ruby-autogen-defs' ++require(RUBY_PLATFORM =~ /mswin|mingw|cygwin/i ? '@DFHACK_RUBY_DESTINATION@/ruby-autogen-win' : '@DFHACK_RUBY_DESTINATION@/ruby-autogen-gcc') ++ ++# load all modules ++Dir['@DFHACK_RUBY_DESTINATION@/*.rb'].each { |m| require m.chomp('.rb') if m !~ /ruby-autogen/ } diff --git a/games-util/dfhack/files/dfhack-0.43.03.1/series b/games-util/dfhack/files/dfhack-0.43.03.1/series new file mode 100644 index 0000000..0d7b4e6 --- /dev/null +++ b/games-util/dfhack/files/dfhack-0.43.03.1/series @@ -0,0 +1,6 @@ +# This series applies on GIT commit 9da53a056e08cb1f2203460701592566e0f56e29 +01-respect.patch +02-respect-dfhack_lua_destination.patch +03-respect-0.patch +04-respect-1.patch +05-introduce.patch diff --git a/games-util/dfhack/files/dfhack-run b/games-util/dfhack/files/dfhack-run new file mode 100644 index 0000000..cd45c0a --- /dev/null +++ b/games-util/dfhack/files/dfhack-run @@ -0,0 +1,9 @@ +#!/bin/sh + +gamesdir=/opt/dwarf-fortress +dfhackdir=/opt/dfhack +install="$HOME/.dwarf-fortress" + +cd "$install" || exit +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$dfhackdir/hack/lib:$dfhackdir/hack" +exec "$dfhackdir"/hack/dfhack-run "$@" |