summaryrefslogtreecommitdiff
path: root/games-util/dfhack
diff options
context:
space:
mode:
authoreroen2013-06-19 14:56:59 +0200
committereroen2013-06-19 15:03:41 +0200
commit6286bca5f9a90189c479cdb1327342fb8f46976a (patch)
treea72bdd6bd9124834a09b9d274b0279aaf63a037e /games-util/dfhack
parent7db020d6831da051bf6904a0f2ed2d470bc5bd56 (diff)
downloaderoen-overlay-6286bca5f9a90189c479cdb1327342fb8f46976a.tar.gz
eroen-overlay-6286bca5f9a90189c479cdb1327342fb8f46976a.tar.bz2
eroen-overlay-6286bca5f9a90189c479cdb1327342fb8f46976a.tar.xz
dfhack-0.34.11.3_p20130302 - new snapshot
Diffstat (limited to 'games-util/dfhack')
-rw-r--r--games-util/dfhack/Manifest24
-rw-r--r--games-util/dfhack/dfhack-0.34.11.3_p20130302.ebuild254
-rw-r--r--games-util/dfhack/dfhack-9999.ebuild25
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/01-compile-static-libraries-as.patch65
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/02-drop-strange-build-options.patch52
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/03-configurable-install-paths.patch96
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/04-compile-time-configurable.patch142
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/05-compile-time-configurable-0.patch54
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/06-compile-time-configurable-1.patch104
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/07-startup-scripts-configurable.patch288
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/08-ruby-plugin-configurable-paths.patch525
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/09-eggy-remove-annoying-banner.patch22
-rw-r--r--games-util/dfhack/files/dfhack-0.34.11.3_p20130302/series10
-rw-r--r--games-util/dfhack/files/isoworld-0.34.11.3_p20130302/01-missing-include-dir.patch21
-rw-r--r--games-util/dfhack/files/isoworld-0.34.11.3_p20130302/series2
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/01-null-isn-t-an-int32.patch46
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/02-configurable-install-paths.patch38
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/03-don-t-segfault-if-logfile-is.patch37
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/04-compile-time-configuration-of.patch188
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/05-compile-time-configurable-log.patch37
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/06-fix-b0rked-xml-file.patch34
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/07-compile-time-configurable-dump.patch132
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/08-compile-time-configurable.patch25
-rw-r--r--games-util/dfhack/files/stonesense-0.34.11.3_p20130302/series9
24 files changed, 2220 insertions, 10 deletions
diff --git a/games-util/dfhack/Manifest b/games-util/dfhack/Manifest
index 1868faea..10a8574e 100644
--- a/games-util/dfhack/Manifest
+++ b/games-util/dfhack/Manifest
@@ -4,6 +4,16 @@ AUX dfhack-0.34.11-r2/0002-removed-magic-flags-and-paths-from-build-system.patch
AUX dfhack-0.34.11-r2/0003-tell-various-components-about-non-magic-paths.patch 5346 SHA256 9b50aee749944915594f4a5034a33198d00a0a3ac0e17e5c099edf01537154a5 SHA512 0587fcda003a1c6212751761f04b059399d4ff045b3c4d15c7fb9203dcf59e87d96fef996762078ee4de1e00c9d135bb914887e3fec81cfb7e0f3add8e2362d9 WHIRLPOOL 1462a7b93cdb16a87eca89fbbfe02f9e3cd48287b89cd46449a4cee02c09b33366e8eb4f294c7b439382ff5ad9539f6c8ecb030da9cbe82aa1ba59c785f8bcf0
AUX dfhack-0.34.11-r2/0004-compile-time-configurable-statedir.patch 3337 SHA256 8d4a1a67e6a2c1e6a311ea17e099e8c60c93b911d6ab46399ab31b30eb01cf0f SHA512 1a03b601f16846a0394476df09de5d3c456837dc8cfe6e021204b2fc145bb8a52c9aa0647799c5cb886209ce87b1120f2eeea3477189e7ba8666f71e5cc53ee5 WHIRLPOOL 77b17bc66f365f5b9829df44327ffc269f350b01709f72ba3c5345da534deea0915f58a7a3257844048b13eba5bf4f56941455a359f6966d19e9121182f335d8
AUX dfhack-0.34.11-r2/0005-remove-annoying-banner.patch 1394 SHA256 7db8259c2e6d473db0f1af3ad98f0b55272f2fdab3c56e9a1198a6cb0848c58f SHA512 d4b5e801deb04f11080cda61b4da80192172e75548978272976c23d9168d443bd274ccb53c39f701df45f73032ee126d04aa2fb8a86816c2003d8635afdf7857 WHIRLPOOL 9dc6fb52b3f65f5696470d2a8482e693702f72382cf1d71d22f053a536d20b438a1b2a584249738f134bd4f9a08d67c7f19f4db2a909a3c929316a2f45e650b8
+AUX dfhack-0.34.11.3_p20130302/01-compile-static-libraries-as.patch 2418 SHA256 2d13b801026ed0484e9d8db7aa68ac7ee9be2009391a1ddbfff8824bad6cf38e SHA512 a52b49e0d479bddb89d4cc49f9de24c0caa5f5ff3bea9cf6dffed12311adbc4414296eccb92f693af38694ed06eca117ef043947ccb1cc6fa6aaadf83fd21e63 WHIRLPOOL c16d3e117a1ff2a7de53e36a9128329f7902dd6849dcf93f2a9e53890014512e4084cffe44b4d4fd39286061798b846276e99d0cac1d7f518ddc75cf4b375e65
+AUX dfhack-0.34.11.3_p20130302/02-drop-strange-build-options.patch 2038 SHA256 dd52200e6106b034ac22c308062dd2ef8de4c9a54ddd877e07737e4dbaeb59ee SHA512 fcd81edce8548cc1a830f92c97dc35a33f0a52cf778c6d50f55249696d90adcfa27ac08a9dca0913d671c09829e6e289361770f1fc5648a74367fa4a3509281f WHIRLPOOL 1b139665f085e8e99c5535c063348cd6dab28936a10d72892e898e463c17fd40824194df155855859142ef4092deb096ae004bedd9608b8712c339fbcbc0375a
+AUX dfhack-0.34.11.3_p20130302/03-configurable-install-paths.patch 3975 SHA256 bdfd0d8285089a51043ea08e2db78ae47cf7e11235230b0b23760211afff86e4 SHA512 82a303a5392971010e0c80138c3a2ba178bbbd7a9d69f3dc90a87698e5f8b630014cfd867e1cfeefbf14ce73978f56f1068e9be88e0bdc9eba6b46748b2bceca WHIRLPOOL 0b0d92af256cd88c6cec5ad1efb4951e48ec944aaf8882b4cac68d2059652080dd05137f537376844c2a5f066345f5b13711c5269d3dffa007601d14caeeb979
+AUX dfhack-0.34.11.3_p20130302/04-compile-time-configurable.patch 5252 SHA256 89f8396c8709a2d72f55f364b73d129e05f65caa32b8c145741d841281f7a71a SHA512 6a613fb00748f22938bf8fdbf55a1acfb141e48c85185c71fd08cc934ab9dd0089431f3942f2bce726d0e71cfd660ece4866026335ca03f75370565c190d330b WHIRLPOOL 7d3e6fe729f61ce5e61e6843c1219e19cba5b77d7558371044c2bb3e60c071d6a13af2e051d3978704b7ee43523ac029833d18e47830ab688ef8af7208bb7edb
+AUX dfhack-0.34.11.3_p20130302/05-compile-time-configurable-0.patch 1562 SHA256 16810214a14c585a7f99f3939f52c66aaab7d388f4854c1d684032df4e3ddf80 SHA512 a2797092215b61765cfee6654a45f0c1f890e6d537e370d038907e25e9e916d54e140635b57012b892039467027e62505045287f3d6a06a2f6d0e6dac83fe256 WHIRLPOOL 49c95f1adb62d1997adea7521e550ffb1bdf38b22e2ca699fd8314b0f96b32de6ee042218d0053f9da0827fecd81d923d078cb9f37447bc4c3211226d9ea0eff
+AUX dfhack-0.34.11.3_p20130302/06-compile-time-configurable-1.patch 3578 SHA256 ead1019a14dbdab2fb0ac097073c7f2a22fa24f426eb031615cd79a5a28b1a54 SHA512 fae5f28c20364a6032f329115a8d1630e17fb1e5e7888c058c94218824616f1b807e7471330fdb7e6d1f29d3960a85f1469edbf1d270cc44ed9a707295bf8c90 WHIRLPOOL 5c8e9a113fc0a4972e54df0871fa6cce4074ef0b4cca33cf2d26cffab3d75863d8aace3423d14d2110a00a5ba79ca39b680e1838889e9ac390f4ea95d06c6784
+AUX dfhack-0.34.11.3_p20130302/07-startup-scripts-configurable.patch 9738 SHA256 a107a4693ed5c8f156c2dd9718c3c83b6c6802bd39d8a41fb15b604bdd2d7908 SHA512 c833b81a0bf7be6d15bc6149e43ae4bcd37bdbe42890ea73ebe950bef416732d9c807c9268031568e08c3f3de9130fc6759d32dd236c830abfa0c3dfddc0f73f WHIRLPOOL 58c7e9891f72819782be79eb9388bd7650a18df2816f4d75f4708fcbdc72d882b0aa18f30af0a91f052cc83f8bf972a6e6df6a64845dbf4521689ba95f8094e4
+AUX dfhack-0.34.11.3_p20130302/08-ruby-plugin-configurable-paths.patch 19636 SHA256 2a24c35f5e4b1cf060fd6f11a5ff4b438b1fafea6a7ece9b5e0f018d1dfcad46 SHA512 00130cc96695e40e47763e858dd73b739d083808b7f0bb1a097a8120c0b7c8d10306a3da0700aa42b69422a32b7814d40290228f26da4e486c5cbb507bdf139d WHIRLPOOL 80aaf69a4c4139096c120f837bcf25a37076269f0f0d3a6ae272fd95124a59c163595827ddb22361f37b79f15d0a3853601dd2c3fdc9682826679aea9fdf3098
+AUX dfhack-0.34.11.3_p20130302/09-eggy-remove-annoying-banner.patch 662 SHA256 a139e7d33d1e6d708955572cae529dd2a56be4500ced49ae417c2f30808a3e14 SHA512 b77cf87d4d232779dd3f171364e6660af5a8e69889ca3b4d9b33ac0db4bde37a3851f23315f19b9bac4577050181f54222b57b0b78c8746407e69e7265d1b8b9 WHIRLPOOL 85728501157dcce4fa4a1b4da81ad8ff74ad7d701ed170ae5fa420977ebd4f1992b015f6d19a1ebfff14de90f43764e1521d3188db569b9a71427e966c2d40f2
+AUX dfhack-0.34.11.3_p20130302/series 410 SHA256 666ee96606c1b8ff23bff91d5ad6d6f788427ba0ff4affd4e0d4b34e9a22f391 SHA512 852b5ba7928d3040f90f5c8ddafcd9a8f86ad7409d4d8e91303083a4da2e3450fbca6f4cec84612a0b9f134cf20cd7e767d9f98836c122380ec84c608f053bc4 WHIRLPOOL bc0d13a22c98d2754795758b44280039b6789e0100f94cceffa50082966c16b41895bebdd35223dde1644ea7ad8116039158675b2ff1b64e9883c4a2e47750f8
AUX dfhack-9999/01-compile-static-libraries-as.patch 2418 SHA256 2d13b801026ed0484e9d8db7aa68ac7ee9be2009391a1ddbfff8824bad6cf38e SHA512 a52b49e0d479bddb89d4cc49f9de24c0caa5f5ff3bea9cf6dffed12311adbc4414296eccb92f693af38694ed06eca117ef043947ccb1cc6fa6aaadf83fd21e63 WHIRLPOOL c16d3e117a1ff2a7de53e36a9128329f7902dd6849dcf93f2a9e53890014512e4084cffe44b4d4fd39286061798b846276e99d0cac1d7f518ddc75cf4b375e65
AUX dfhack-9999/02-drop-strange-build-options.patch 2038 SHA256 dd52200e6106b034ac22c308062dd2ef8de4c9a54ddd877e07737e4dbaeb59ee SHA512 fcd81edce8548cc1a830f92c97dc35a33f0a52cf778c6d50f55249696d90adcfa27ac08a9dca0913d671c09829e6e289361770f1fc5648a74367fa4a3509281f WHIRLPOOL 1b139665f085e8e99c5535c063348cd6dab28936a10d72892e898e463c17fd40824194df155855859142ef4092deb096ae004bedd9608b8712c339fbcbc0375a
AUX dfhack-9999/03-configurable-install-paths.patch 3975 SHA256 bdfd0d8285089a51043ea08e2db78ae47cf7e11235230b0b23760211afff86e4 SHA512 82a303a5392971010e0c80138c3a2ba178bbbd7a9d69f3dc90a87698e5f8b630014cfd867e1cfeefbf14ce73978f56f1068e9be88e0bdc9eba6b46748b2bceca WHIRLPOOL 0b0d92af256cd88c6cec5ad1efb4951e48ec944aaf8882b4cac68d2059652080dd05137f537376844c2a5f066345f5b13711c5269d3dffa007601d14caeeb979
@@ -14,8 +24,19 @@ AUX dfhack-9999/07-startup-scripts-configurable.patch 9738 SHA256 a107a4693ed5c8
AUX dfhack-9999/08-ruby-plugin-configurable-paths.patch 19636 SHA256 2a24c35f5e4b1cf060fd6f11a5ff4b438b1fafea6a7ece9b5e0f018d1dfcad46 SHA512 00130cc96695e40e47763e858dd73b739d083808b7f0bb1a097a8120c0b7c8d10306a3da0700aa42b69422a32b7814d40290228f26da4e486c5cbb507bdf139d WHIRLPOOL 80aaf69a4c4139096c120f837bcf25a37076269f0f0d3a6ae272fd95124a59c163595827ddb22361f37b79f15d0a3853601dd2c3fdc9682826679aea9fdf3098
AUX dfhack-9999/09-eggy-remove-annoying-banner.patch 662 SHA256 a139e7d33d1e6d708955572cae529dd2a56be4500ced49ae417c2f30808a3e14 SHA512 b77cf87d4d232779dd3f171364e6660af5a8e69889ca3b4d9b33ac0db4bde37a3851f23315f19b9bac4577050181f54222b57b0b78c8746407e69e7265d1b8b9 WHIRLPOOL 85728501157dcce4fa4a1b4da81ad8ff74ad7d701ed170ae5fa420977ebd4f1992b015f6d19a1ebfff14de90f43764e1521d3188db569b9a71427e966c2d40f2
AUX dfhack-9999/series 410 SHA256 666ee96606c1b8ff23bff91d5ad6d6f788427ba0ff4affd4e0d4b34e9a22f391 SHA512 852b5ba7928d3040f90f5c8ddafcd9a8f86ad7409d4d8e91303083a4da2e3450fbca6f4cec84612a0b9f134cf20cd7e767d9f98836c122380ec84c608f053bc4 WHIRLPOOL bc0d13a22c98d2754795758b44280039b6789e0100f94cceffa50082966c16b41895bebdd35223dde1644ea7ad8116039158675b2ff1b64e9883c4a2e47750f8
+AUX isoworld-0.34.11.3_p20130302/01-missing-include-dir.patch 491 SHA256 00bfd01587e25eeb4c93c3100bbf6872517f214e75a2824c92690c7a3159735e SHA512 267614162fa3d92e6e49783d11c211f55f2d235212fd2538421093f5f59c37509938833e5475a53cd1dc9f96435609f96865834871b373f04e84f7504f7018df WHIRLPOOL bf6c572b9f9db9900196d55fcf2dc26be165cc696dc5cd73454846fcfa6919259c3f71e06dba692addcd517cdebb6e9ee91e48992bc74c8f1fdc0d199f293978
+AUX isoworld-0.34.11.3_p20130302/series 106 SHA256 6c265ab0eac63e1b43b9bb9f698ea0b2281db81ea0a67da8602810613b6c0f00 SHA512 22e5f26edb861019d6fb2fdd6959d3efc3fc8687dc545256c34fe2f16e790ca51cdc3d10476f8d4e9ee6a755ed49414abe1c1fb633fca71aee5928cc2b617989 WHIRLPOOL e54a2c64a845f3a643a9f7cfc4fc447986aa83e502ec229c7a9866f9dc2cbe33548cbb9eb8f5dd2167606637230187e9e2a5955427a59e5a52de8994f16498f4
AUX isoworld-9999/01-missing-include-dir.patch 491 SHA256 00bfd01587e25eeb4c93c3100bbf6872517f214e75a2824c92690c7a3159735e SHA512 267614162fa3d92e6e49783d11c211f55f2d235212fd2538421093f5f59c37509938833e5475a53cd1dc9f96435609f96865834871b373f04e84f7504f7018df WHIRLPOOL bf6c572b9f9db9900196d55fcf2dc26be165cc696dc5cd73454846fcfa6919259c3f71e06dba692addcd517cdebb6e9ee91e48992bc74c8f1fdc0d199f293978
AUX isoworld-9999/series 106 SHA256 6c265ab0eac63e1b43b9bb9f698ea0b2281db81ea0a67da8602810613b6c0f00 SHA512 22e5f26edb861019d6fb2fdd6959d3efc3fc8687dc545256c34fe2f16e790ca51cdc3d10476f8d4e9ee6a755ed49414abe1c1fb633fca71aee5928cc2b617989 WHIRLPOOL e54a2c64a845f3a643a9f7cfc4fc447986aa83e502ec229c7a9866f9dc2cbe33548cbb9eb8f5dd2167606637230187e9e2a5955427a59e5a52de8994f16498f4
+AUX stonesense-0.34.11.3_p20130302/01-null-isn-t-an-int32.patch 2293 SHA256 c140f17f9ad485b43ab2b6de8e1ab88ff8e3f6748a233d7d34d63e79a9f8074e SHA512 84ab7ebd25505515085c3c6c2c903d4aa51d8432b8c750a4f66d436426ad9963c07fa5019e24f0ca6d5618be329b35673a819443d092460e55bb6bb829dd4760 WHIRLPOOL 3beb7cc546b1f5eba970628e3a263e2536f881ae1e21115df19c4979b9c267d66ba060bf16f78a46675fe96b2f18fb7281ba1a9dd1695e3e5f0df4147bcb78b7
+AUX stonesense-0.34.11.3_p20130302/02-configurable-install-paths.patch 1388 SHA256 03ac914c0fbee6d27b68c075d91b8b315179d9cb91944da731006241e0589dbb SHA512 b7b75f33b9aefe91081f4cede21b79b7583374ea5f5608cd4982a6ba5ad35006986ede06985bac70f5260610f2b32ac05cc06e90a983dbc6e85e7346da084d96 WHIRLPOOL 677942b840640ce40a3e93d28265a5f39c778fe369c4de27eee382d8a83e063a775477f5434f754173de88c2a0bf46750006ca11294b244fffe4f3ec5ba80d5f
+AUX stonesense-0.34.11.3_p20130302/03-don-t-segfault-if-logfile-is.patch 817 SHA256 7fd33d13206ef38bca971856d9cfff0fbef88f1e7685111e00fa13b780cc9ecb SHA512 2ff023f34a1cf8718a3954e3a7584d07a1716b67756473d0852863f182c55bcde209921a9e26e1efeffde17ae42ab87c322915d74f2661b79ec49dd158df7cd1 WHIRLPOOL 1c88b645f01d651896b951acbc97d610d986a7d756cb0d58cc9c3c9caaa3873c18d191c46238ad13e050047476cc2589ae7f40614f0b8d3a52bb24fa58325976
+AUX stonesense-0.34.11.3_p20130302/04-compile-time-configuration-of.patch 7408 SHA256 2a5cada5aaffa02feb7344646d7d781a02efd48814dc9bd49804bfd604794a7c SHA512 2158737598af4faac3ae3680f0c41206150e57164b3313af492e7848414774768131acae4afc3093fea6361c3acfb4ad52f841d420fac92ff7b98049c89f7219 WHIRLPOOL 94ee56857a2558b1cb669cca632b79d6cd1cb51735e3a356253f5229118f527a6108d9d1a26340aac0fecc0a67d8cd5e9fe23e9ef7355c3b1b5b66454007ca47
+AUX stonesense-0.34.11.3_p20130302/05-compile-time-configurable-log.patch 1000 SHA256 48994c657edeaa5d29f2ef6e016503bfddf980bfe924ec847994f44a86a5b35d SHA512 579c28c907a490de5cf8fad5ed6b0b74abf51c967994b0888af8dab432157f1bc4ba20a73bb03f59b3cc3736c69079a9efb2c3d203eeecdcc33e9a44b4bda6bd WHIRLPOOL 08899e1bf50d7a621b56683519577d53ebb8b59d08273af7124a86fe6e1fca2338afd654e93477a6ca58b9482e78ac00e2a39e997586e78d6f67649bd6fc14dc
+AUX stonesense-0.34.11.3_p20130302/06-fix-b0rked-xml-file.patch 1079 SHA256 d45d2e9f4c4707afdb5de1f9bded8a6bfebd4e9a530f7f50fae0d17fba1175ec SHA512 eca7dea452208b457730432f11d3206bd3cd7d440a7d1407d30381298621ac795ac7329a43b56d7d9b3a38ff8b0fb724d2a7f3469db4f5754fcc432e8f444dd6 WHIRLPOOL 28303997fe25b1fc7f1c7c0a2405c03ca053263d85d2cb4343e7d53d783de15132b1e400d2b920a71f9731b9da13cebc8480f15f9f2ebaf94c93ff6b33601de2
+AUX stonesense-0.34.11.3_p20130302/07-compile-time-configurable-dump.patch 4364 SHA256 c4b6e94399afd07aac3595c6dc2865b9e8965faae68a7e445d89371fdbe2e69e SHA512 27b86a0530be876d5d8712cef89786b5d35c1fe7d441155fcd804d71ac797fc8cb2d76688f4c0b7fe2341a2f0b1085ec0a035acfe7cb3e3879b614f8e2bf5c9d WHIRLPOOL be375a3af6e4c427a1f0b1c5fa9c15a837849422c0b3a9ab6048a6bad189771a75cf9ae25e5da9f3dff4fc988c61ba497070d406d70fd5e342685da8e2f18b91
+AUX stonesense-0.34.11.3_p20130302/08-compile-time-configurable.patch 517 SHA256 ae777e95df2a6222cc5b5b011a2be2d4377b658bafc67818cd45fa2f440b19d6 SHA512 59b60293c7db910cbe32aff5850b1bb2deb8eea40f543806033ca35d357f1b42ed2ac955106c24ac8a787cd6a88992647228becbc143a544ec55a3613f47aa3e WHIRLPOOL d9a61b9897b405b9a9dc9026fd5d29cc2502b9378ecb24fa7a220ce95c01666925b91165eba6d393bc5975624a6703a205b750d5641ddd7a8f5fb7d1c7576f8d
+AUX stonesense-0.34.11.3_p20130302/series 362 SHA256 46867ba655615440c4a1c04a1022033df110d134e11afff3ca59e5f5355aabc2 SHA512 4c791888240e965c86dd5899870b10ac0e16fdd19fb79ce4a4bd8a4e531c5a866553d568578a723b2856767cecf30e5400fb5fb99f926f00119f37621108770c WHIRLPOOL ec5b6ee427e9851abca3aa6b0142fdd8f27a2543c13d0645cb6e2ede1eba6386616533ee11ce3a83d541b48236cdc6ba80555549625d17319278d7f58d1f190a
AUX stonesense-9999/01-null-isn-t-an-int32.patch 2293 SHA256 c140f17f9ad485b43ab2b6de8e1ab88ff8e3f6748a233d7d34d63e79a9f8074e SHA512 84ab7ebd25505515085c3c6c2c903d4aa51d8432b8c750a4f66d436426ad9963c07fa5019e24f0ca6d5618be329b35673a819443d092460e55bb6bb829dd4760 WHIRLPOOL 3beb7cc546b1f5eba970628e3a263e2536f881ae1e21115df19c4979b9c267d66ba060bf16f78a46675fe96b2f18fb7281ba1a9dd1695e3e5f0df4147bcb78b7
AUX stonesense-9999/02-configurable-install-paths.patch 1388 SHA256 03ac914c0fbee6d27b68c075d91b8b315179d9cb91944da731006241e0589dbb SHA512 b7b75f33b9aefe91081f4cede21b79b7583374ea5f5608cd4982a6ba5ad35006986ede06985bac70f5260610f2b32ac05cc06e90a983dbc6e85e7346da084d96 WHIRLPOOL 677942b840640ce40a3e93d28265a5f39c778fe369c4de27eee382d8a83e063a775477f5434f754173de88c2a0bf46750006ca11294b244fffe4f3ec5ba80d5f
AUX stonesense-9999/03-don-t-segfault-if-logfile-is.patch 817 SHA256 7fd33d13206ef38bca971856d9cfff0fbef88f1e7685111e00fa13b780cc9ecb SHA512 2ff023f34a1cf8718a3954e3a7584d07a1716b67756473d0852863f182c55bcde209921a9e26e1efeffde17ae42ab87c322915d74f2661b79ec49dd158df7cd1 WHIRLPOOL 1c88b645f01d651896b951acbc97d610d986a7d756cb0d58cc9c3c9caaa3873c18d191c46238ad13e050047476cc2589ae7f40614f0b8d3a52bb24fa58325976
@@ -30,5 +51,6 @@ AUX stonesense/0002-compile-time-configuration-of-magic-cwd.patch 7753 SHA256 79
AUX stonesense/0003-screenshots-in-home-dir.patch 2578 SHA256 88bc1a28442dfe8e5ff08e27e82de6443a3c5bccf49d7bcb2a26637a71ae3e18 SHA512 988efaba82e96149641e8dd6d8769b3ac1d890ebaa35128507a8f0d633af947ad9d8090758e1734a2f9b118c5404e4d712e2abb9a4e971f980f4163c0b646f5b WHIRLPOOL f3f03c297fbd39f27b5957cca0073a3420a10ba0a1741cf73f210cf680c2083c761cb68a637663281e69d1fee9e7b5049c3074f18fed394f48888bc377f5bb70
AUX stonesense/0004-create-various-output-files-in-HOME-not-cwd.patch 5217 SHA256 3ac09c948cc36b04058a82cb9f04e0ff26ffee765bf2300a46eac09cebc867de SHA512 9f0c2c5f4a2d15c99e06d30e1d3825527449f63de4d370533f07ce4324d0afbd1a2190dcf9589cbd326fd0f9705333bb436bed74e72ac4a7485f002fa3600639 WHIRLPOOL cbe81a086301a3dc218f31e3b1edb837bd81a25d151e5d46c0988d080165e95faac8ab14a97995a7092262542cbb8b29a2a540fe45a5c74b520e47ec5ab0f420
EBUILD dfhack-0.34.11.2.ebuild 5523 SHA256 c126fc718aaddcfd1f62c04a5ce37add8c6ecfb72e0fa73d8048383e02d048f0 SHA512 ab671faa41ab7cff26b933ef816fba8f5c86389769f5dcf1da6a5ee7413324d50ebcd7e60812935fd0ddd70688461ca23d55edf499ffffec89e3ff3ad321c2e8 WHIRLPOOL 11246c870f497929299ccf75c91f77481a6d3faccc9a8646c668836b22906d089e04826b3f67f5dcc8640b918a9e3a0e1fa9821d7d17664ec58f8a88db498170
-EBUILD dfhack-9999.ebuild 8400 SHA256 98920d05ed07b87e3900cc65a141178bfb51d85578038c89a80041420de62cc8 SHA512 1a7a44b5ebbce8906d8d0fc0e5e9e9e55fbe2061ebe75ebc2f7b02aa5b2f24ea77a9ae6469d38b0f12cdd4e78bcbecfe75d60a053a36c6dbcd7eb1ba6ff3f662 WHIRLPOOL e868491590c285d674e9d7e72abb15dc55fe853a152f8e306a5d7ff147579bc8215c6aaeb6ea9d2696e29791cd35da1083593bea892884733e947a2b721455a9
+EBUILD dfhack-0.34.11.3_p20130302.ebuild 8562 SHA256 6fbe01497156fbc370cd670d4b69003788430fe37e2ecfd80a9f0f6fea1444a1 SHA512 a4de96200bb4a5dda7cac98fe82cf038e5c36a2e4c65f2f19b893483f80864d343f72a484746bbb8ffe79adf2dd0ce08a43df80dc693e115651169fb48fc1b19 WHIRLPOOL 6d3c12daa228bb4fe6a0b4bb25366c2be4f5e950e1d5e63ca2f0bb889cfeb13a68921b14350283c5432a31435d33b53bc7e6f146e32493cf2ac97a19d7c43440
+EBUILD dfhack-9999.ebuild 8511 SHA256 df36a4d5b563b9477f7bf058652a0304cae99a3dd0940855b96136bf90b2e595 SHA512 b73c84664dd1a2f30b950eb061bea811b9368ef087e6907f067e444db8a66f77d8684aac5053ba472673761b949c394f274f95fedf6b34e12948f65de1c9acb3 WHIRLPOOL bdef3f0f92b7564eca460ab717ece45df9778b266a4a3c67d4913632c7740bdbe699718b32d7f712ffd40642078a63ee5cd99b06431fdf9bccf3b835b050aae6
MISC metadata.xml 721 SHA256 92c6cfa56d7afc563cd87101664f1200e50d02fedd5a7a3d19b8a549f042e8bc SHA512 009c4d722c0515a03323e711440db763bb47697719017d0ea8aa2da396739e55a125fcebdd94a1103f48ddf79735523e39ca9edfba77d67ed77c735a62e83a1f WHIRLPOOL ca03b60ff2b56d2bffabfdd8c26f980e5fe6ee70fb50cf13399c1fed55f3a6e7ae28ec7b4290df41f6ae27473b8ef561fe2c82597ef4aca771893a7664786bbb
diff --git a/games-util/dfhack/dfhack-0.34.11.3_p20130302.ebuild b/games-util/dfhack/dfhack-0.34.11.3_p20130302.ebuild
new file mode 100644
index 00000000..d3d5c72b
--- /dev/null
+++ b/games-util/dfhack/dfhack-0.34.11.3_p20130302.ebuild
@@ -0,0 +1,254 @@
+# By eroen, 2012-2013
+# Distributed under the terms of the ISC licence
+# $Header: $
+
+EAPI=5
+inherit base eutils versionator multilib git-2 cmake-utils games
+
+if [[ ${PV} == 9999 ]]; then
+ MY_PV="0.34.11-r3"
+else
+ MY_PV="$(replace_version_separator 3 '-r' \
+ $(get_version_component_range -4))"
+fi
+MY_P=${PN}-${MY_PV}
+df_PV="34.11"
+
+DESCRIPTION="Memory hacking library for Dwarf Fortress and a set of tools that
+use it"
+HOMEPAGE="https://github.com/peterix/dfhack"
+EGIT_REPO_URI="git://github.com/peterix/dfhack.git"
+EGIT_HAS_SUBMODULES=yes
+
+if [[ ${PV} == 9999 ]]; then
+ KEYWORDS=
+else
+ if [[ $(get_version_component_count) -le 4 ]]; then
+ EGIT_COMMIT=${MY_PV}
+ else
+ EGIT_COMMIT=18a91ef221f531307ac5ddbe29532a3d6e0a04ec
+ fi
+ KEYWORDS="~amd64"
+fi
+
+CMAKE_MIN_VERSION=2.8.9
+CMAKE_REMOVE_MODULES_LIST="FindCurses FindDoxygen CMakeVS10FindMake"
+
+LICENSE="ZLIB MIT BSD-2"
+SLOT="0"
+IUSE="api dfusion doc egg isoworld minimal ssense"
+
+HDEPEND="
+ dev-perl/XML-LibXML
+ dev-perl/XML-LibXSLT
+ doc? ( app-doc/doxygen )"
+LIBRARY_DEPEND="
+ app-emulation/emul-linux-x86-baselibs[development]
+ ssense? ( media-libs/fontconfig[abi_x86_32]
+ media-libs/freetype[abi_x86_32]
+ x11-libs/libICE[abi_x86_32]
+ x11-libs/libSM[abi_x86_32]
+ x11-libs/libX11[abi_x86_32]
+ x11-libs/libXcursor[abi_x86_32]
+ x11-libs/libXext[abi_x86_32]
+ x11-libs/libXinerama[abi_x86_32]
+ x11-libs/libXrandr[abi_x86_32] )"
+DEPEND="${LIBRARY_DEPEND}
+ ${HDEPEND}"
+RDEPEND="${LIBRARY_DEPEND}
+ games-simulation/dwarffortress
+ ssense? ( app-emulation/emul-linux-x86-opengl
+ app-emulation/emul-linux-x86-xlibs )"
+
+## missing multilib
+#dev-lang/lua - binary bundled
+#dev-libs/protobuf - bundled
+# sys-libs/zlib (libz.so.1) - baselibs
+## ssense
+#allegro - binary bundled
+# dev-libs/atk (libatk-1.0.so.0) - gtklibs
+# dev-libs/glib (libgthread-2.0.so.0,libglib-2.0.so.0,libgobject-2.0.so.0,libgmodule-2.0.so.0,libgio-2.0.so.0) - baselibs
+# media-libs/fontconfig (libfontconfig.so.1)
+# media-libs/freetype (libfreetype.so.6)
+# media-libs/jpeg:62 (libjpeg.so.62) - baselibs
+# virtual/glu (libGLU.so.1) - opengl
+# media-libs/libpng:1.2 (libpng12.so.0) - baselibs
+# virtual/opengl (libGL.so.1)
+# sys-libs/zlib (libz.so.1) - baselibs
+# x11-libs/cairo (libcairo.so.2) - gtklibs
+# x11-libs/gdk-pixbuf (libgdk_pixbuf) - gtklibs
+# x11-libs/gtk+ (libgdk-x11-2.0.so.0,libgtk-x11-2.0.so.0) - gtklibs
+# x11-libs/libICE (libICE.so.6)
+# x11-libs/libSM (libSM.so.6)
+# x11-libs/libX11 (libX11.so.6)
+# x11-libs/libXcursor (libXcursor.so.1)
+# x11-libs/libXext (libXext.so.6)
+# x11-libs/libXinerama (libXinerama.so.1)
+# x11-libs/libXrandr (libXrandr.so.2)
+# x11-libs/pango (libpangocairo-1.0.so.0,libpango-1.0.so.0,libpangoft2-1.0.so.0) - gtklibs
+
+multilib_toolchain_setup x86
+if use egg; then
+ dfhack_libdir="$(games_get_libdir)"
+else
+ dfhack_libdir="$(games_get_libdir)/${P}"
+fi
+QA_PREBUILT+="${dfhack_libdir}"/libruby.so
+
+pkg_setup() {
+ df_executable="df-${df_PV}"
+ dfhack_datadir="${GAMES_DATADIR}/${P}"
+ dfhack_docdir="/usr/share/doc/${P}"
+ dfhack_statedir="${GAMES_STATEDIR}/${P}"
+}
+
+src_prepare() {
+ epatch "${FILESDIR}"/${P}/01-compile-static-libraries-as.patch
+ epatch "${FILESDIR}"/${P}/02-drop-strange-build-options.patch
+ epatch "${FILESDIR}"/${P}/03-configurable-install-paths.patch
+ epatch "${FILESDIR}"/${P}/04-compile-time-configurable.patch
+ epatch "${FILESDIR}"/${P}/05-compile-time-configurable-0.patch
+ epatch "${FILESDIR}"/${P}/06-compile-time-configurable-1.patch
+ epatch "${FILESDIR}"/${P}/07-startup-scripts-configurable.patch
+ epatch "${FILESDIR}"/${P}/08-ruby-plugin-configurable-paths.patch
+ epatch "${FILESDIR}"/${P}/09-eggy-remove-annoying-banner.patch
+
+ pushd "${S}"/depends/clsocket
+ epatch "${FILESDIR}"/clsocket/0001-Compile-static-library-as-PIC.patch
+ popd
+
+ if use ssense; then
+ pushd "${S}"/plugins/stonesense
+ epatch "${FILESDIR}"/stonesense-${PV}/01-null-isn-t-an-int32.patch
+ epatch "${FILESDIR}"/stonesense-${PV}/02-configurable-install-paths.patch
+ epatch "${FILESDIR}"/stonesense-${PV}/03-don-t-segfault-if-logfile-is.patch
+ epatch "${FILESDIR}"/stonesense-${PV}/04-compile-time-configuration-of.patch
+ epatch "${FILESDIR}"/stonesense-${PV}/05-compile-time-configurable-log.patch
+ epatch "${FILESDIR}"/stonesense-${PV}/06-fix-b0rked-xml-file.patch
+ epatch "${FILESDIR}"/stonesense-${PV}/07-compile-time-configurable-dump.patch
+ epatch "${FILESDIR}"/stonesense-${PV}/08-compile-time-configurable.patch
+ # Patches that no longer fit upstream, not updated yet.
+ #epatch "${FILESDIR}"/stonesense/0003-screenshots-in-home-dir.patch
+ popd
+ fi
+ if use isoworld; then
+ pushd "${S}"/plugins/isoworld
+ epatch "${FILESDIR}"/isoworld-${PV}/01-missing-include-dir.patch
+ popd
+ ewarn "The isoworld plugin requires agui, and will probably fail to build"
+ fi
+
+ # Fix other scripts
+# if use dfusion; then
+# sed -f - -i plugins/Dfusion/luafiles/{init.lua,friendship/{init.lua,plugin.lua,install.lua},triggers/{plugin.lua,functions_menu.lua},friendship_civ/init.lua,common.lua,embark/{init.lua,plugin.lua},migrants/{init.lua,plugin.lua},xml_struct.lua,xml_types.lua} <<- EOF || die
+# s:("dfusion/:("${datadir}/dfusion/:
+# s:('dfusion/:('${datadir}/dfusion/:
+# EOF
+# sed -i "s:libs/Dwarf_Fortress:Dwarf_Fortress:" plugins/Dfusion/luafiles/common.lua
+# fi
+
+ ##Issues:
+ # - df version
+ # - dfusion is strange. It's always been that, though.
+ # - prebuilt ruby
+ # - prebuilt lua
+ # - isoworld requires agui
+ # - prebuilt allegro for stonesense.
+ # - stonesense conf file: /usr/share/games/dfhack-9999/stonesense/init.txt
+ # Set in ./Config.cpp, installed together with the rest of the directory.
+ # - output files
+ # - - Make symlinks to (unversioned) /var
+}
+
+src_configure() {
+ mycmakeargs=(
+ "$(cmake-utils_use api BUILD_DEVEL)"
+ "$(cmake-utils_use dfusion BUILD_DFUSION)"
+ "$(cmake-utils_use doc BUILD_DOXYGEN)"
+ "$(cmake-utils_use egg BUILD_EGGY)"
+ "$(cmake-utils_use isoworld BUILD_ISOWORLD)"
+ "-DBUILD_LIBRARY=ON"
+ "-DBUILD_PLUGINS=ON"
+ "-DBUILD_RUBY=ON"
+ "-DBUILD_SKELETON=OFF"
+ "$(cmake-utils_use ssense BUILD_STONESENSE)"
+ "-DCMAKE_INSTALL_PREFIX=${GAMES_DATADIR}"
+ "-DCONSOLE_NO_CATCH=OFF"
+ "-DDL_RUBY=ON"
+
+ "-DDF_EXECUTABLE=${df_executable}"
+ "-DDFHACK_STATEDIR=${GAMES_STATEDIR}/${P}"
+ "-DDFHACK_BINARY_DESTINATION=${GAMES_BINDIR}"
+ "-DDFHACK_LIBRARY_DESTINATION=${dfhack_libdir}"
+ "-DDFHACK_EGGY_DESTINATION=${dfhack_libdir}"
+ "-DDFHACK_DATA_DESTINATION=${dfhack_datadir}"
+ "-DDFHACK_PLUGIN_DESTINATION=${dfhack_datadir}/plugins"
+ "-DDFHACK_LUA_DESTINATION=${dfhack_datadir}/lua"
+ "-DDFHACK_RUBY_DESTINATION=${dfhack_datadir}/ruby"
+ "-DDFHACK_INCLUDES_DESTINATION=/usr/games/include"
+ "-DDFHACK_DEVLIB_DESTINATION=${dfhack_datadir}/devlib"
+ "-DDFHACK_USERDOC_DESTINATION=${dfhack_docdir}"
+ "-DDFHACK_DEVDOC_DESTINATION=${dfhack_docdir}/dev"
+ "-DSSENSE_ALLEGRO_DESTINATION=${dfhack_libdir}"
+ "-DSSENSE_RES_DESTINATION=${dfhack_datadir}/stonesense"
+ "-DSSENSE_DOC_DESTINATION=${dfhack_docdir}/stonesense"
+ )
+ if use minimal; then
+ mycmakeargs+=(
+ "-DBUILD_DEV_PLUGINS=OFF"
+ "-DBUILD_DWARFEXPORT=OFF"
+ "-DBUILD_MAPEXPORT=OFF"
+ "-DBUILD_SUPPORTED=OFF"
+ )
+ else
+ mycmakeargs+=(
+ "-DBUILD_DEV_PLUGINS=ON"
+ "-DBUILD_DWARFEXPORT=ON"
+ "-DBUILD_MAPEXPORT=ON"
+ "-DBUILD_SUPPORTED=ON"
+ )
+ fi
+
+ cmake-utils_src_configure
+}
+
+src_compile() {
+ cmake-utils_src_compile
+}
+
+src_install() {
+ cmake-utils_src_install
+ mv "${D}/${GAMES_BINDIR}/dfhack" \
+ "${D}/${GAMES_BINDIR}/dfhack-${PV}" || die
+ mv "${D}/${GAMES_BINDIR}/dfhack-run" \
+ "${D}/${GAMES_BINDIR}/dfhack-run-${PV}" || die
+ dodir "${dfhack_statedir}"
+ if use ssense; then
+ dodir "${GAMES_SYSCONFDIR#/}/${P}/stonesense"
+ mv "${D}/${dfhack_datadir#/}/stonesense/init.txt" \
+ "${D}/${GAMES_SYSCONFDIR#/}/${P}/stonesense/init.txt" || die
+ dosym "${ROOT}${GAMES_SYSCONFDIR#/}/${P}/stonesense/init.txt" \
+ "${dfhack_datadir#/}/stonesense/init.txt"
+ elog
+ elog "The Stonesense configuration file can be found at"
+ elog "${GAMES_SYSCONFDIR#/}/${P}/stonesense/init.txt"
+ fi
+ prepgamesdirs
+ fperms g+w "${dfhack_statedir}" || die
+ # portage user needs to be able to link:
+ ( ! use egg || fperms o+rx "$(games_get_libdir)"/libegg.so ) || die
+}
+
+pkg_postinst() {
+ games_pkg_postinst
+ elog
+ elog "Due to Dwarf Fortress' special needs regarding working directory,"
+ elog "specifying relative paths to DFHack plugins can give unintended"
+ elog "results."
+ elog
+ elog "DFHack installs custom raw files for dwarffortress in"
+ elog "${dfhack_datadir}/raw"
+ elog "To use them, copy them into your raw folder and apply the diffs."
+ elog
+ elog "To start DFHack, please run dfhack-${PV}"
+}
diff --git a/games-util/dfhack/dfhack-9999.ebuild b/games-util/dfhack/dfhack-9999.ebuild
index 43183040..e42f4b42 100644
--- a/games-util/dfhack/dfhack-9999.ebuild
+++ b/games-util/dfhack/dfhack-9999.ebuild
@@ -3,24 +3,32 @@
# $Header: $
EAPI=5
-
inherit base eutils versionator multilib git-2 cmake-utils games
-if [[ ${PV} == "9999" ]]; then
- MY_PV="0.34.11-r2"
+if [[ ${PV} == 9999 ]]; then
+ MY_PV="0.34.11-r3"
else
- MY_PV="$(replace_version_separator 3 '-r')"
+ MY_PV="$(replace_version_separator 3 '-r' \
+ $(get_version_component_range -4))"
fi
-MY_P="${PN}-${MY_PV}"
+MY_P=${PN}-${MY_PV}
df_PV="34.11"
DESCRIPTION="Memory hacking library for Dwarf Fortress and a set of tools that
use it"
HOMEPAGE="https://github.com/peterix/dfhack"
-EGIT_HAS_SUBMODULES="yes"
EGIT_REPO_URI="git://github.com/peterix/dfhack.git"
-if [[ ! ${PV} == "9999" ]]; then
- EGIT_COMMIT="${MY_PV}"
+EGIT_HAS_SUBMODULES=yes
+
+if [[ ${PV} == 9999 ]]; then
+ KEYWORDS=
+else
+ if [[ $(get_version_component_count) -le 4 ]]; then
+ EGIT_COMMIT=${MY_PV}
+ else
+ :
+ fi
+ KEYWORDS="~amd64"
fi
CMAKE_MIN_VERSION=2.8.9
@@ -28,7 +36,6 @@ CMAKE_REMOVE_MODULES_LIST="FindCurses FindDoxygen CMakeVS10FindMake"
LICENSE="ZLIB MIT BSD-2"
SLOT="0"
-KEYWORDS="~amd64"
IUSE="api dfusion doc egg isoworld minimal ssense"
HDEPEND="
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/01-compile-static-libraries-as.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/01-compile-static-libraries-as.patch
new file mode 100644
index 00000000..2166a50a
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/01-compile-static-libraries-as.patch
@@ -0,0 +1,65 @@
+Compile static libraries as PIC.
+
+From: eroen <eroen@occam.eroen.eu>
+
+Otherwise, we get position dependent textrels in the shared libraries
+that link against them, which is slightly bad for performance (and very
+bad for portability).
+
+Cross-platform support for handling this was added in cmake 2.8.9.
+---
+ CMakeLists.txt | 2 +-
+ depends/md5/CMakeLists.txt | 3 ++-
+ depends/tinyxml/CMakeLists.txt | 3 ++-
+ depends/tthread/CMakeLists.txt | 3 ++-
+ 4 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index c7c84e8..abff6a8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -11,7 +11,7 @@ else(CMAKE_CONFIGURATION_TYPES)
+ endif(CMAKE_CONFIGURATION_TYPES)
+
+ ## some generic CMake magic
+-cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
++cmake_minimum_required(VERSION 2.8.9 FATAL_ERROR)
+ project(dfhack)
+
+ if(MSVC)
+diff --git a/depends/md5/CMakeLists.txt b/depends/md5/CMakeLists.txt
+index 69e0cf0..df14e3c 100644
+--- a/depends/md5/CMakeLists.txt
++++ b/depends/md5/CMakeLists.txt
+@@ -1,3 +1,4 @@
+ project(dfhack-md5)
+ ADD_LIBRARY(dfhack-md5 STATIC EXCLUDE_FROM_ALL md5.cpp md5wrapper.cpp)
+-IDE_FOLDER(dfhack-md5 "Depends")
+\ No newline at end of file
++set_target_properties(dfhack-md5 PROPERTIES POSITION_INDEPENDENT_CODE True)
++IDE_FOLDER(dfhack-md5 "Depends")
+diff --git a/depends/tinyxml/CMakeLists.txt b/depends/tinyxml/CMakeLists.txt
+index 7d92492..f97f4bc 100644
+--- a/depends/tinyxml/CMakeLists.txt
++++ b/depends/tinyxml/CMakeLists.txt
+@@ -1,3 +1,4 @@
+ project(dfhack-tinyxml)
+ ADD_LIBRARY(dfhack-tinyxml STATIC EXCLUDE_FROM_ALL tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp)
+-IDE_FOLDER(dfhack-tinyxml "Depends")
+\ No newline at end of file
++set_target_properties(dfhack-tinyxml PROPERTIES POSITION_INDEPENDENT_CODE True)
++IDE_FOLDER(dfhack-tinyxml "Depends")
+diff --git a/depends/tthread/CMakeLists.txt b/depends/tthread/CMakeLists.txt
+index d34c19c..2757a6e 100644
+--- a/depends/tthread/CMakeLists.txt
++++ b/depends/tthread/CMakeLists.txt
+@@ -1,6 +1,7 @@
+ PROJECT(dfhack-tinythread)
+ ADD_LIBRARY(dfhack-tinythread STATIC EXCLUDE_FROM_ALL tinythread.cpp)
++set_target_properties(dfhack-tinythread PROPERTIES POSITION_INDEPENDENT_CODE True)
+ if(UNIX)
+ target_link_libraries(dfhack-tinythread pthread)
+ endif()
+-IDE_FOLDER(dfhack-tinythread "Depends")
+\ No newline at end of file
++IDE_FOLDER(dfhack-tinythread "Depends")
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/02-drop-strange-build-options.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/02-drop-strange-build-options.patch
new file mode 100644
index 00000000..cedac0f2
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/02-drop-strange-build-options.patch
@@ -0,0 +1,52 @@
+drop strange build options
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ CMakeLists.txt | 4 ++--
+ depends/lua/CMakeLists.txt | 2 +-
+ library/CMakeLists.txt | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index abff6a8..194eec7 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -105,8 +105,8 @@ OPTION(BUILD_PLUGINS "Build the plugins." ON)
+ IF(UNIX)
+ add_definitions(-DLINUX_BUILD)
+ SET(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_C_FLAGS "-fvisibility=hidden -m32 -march=i686 -mtune=generic")
++ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -std=c++0x")
++ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+ ELSEIF(MSVC)
+ # 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")
+diff --git a/depends/lua/CMakeLists.txt b/depends/lua/CMakeLists.txt
+index b77bce6..e39eb04 100644
+--- a/depends/lua/CMakeLists.txt
++++ b/depends/lua/CMakeLists.txt
+@@ -12,7 +12,7 @@ ENDIF()
+
+ IF(UNIX)
+ add_definitions(-DLINUX_BUILD)
+- SET(CMAKE_C_FLAGS "-m32")
++ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ ENDIF()
+
+ SET (HDR_LIBLUA
+diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
+index 64dafd5..2538360 100644
+--- a/library/CMakeLists.txt
++++ b/library/CMakeLists.txt
+@@ -216,7 +216,7 @@ ADD_CUSTOM_TARGET(generate_headers DEPENDS ${dfapi_SOURCE_DIR}/include/df/codege
+ IF(UNIX)
+ # Don't produce debug info for generated stubs
+ SET_SOURCE_FILES_PROPERTIES(DataStatics.cpp DataStaticsCtor.cpp DataStaticsFields.cpp
+- PROPERTIES COMPILE_FLAGS "-g0 -O1")
++ PROPERTIES COMPILE_FLAGS "-g0")
+ ELSE(WIN32)
+ SET_SOURCE_FILES_PROPERTIES(DataStatics.cpp DataStaticsCtor.cpp DataStaticsFields.cpp
+ PROPERTIES COMPILE_FLAGS "/O1 /bigobj")
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/03-configurable-install-paths.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/03-configurable-install-paths.patch
new file mode 100644
index 00000000..35c957e2
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/03-configurable-install-paths.patch
@@ -0,0 +1,96 @@
+configurable install paths
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ CMakeLists.txt | 20 +++++++++++---------
+ library/CMakeLists.txt | 6 +++---
+ plugins/ruby/CMakeLists.txt | 4 ++--
+ 3 files changed, 16 insertions(+), 14 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 194eec7..4f196c9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -68,30 +68,32 @@ add_definitions(-DDFHACK_VERSION="${DFHACK_VERSION}")
+ # the dfhack libraries will be installed here:
+ IF(UNIX)
+ # put the lib into DF/hack
+- SET(DFHACK_LIBRARY_DESTINATION hack)
+- SET(DFHACK_EGGY_DESTINATION libs)
++ SET(DFHACK_LIBRARY_DESTINATION hack CACHE PATH "DFHACK_LIBRARY_DESTINATION")
++ SET(DFHACK_EGGY_DESTINATION libs CACHE PATH "DFHACK_EGGY_DESTINATION")
+ 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_EGGY_DESTINATION .)
+ ENDIF()
+ # external tools will be installed here:
+-SET(DFHACK_BINARY_DESTINATION .)
++SET(DFHACK_BINARY_DESTINATION . CACHE PATH "DFHACK_BINARY_DESTINATION")
+ # dfhack data goes here:
+-SET(DFHACK_DATA_DESTINATION hack)
++SET(DFHACK_DATA_DESTINATION hack CACHE PATH "DFHACK_DATA_DESTINATION")
+ # plugin libs go here:
+-SET(DFHACK_PLUGIN_DESTINATION hack/plugins)
++SET(DFHACK_PLUGIN_DESTINATION hack/plugins CACHE PATH "DFHACK_PLUGIN_DESTINATION")
+ # dfhack header files go here:
+-SET(DFHACK_INCLUDES_DESTINATION hack/include)
++SET(DFHACK_INCLUDES_DESTINATION hack/include CACHE PATH "DFHACK_INCLUDES_DESTINATION")
+ # dfhack lua files go here:
+-SET(DFHACK_LUA_DESTINATION hack/lua)
++SET(DFHACK_LUA_DESTINATION hack/lua CACHE PATH "DFHACK_LUA_DESTINATION")
++# dfhack ruby files go here:
++SET(DFHACK_RUBY_DESTINATION hack/ruby CACHE PATH "DFHACK_RUBY_DESTINATION")
+ # the windows .lib file goes here:
+ SET(DFHACK_DEVLIB_DESTINATION hack)
+
+ # user documentation goes here:
+-SET(DFHACK_USERDOC_DESTINATION hack)
++SET(DFHACK_USERDOC_DESTINATION hack CACHE PATH "DFHACK_USERDOC_DESTINATION")
+ # developer documentation goes here:
+-SET(DFHACK_DEVDOC_DESTINATION hack)
++SET(DFHACK_DEVDOC_DESTINATION hack CACHE PATH "DFHACK_DEVDOC_DESTINATION")
+
+ ## some options for the user/developer to play with
+ OPTION(BUILD_LIBRARY "Build the library that goes into DF." ON)
+diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
+index 2538360..18635ed 100644
+--- a/library/CMakeLists.txt
++++ b/library/CMakeLists.txt
+@@ -302,9 +302,9 @@ IF(UNIX)
+ else()
+ # On linux, copy our version of the df launch script which sets LD_PRELOAD
+ install(PROGRAMS ${dfhack_SOURCE_DIR}/package/linux/dfhack
+- DESTINATION .)
++ DESTINATION ${DFHACK_BINARY_DESTINATION})
+ install(PROGRAMS ${dfhack_SOURCE_DIR}/package/linux/dfhack-run
+- DESTINATION .)
++ DESTINATION ${DFHACK_BINARY_DESTINATION})
+ endif()
+ ELSE()
+ if(NOT BUILD_EGGY)
+@@ -330,7 +330,7 @@ install(FILES xml/symbols.xml
+ DESTINATION ${DFHACK_DATA_DESTINATION}) #linux: share/dfhack
+ #install the example autoexec file
+ install(FILES ../dfhack.init-example
+- DESTINATION ${DFHACK_BINARY_DESTINATION})
++ DESTINATION ${DFHACK_USERDOC_DESTINATION})
+
+ install(TARGETS dfhack-run dfhack-client binpatch
+ LIBRARY DESTINATION ${DFHACK_LIBRARY_DESTINATION}
+diff --git a/plugins/ruby/CMakeLists.txt b/plugins/ruby/CMakeLists.txt
+index 9d821f9..e6d3eff 100644
+--- a/plugins/ruby/CMakeLists.txt
++++ b/plugins/ruby/CMakeLists.txt
+@@ -35,7 +35,7 @@ ADD_DEPENDENCIES(ruby ruby-autogen-rb)
+ INSTALL(FILES ${RUBYLIB} DESTINATION ${DFHACK_LIBRARY_DESTINATION})
+
+ INSTALL(DIRECTORY .
+- DESTINATION hack/ruby
++ DESTINATION ${DFHACK_RUBY_DESTINATION}
+ FILES_MATCHING PATTERN "*.rb")
+
+-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/ruby-autogen.rb DESTINATION hack/ruby)
++INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/ruby-autogen.rb DESTINATION ${DFHACK_RUBY_DESTINATION})
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/04-compile-time-configurable.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/04-compile-time-configurable.patch
new file mode 100644
index 00000000..1c12d3b0
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/04-compile-time-configurable.patch
@@ -0,0 +1,142 @@
+compile-time configurable paths
+
+From: eroen <eroen@occam.eroen.eu>
+
+./hack/symbols.xml
+- Breaks startup
+
+./hack/lua
+./hack/ruby
+- Make noise on startup
+---
+ CMakeLists.txt | 4 ++++
+ depends/lua/include/luaconf.h | 8 ++++++++
+ library/Core.cpp | 6 +++++-
+ plugins/ruby/ruby.cpp | 8 ++++++++
+ plugins/sort.cpp | 8 ++++++++
+ 5 files changed, 33 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4f196c9..77a8d97 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -69,6 +69,7 @@ add_definitions(-DDFHACK_VERSION="${DFHACK_VERSION}")
+ IF(UNIX)
+ # put the lib into DF/hack
+ SET(DFHACK_LIBRARY_DESTINATION hack CACHE PATH "DFHACK_LIBRARY_DESTINATION")
++ ADD_DEFINITIONS(-DDFHACK_LIBRARY_DESTINATION="${DFHACK_LIBRARY_DESTINATION}")
+ SET(DFHACK_EGGY_DESTINATION libs CACHE PATH "DFHACK_EGGY_DESTINATION")
+ ELSE()
+ # windows is crap, therefore we can't do nice things with it. leave the libs on a nasty pile...
+@@ -79,14 +80,17 @@ ENDIF()
+ SET(DFHACK_BINARY_DESTINATION . CACHE PATH "DFHACK_BINARY_DESTINATION")
+ # dfhack data goes here:
+ SET(DFHACK_DATA_DESTINATION hack CACHE PATH "DFHACK_DATA_DESTINATION")
++ADD_DEFINITIONS(-DDFHACK_DATA_DESTINATION="${DFHACK_DATA_DESTINATION}")
+ # plugin libs go here:
+ SET(DFHACK_PLUGIN_DESTINATION hack/plugins CACHE PATH "DFHACK_PLUGIN_DESTINATION")
+ # dfhack header files go here:
+ SET(DFHACK_INCLUDES_DESTINATION hack/include CACHE PATH "DFHACK_INCLUDES_DESTINATION")
+ # dfhack lua files go here:
+ SET(DFHACK_LUA_DESTINATION hack/lua CACHE PATH "DFHACK_LUA_DESTINATION")
++ADD_DEFINITIONS(-DDFHACK_LUA_DESTINATION="${DFHACK_LUA_DESTINATION}")
+ # dfhack ruby files go here:
+ SET(DFHACK_RUBY_DESTINATION hack/ruby CACHE PATH "DFHACK_RUBY_DESTINATION")
++ADD_DEFINITIONS(-DDFHACK_RUBY_DESTINATION="${DFHACK_RUBY_DESTINATION}")
+ # the windows .lib file goes here:
+ SET(DFHACK_DEVLIB_DESTINATION hack)
+
+diff --git a/depends/lua/include/luaconf.h b/depends/lua/include/luaconf.h
+index 766752f..c73e094 100644
+--- a/depends/lua/include/luaconf.h
++++ b/depends/lua/include/luaconf.h
+@@ -98,8 +98,16 @@
+
+ #else /* }{ */
+
++#ifdef DFHACK_LUA_DESTINATION
++#define LUA_LDIR DFHACK_LUA_DESTINATION "/"
++#else
+ #define LUA_LDIR "./hack/lua/"
++#endif
++#ifdef DFHACK_DATA_DESTINATION
++#define LUA_CDIR DFHACK_DATA_DESTINATION "/"
++#else
+ #define LUA_CDIR "./hack/"
++#endif
+ #define LUA_PATH_DEFAULT \
+ LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" "./?.lua"
+ #define LUA_CPATH_DEFAULT \
+diff --git a/library/Core.cpp b/library/Core.cpp
+index 2021a8b..e72decd 100644
+--- a/library/Core.cpp
++++ b/library/Core.cpp
+@@ -879,7 +879,11 @@ bool Core::Init()
+
+ // find out what we are...
+ #ifdef LINUX_BUILD
+- const char * path = "hack/symbols.xml";
++ #ifdef DFHACK_DATA_DESTINATION
++ const char * path = DFHACK_DATA_DESTINATION "/symbols.xml";
++ #else
++ const char * path = "hack/symbols.xml";
++ #endif
+ #else
+ const char * path = "hack\\symbols.xml";
+ #endif
+diff --git a/plugins/ruby/ruby.cpp b/plugins/ruby/ruby.cpp
+index 69b9b15..534ad9f 100644
+--- a/plugins/ruby/ruby.cpp
++++ b/plugins/ruby/ruby.cpp
+@@ -315,7 +315,11 @@ static int df_loadruby(void)
+ #elif defined(__APPLE__)
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib";
+ #else
++ #ifdef DFHACK_LIBRARY_DESTINATION
++ DFHACK_LIBRARY_DESTINATION "/libruby.so";
++ #else
+ "hack/libruby.so";
++ #endif
+ #endif
+
+ libruby_handle = OpenPlugin(libpath);
+@@ -418,7 +422,11 @@ static void df_rubythread(void *p)
+
+ // load the default ruby-level definitions in the background
+ state=0;
++ #ifdef DFHACK_RUBY_DESTINATION
++ rb_eval_string_protect("require '" DFHACK_RUBY_DESTINATION "/ruby'", &state);
++ #else
+ rb_eval_string_protect("require './hack/ruby/ruby'", &state);
++ #endif
+ if (state)
+ dump_rb_error();
+
+diff --git a/plugins/sort.cpp b/plugins/sort.cpp
+index 95ae109..510e288 100644
+--- a/plugins/sort.cpp
++++ b/plugins/sort.cpp
+@@ -64,7 +64,11 @@ DFhackCExport command_result plugin_init (color_ostream &out, std::vector <Plugi
+ " The '>' prefix reverses the sort order for defined values.\n"
+ " Unit order examples:\n"
+ " name, age, arrival, squad, squad_position, profession\n"
++ #ifdef DFHACK_LUA_DESTINATION
++ "The orderings are defined in " DFHACK_LUA_DESTINATION "/plugins/sort/*.lua\n"
++ #else
+ "The orderings are defined in hack/lua/plugins/sort/*.lua\n"
++ #endif
+ ));
+ commands.push_back(PluginCommand(
+ "sort-items", "Sort the visible item list.", sort_items, item_list_hotkey,
+@@ -74,7 +78,11 @@ DFhackCExport command_result plugin_init (color_ostream &out, std::vector <Plugi
+ " The '>' prefix reverses the sort order for defined values.\n"
+ " Item order examples:\n"
+ " description, material, wear, type, quality\n"
++ #ifdef DFHACK_LUA_DESTINATION
++ "The orderings are defined in " DFHACK_LUA_DESTINATION "/plugins/sort/*.lua\n"
++ #else
+ "The orderings are defined in hack/lua/plugins/sort/*.lua\n"
++ #endif
+ ));
+ return CR_OK;
+ }
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/05-compile-time-configurable-0.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/05-compile-time-configurable-0.patch
new file mode 100644
index 00000000..c35d8e37
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/05-compile-time-configurable-0.patch
@@ -0,0 +1,54 @@
+compile-time configurable paths
+
+From: eroen <eroen@occam.eroen.eu>
+
+hack/
+./
+---
+ library/Core.cpp | 8 ++++++++
+ plugins/zone.cpp | 2 ++
+ 2 files changed, 10 insertions(+)
+
+diff --git a/library/Core.cpp b/library/Core.cpp
+index e72decd..89130a9 100644
+--- a/library/Core.cpp
++++ b/library/Core.cpp
+@@ -317,7 +317,11 @@ static command_result runRubyScript(color_ostream &out, PluginManager *plug_mgr,
+ rbcmd += "'" + args[i] + "', ";
+ rbcmd += "]\n";
+
++#ifdef DFHACK_DATA_DESTINATION
++ rbcmd += "catch(:script_finished) { load '" DFHACK_DATA_DESTINATION "/scripts/" + name + ".rb' }";
++#else
+ rbcmd += "catch(:script_finished) { load './hack/scripts/" + name + ".rb' }";
++#endif
+
+ return plug_mgr->eval_ruby(out, rbcmd.c_str());
+ }
+@@ -862,7 +866,11 @@ void Core::fatal (std::string output, bool deactivate)
+ std::string Core::getHackPath()
+ {
+ #ifdef LINUX_BUILD
++ #ifdef DFHACK_DATA_DESTINATION
++ return DFHACK_DATA_DESTINATION "/";
++ #else
+ return p->getPath() + "/hack/";
++ #endif
+ #else
+ return p->getPath() + "\\hack\\";
+ #endif
+diff --git a/plugins/zone.cpp b/plugins/zone.cpp
+index 5649da2..e89419a 100644
+--- a/plugins/zone.cpp
++++ b/plugins/zone.cpp
+@@ -3177,8 +3177,10 @@ command_result df_autobutcher(color_ostream &out, vector <string> & parameters)
+ {
+ string run = "dfhack-run autobutcher ";
+ #ifdef LINUX_BUILD
++#ifndef DFHACK_DATA_DESTINATION
+ run = "./dfhack-run autobutcher ";
+ #endif
++#endif
+ // force creation of config
+ out << run << "start" << endl;
+
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/06-compile-time-configurable-1.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/06-compile-time-configurable-1.patch
new file mode 100644
index 00000000..084059b7
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/06-compile-time-configurable-1.patch
@@ -0,0 +1,104 @@
+compile-time configurable state directory
+
+From: eroen <eroen@occam.eroen.eu>
+
+It'd be nice to write stuff somewhere writeable.
+---
+ CMakeLists.txt | 4 ++++
+ library/Console-linux.cpp | 4 ++++
+ library/Core.cpp | 8 ++++++++
+ library/Hooks-egg.cpp | 4 ++++
+ library/Hooks-linux.cpp | 4 ++++
+ 5 files changed, 24 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 77a8d97..73a4ac1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -64,6 +64,10 @@ SET(DFHACK_RELEASE "r3" CACHE STRING "Current release revision.")
+ set(DFHACK_VERSION "${DF_VERSION}-${DFHACK_RELEASE}")
+ add_definitions(-DDFHACK_VERSION="${DFHACK_VERSION}")
+
++## where persistent things are written (and read) at runtime
++SET(DFHACK_STATEDIR "." CACHE PATH "DFHACK_STATEDIR")
++ADD_DEFINITIONS(-DDFHACK_STATEDIR="${DFHACK_STATEDIR}")
++
+ ## where to install things (after the build is done, classic 'make install' or package structure)
+ # the dfhack libraries will be installed here:
+ IF(UNIX)
+diff --git a/library/Console-linux.cpp b/library/Console-linux.cpp
+index f32fa1c..be8d13b 100644
+--- a/library/Console-linux.cpp
++++ b/library/Console-linux.cpp
+@@ -658,7 +658,11 @@ bool Console::init(bool sharing)
+ inited = false;
+ return false;
+ }
++ #ifdef DFHACK_STATEDIR
++ if (!freopen(DFHACK_STATEDIR "/stdout.log", "w", stdout))
++ #else
+ if (!freopen("stdout.log", "w", stdout))
++ #endif
+ ;
+ d = new Private();
+ // make our own weird streams so our IO isn't redirected
+diff --git a/library/Core.cpp b/library/Core.cpp
+index 89130a9..978fccd 100644
+--- a/library/Core.cpp
++++ b/library/Core.cpp
+@@ -769,7 +769,11 @@ void fIOthread(void * iodata)
+ PluginManager * plug_mgr = ((IODATA*) iodata)->plug_mgr;
+
+ CommandHistory main_history;
++ #ifdef DFHACK_STATEDIR
++ main_history.load(DFHACK_STATEDIR "/dfhack.history");
++ #else
+ main_history.load("dfhack.history");
++ #endif
+
+ Console & con = core->getConsole();
+ if(plug_mgr == 0 || core == 0)
+@@ -802,7 +806,11 @@ void fIOthread(void * iodata)
+ {
+ // a proper, non-empty command was entered
+ main_history.add(command);
++ #ifdef DFHACK_STATEDIR
++ main_history.save(DFHACK_STATEDIR "/dfhack.history");
++ #else
+ main_history.save("dfhack.history");
++ #endif
+ }
+
+ auto rv = core->runCommand(con, command);
+diff --git a/library/Hooks-egg.cpp b/library/Hooks-egg.cpp
+index c98cf5d..90df6af 100644
+--- a/library/Hooks-egg.cpp
++++ b/library/Hooks-egg.cpp
+@@ -37,7 +37,11 @@ distribution.
+ DFhackCExport int egg_init(void)
+ {
+ // reroute stderr
++ #ifdef DFHACK_STATEDIR
++ freopen(DFHACK_STATEDIR "/stderr.log", "w", stderr);
++ #else
+ freopen("stderr.log", "w", stderr);
++ #endif
+ // we don't reroute stdout until we figure out if this should be done at all
+ // See: Console-linux.cpp
+ fprintf(stderr,"dfhack: hooking successful\n");
+diff --git a/library/Hooks-linux.cpp b/library/Hooks-linux.cpp
+index 31c0323..42d86f3 100644
+--- a/library/Hooks-linux.cpp
++++ b/library/Hooks-linux.cpp
+@@ -114,7 +114,11 @@ static int (*_SDL_Init)(uint32_t flags) = 0;
+ DFhackCExport int SDL_Init(uint32_t flags)
+ {
+ // reroute stderr
++ #ifdef DFHACK_STATEDIR
++ freopen(DFHACK_STATEDIR "/stderr.log", "w", stderr);
++ #else
+ freopen("stderr.log", "w", stderr);
++ #endif
+ // we don't reroute stdout until we figure out if this should be done at all
+ // See: Console-linux.cpp
+
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/07-startup-scripts-configurable.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/07-startup-scripts-configurable.patch
new file mode 100644
index 00000000..28fbf71f
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/07-startup-scripts-configurable.patch
@@ -0,0 +1,288 @@
+startup scripts - configurable paths
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ CMakeLists.txt | 3 ++
+ library/CMakeLists.txt | 13 +++++++
+ package/linux/dfhack | 79 -------------------------------------------
+ package/linux/dfhack-run | 8 ----
+ package/linux/dfhack-run.in | 8 ++++
+ package/linux/dfhack.in | 79 +++++++++++++++++++++++++++++++++++++++++++
+ package/linux/egghack | 7 ----
+ package/linux/egghack.in | 7 ++++
+ 8 files changed, 110 insertions(+), 94 deletions(-)
+ delete mode 100755 package/linux/dfhack
+ delete mode 100755 package/linux/dfhack-run
+ create mode 100755 package/linux/dfhack-run.in
+ create mode 100755 package/linux/dfhack.in
+ delete mode 100755 package/linux/egghack
+ create mode 100755 package/linux/egghack.in
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 73a4ac1..031a2cd 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -68,6 +68,9 @@ add_definitions(-DDFHACK_VERSION="${DFHACK_VERSION}")
+ SET(DFHACK_STATEDIR "." CACHE PATH "DFHACK_STATEDIR")
+ ADD_DEFINITIONS(-DDFHACK_STATEDIR="${DFHACK_STATEDIR}")
+
++## what to call to start DF, configured into startup scripts
++SET(DF_EXECUTABLE "./libs/Dwarf_Fortress" CACHE STRING "DF_EXECUTABLE")
++
+ ## where to install things (after the build is done, classic 'make install' or package structure)
+ # the dfhack libraries will be installed here:
+ IF(UNIX)
+diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
+index 18635ed..11a17ff 100644
+--- a/library/CMakeLists.txt
++++ b/library/CMakeLists.txt
+@@ -301,10 +301,23 @@ IF(UNIX)
+ DESTINATION .)
+ else()
+ # On linux, copy our version of the df launch script which sets LD_PRELOAD
++ configure_file(${dfhack_SOURCE_DIR}/package/linux/dfhack.in
++ ${dfhack_SOURCE_DIR}/package/linux/dfhack
++ @ONLY)
++ configure_file(${dfhack_SOURCE_DIR}/package/linux/dfhack-run.in
++ ${dfhack_SOURCE_DIR}/package/linux/dfhack-run
++ @ONLY)
++ configure_file(${dfhack_SOURCE_DIR}/package/linux/egghack.in
++ ${dfhack_SOURCE_DIR}/package/linux/egghack
++ @ONLY)
+ install(PROGRAMS ${dfhack_SOURCE_DIR}/package/linux/dfhack
+ DESTINATION ${DFHACK_BINARY_DESTINATION})
+ install(PROGRAMS ${dfhack_SOURCE_DIR}/package/linux/dfhack-run
+ DESTINATION ${DFHACK_BINARY_DESTINATION})
++ if(BUILD_EGGY)
++ install(PROGRAMS ${dfhack_SOURCE_DIR}/package/linux/egghack
++ DESTINATION ${DFHACK_BINARY_DESTINATION})
++ endif()
+ endif()
+ ELSE()
+ if(NOT BUILD_EGGY)
+diff --git a/package/linux/dfhack b/package/linux/dfhack
+deleted file mode 100755
+index 5ddd2a1..0000000
+--- a/package/linux/dfhack
++++ /dev/null
+@@ -1,79 +0,0 @@
+-#!/bin/sh
+-
+-# NOTE: This is dfhack's modification of the normal invocation script,
+-# changed to properly set LD_PRELOAD so as to run DFHACK.
+-#
+-# You can run DF under gdb by passing -g or --gdb as the first argument.
+-#
+-# If the file ".dfhackrc" exists in the DF directory or your home directory
+-# it will be sourced by this script, to let you set environmental variables.
+-# If it exists in both places it will first source the one in your home
+-# directory, then the on in the game directory.
+-#
+-# Shell variables .dfhackrc can set to affect this script:
+-# DF_GDB_OPTS: Options to pass to gdb, if it's being run
+-# DF_VALGRIND_OPTS: Options to pass to valgrind, if it's being run
+-# DF_HELGRIND_OPTS: Options to pass to helgrind, if it's being run
+-# DF_POST_CMD: Shell command to be run at very end of script
+-
+-DF_DIR=$(dirname "$0")
+-cd "${DF_DIR}"
+-export SDL_DISABLE_LOCK_KEYS=1 # Work around for bug in Debian/Ubuntu SDL patch.
+-#export SDL_VIDEO_CENTERED=1 # Centre the screen. Messes up resizing.
+-
+-# User config files
+-RC=".dfhackrc"
+-
+-if [ -r "$HOME/$RC" ]; then
+- . $HOME/$RC
+-fi
+-if [ -r "./$RC" ]; then
+- . "./$RC"
+-fi
+-
+-# Save current terminal settings
+-old_tty_settings=$(stty -g)
+-
+-# Now run
+-
+-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"./hack/libs":"./hack"
+-
+-case "$1" in
+- -g | --gdb)
+- shift
+- echo "set environment LD_PRELOAD=./hack/libdfhack.so" > gdbcmd.tmp
+- echo "set environment MALLOC_PERTURB_=45" >> gdbcmd.tmp
+- gdb $DF_GDB_OPTS -x gdbcmd.tmp ./libs/Dwarf_Fortress "$@"
+- rm gdbcmd.tmp
+- ret=$?
+- ;;
+- -h | --helgrind)
+- shift
+- LD_PRELOAD=./hack/libdfhack.so setarch i386 -R valgrind $DF_HELGRIND_OPTS --tool=helgrind --log-file=helgrind.log ./libs/Dwarf_Fortress "$@"
+- ret=$?
+- ;;
+- -v | --valgrind)
+- shift
+- LD_PRELOAD=./hack/libdfhack.so setarch i386 -R valgrind $DF_VALGRIND_OPTS --log-file=valgrind.log ./libs/Dwarf_Fortress "$@"
+- ret=$?
+- ;;
+- -c | --callgrind)
+- shift
+- LD_PRELOAD=./hack/libdfhack.so setarch i386 -R valgrind $DF_CALLGRIND_OPTS --tool=callgrind --separate-threads=yes --dump-instr=yes --instr-atstart=no --log-file=callgrind.log ./libs/Dwarf_Fortress "$@"
+- ret=$?
+- ;;
+- *)
+- setarch i386 -R env LD_PRELOAD=./hack/libdfhack.so ./libs/Dwarf_Fortress "$@"
+- ret=$?
+- ;;
+-esac
+-
+-# Restore previous terminal settings
+-stty "$old_tty_settings"
+-echo -e "\n"
+-
+-if [ -n "$DF_POST_CMD" ]; then
+- eval $DF_POST_CMD
+-fi
+-
+-exit $ret
+diff --git a/package/linux/dfhack-run b/package/linux/dfhack-run
+deleted file mode 100755
+index 55001cf..0000000
+--- a/package/linux/dfhack-run
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#!/bin/sh
+-
+-DF_DIR=$(dirname "$0")
+-cd "${DF_DIR}"
+-
+-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"./hack/libs":"./hack"
+-
+-exec hack/dfhack-run "$@"
+diff --git a/package/linux/dfhack-run.in b/package/linux/dfhack-run.in
+new file mode 100755
+index 0000000..f013053
+--- /dev/null
++++ b/package/linux/dfhack-run.in
+@@ -0,0 +1,8 @@
++#!/bin/sh
++
++DF_DIR=$(dirname "$0")
++cd "${DF_DIR}"
++
++export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"@DFHACK_LIBRARY_DESTINATION@"/libs:"@DFHACK_LIBRARY_DESTINATION@"
++
++exec "@DFHACK_LIBRARY_DESTINATION@"/dfhack-run "${@}"
+diff --git a/package/linux/dfhack.in b/package/linux/dfhack.in
+new file mode 100755
+index 0000000..a969708
+--- /dev/null
++++ b/package/linux/dfhack.in
+@@ -0,0 +1,79 @@
++#!/bin/sh
++
++# NOTE: This is dfhack's modification of the normal invocation script,
++# changed to properly set LD_PRELOAD so as to run DFHACK.
++#
++# You can run DF under gdb by passing -g or --gdb as the first argument.
++#
++# If the file ".dfhackrc" exists in the DF directory or your home directory
++# it will be sourced by this script, to let you set environmental variables.
++# If it exists in both places it will first source the one in your home
++# directory, then the on in the game directory.
++#
++# Shell variables .dfhackrc can set to affect this script:
++# DF_GDB_OPTS: Options to pass to gdb, if it's being run
++# DF_VALGRIND_OPTS: Options to pass to valgrind, if it's being run
++# DF_HELGRIND_OPTS: Options to pass to helgrind, if it's being run
++# DF_POST_CMD: Shell command to be run at very end of script
++
++DF_DIR=$(dirname "$0")
++cd "${DF_DIR}"
++export SDL_DISABLE_LOCK_KEYS=1 # Work around for bug in Debian/Ubuntu SDL patch.
++#export SDL_VIDEO_CENTERED=1 # Centre the screen. Messes up resizing.
++
++# User config files
++RC=".dfhackrc"
++
++if [ -r "$HOME/$RC" ]; then
++ . $HOME/$RC
++fi
++if [ -r "./$RC" ]; then
++ . "./$RC"
++fi
++
++# Save current terminal settings
++old_tty_settings=$(stty -g)
++
++# Now run
++
++export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"@DFHACK_LIBRARY_DESTINATION@"/libs:"@DFHACK_LIBRARY_DESTINATION@"
++
++case "$1" in
++ -g | --gdb)
++ shift
++ echo "set environment LD_PRELOAD=@DFHACK_LIBRARY_DESTINATION@/libdfhack.so" > gdbcmd.tmp
++ echo "set environment MALLOC_PERTURB_=45" >> gdbcmd.tmp
++ gdb ${DF_GDB_OPTS} -x gdbcmd.tmp "@DF_EXECUTABLE@" "${@}"
++ rm gdbcmd.tmp
++ ret=$?
++ ;;
++ -h | --helgrind)
++ shift
++ LD_PRELOAD="@DFHACK_LIBRARY_DESTINATION@"/libdfhack.so setarch i386 -R valgrind ${DF_HELGRIND_OPTS} --tool=helgrind --log-file=helgrind.log "@DF_EXECUTABLE@" "${@}"
++ ret=$?
++ ;;
++ -v | --valgrind)
++ shift
++ LD_PRELOAD="@DFHACK_LIBRARY_DESTINATION@"/libdfhack.so setarch i386 -R valgrind ${DF_VALGRIND_OPTS} --log-file=valgrind.log "@DF_EXECUTABLE@" "${@}"
++ ret=$?
++ ;;
++ -c | --callgrind)
++ shift
++ LD_PRELOAD="@DFHACK_LIBRARY_DESTINATION@"/libdfhack.so setarch i386 -R valgrind ${DF_CALLGRIND_OPTS} --tool=callgrind --separate-threads=yes --dump-instr=yes --instr-atstart=no --log-file=callgrind.log "@DF_EXECUTABLE@" "${@}"
++ ret=$?
++ ;;
++ *)
++ setarch i386 -R env LD_PRELOAD="@DFHACK_LIBRARY_DESTINATION@"/libdfhack.so "@DF_EXECUTABLE@" "${@}"
++ ret=$?
++ ;;
++esac
++
++# Restore previous terminal settings
++stty "$old_tty_settings"
++echo -e "\n"
++
++if [ -n "$DF_POST_CMD" ]; then
++ eval $DF_POST_CMD
++fi
++
++exit $ret
+diff --git a/package/linux/egghack b/package/linux/egghack
+deleted file mode 100755
+index 5b3b03b..0000000
+--- a/package/linux/egghack
++++ /dev/null
+@@ -1,7 +0,0 @@
+-#!/bin/sh
+-DF_DIR=$(dirname "$0")
+-cd "${DF_DIR}"
+-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"./hack/libs":"./hack"
+-export SDL_DISABLE_LOCK_KEYS=1 # Work around for bug in Debian/Ubuntu SDL patch.
+-#export SDL_VIDEO_CENTERED=1 # Centre the screen. Messes up resizing.
+-./libs/Dwarf_Fortress $* # Go, go, go! :)
+diff --git a/package/linux/egghack.in b/package/linux/egghack.in
+new file mode 100755
+index 0000000..4bf4c9d
+--- /dev/null
++++ b/package/linux/egghack.in
+@@ -0,0 +1,7 @@
++#!/bin/sh
++DF_DIR=$(dirname "$0")
++cd "${DF_DIR}"
++export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"@DFHACK_LIBRARY_DESTINATION@"/libs:"@DFHACK_LIBRARY_DESTINATION@"
++export SDL_DISABLE_LOCK_KEYS=1 # Work around for bug in Debian/Ubuntu SDL patch.
++#export SDL_VIDEO_CENTERED=1 # Centre the screen. Messes up resizing.
++"@DF_EXECUTABLE@" ${*} # Go, go, go! :)
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/08-ruby-plugin-configurable-paths.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/08-ruby-plugin-configurable-paths.patch
new file mode 100644
index 00000000..47531337
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/08-ruby-plugin-configurable-paths.patch
@@ -0,0 +1,525 @@
+ruby plugin - configurable paths
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ plugins/ruby/CMakeLists.txt | 4 +
+ plugins/ruby/ruby.rb | 239 -------------------------------------------
+ plugins/ruby/ruby.rb.in | 239 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 243 insertions(+), 239 deletions(-)
+ delete mode 100644 plugins/ruby/ruby.rb
+ create mode 100644 plugins/ruby/ruby.rb.in
+
+diff --git a/plugins/ruby/CMakeLists.txt b/plugins/ruby/CMakeLists.txt
+index e6d3eff..b282751 100644
+--- a/plugins/ruby/CMakeLists.txt
++++ b/plugins/ruby/CMakeLists.txt
+@@ -27,6 +27,8 @@ ADD_CUSTOM_COMMAND(
+ )
+ ADD_CUSTOM_TARGET(ruby-autogen-rb DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ruby-autogen.rb)
+
++CONFIGURE_FILE(ruby.rb.in ruby.rb @ONLY)
++
+ INCLUDE_DIRECTORIES("${dfhack_SOURCE_DIR}/depends/tthread")
+
+ DFHACK_PLUGIN(ruby ruby.cpp LINK_LIBRARIES dfhack-tinythread)
+@@ -34,6 +36,8 @@ ADD_DEPENDENCIES(ruby ruby-autogen-rb)
+
+ INSTALL(FILES ${RUBYLIB} DESTINATION ${DFHACK_LIBRARY_DESTINATION})
+
++INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/ruby.rb DESTINATION ${DFHACK_RUBY_DESTINATION})
++
+ INSTALL(DIRECTORY .
+ DESTINATION ${DFHACK_RUBY_DESTINATION}
+ FILES_MATCHING PATTERN "*.rb")
+diff --git a/plugins/ruby/ruby.rb b/plugins/ruby/ruby.rb
+deleted file mode 100644
+index 47924dc..0000000
+--- a/plugins/ruby/ruby.rb
++++ /dev/null
+@@ -1,239 +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_dwarf
+- 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
+- (2..5).each { |i| out.last << wl.words[name.words[i]].forms[name.parts_of_speech[i]] if name.words[i] >= 0 }
+- 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 './hack/ruby/ruby-autogen'
+-
+-# load all modules
+-Dir['./hack/ruby/*.rb'].each { |m| require m.chomp('.rb') }
+diff --git a/plugins/ruby/ruby.rb.in b/plugins/ruby/ruby.rb.in
+new file mode 100644
+index 0000000..2ae169c
+--- /dev/null
++++ b/plugins/ruby/ruby.rb.in
+@@ -0,0 +1,239 @@
++# 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_dwarf
++ 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
++ (2..5).each { |i| out.last << wl.words[name.words[i]].forms[name.parts_of_speech[i]] if name.words[i] >= 0 }
++ 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 '@DFHACK_RUBY_DESTINATION@/ruby-autogen'
++
++# load all modules
++Dir['@DFHACK_RUBY_DESTINATION@/*.rb'].each { |m| require m.chomp('.rb') }
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/09-eggy-remove-annoying-banner.patch b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/09-eggy-remove-annoying-banner.patch
new file mode 100644
index 00000000..f2c4ce14
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/09-eggy-remove-annoying-banner.patch
@@ -0,0 +1,22 @@
+eggy - remove annoying banner
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ library/Core.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/library/Core.cpp b/library/Core.cpp
+index 978fccd..3b10bce 100644
+--- a/library/Core.cpp
++++ b/library/Core.cpp
+@@ -986,7 +986,7 @@ bool Core::Init()
+ HotkeyCond = new condition_variable();
+ thread * HK = new thread(fHKthread, (void *) temp);
+ screen_window = new Windows::top_level_window();
+- screen_window->addChild(new Windows::dfhack_dummy(5,10));
++ //screen_window->addChild(new Windows::dfhack_dummy(5,10));
+ started = true;
+
+ cerr << "Starting the TCP listener.\n";
diff --git a/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/series b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/series
new file mode 100644
index 00000000..ea00d573
--- /dev/null
+++ b/games-util/dfhack/files/dfhack-0.34.11.3_p20130302/series
@@ -0,0 +1,10 @@
+# This series applies on GIT commit 18a91ef221f531307ac5ddbe29532a3d6e0a04ec
+01-compile-static-libraries-as.patch
+02-drop-strange-build-options.patch
+03-configurable-install-paths.patch
+04-compile-time-configurable.patch
+05-compile-time-configurable-0.patch
+06-compile-time-configurable-1.patch
+07-startup-scripts-configurable.patch
+08-ruby-plugin-configurable-paths.patch
+09-eggy-remove-annoying-banner.patch
diff --git a/games-util/dfhack/files/isoworld-0.34.11.3_p20130302/01-missing-include-dir.patch b/games-util/dfhack/files/isoworld-0.34.11.3_p20130302/01-missing-include-dir.patch
new file mode 100644
index 00000000..e7cd20f0
--- /dev/null
+++ b/games-util/dfhack/files/isoworld-0.34.11.3_p20130302/01-missing-include-dir.patch
@@ -0,0 +1,21 @@
+missing include dir
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fd0cc4b..2bf3210 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -76,6 +76,7 @@ IF(UNIX)
+ include_directories (
+ ${include_directories}
+ ${CMAKE_CURRENT_SOURCE_DIR}/allegro/include
++ ${CMAKE_CURRENT_SOURCE_DIR}/agui/include
+ )
+ install(DIRECTORY allegro/lib/
+ DESTINATION "hack/libs"
diff --git a/games-util/dfhack/files/isoworld-0.34.11.3_p20130302/series b/games-util/dfhack/files/isoworld-0.34.11.3_p20130302/series
new file mode 100644
index 00000000..85db40b5
--- /dev/null
+++ b/games-util/dfhack/files/isoworld-0.34.11.3_p20130302/series
@@ -0,0 +1,2 @@
+# This series applies on GIT commit aa3b1bd51f269c07b3235392fd7ed21fe9171f3f
+01-missing-include-dir.patch
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/01-null-isn-t-an-int32.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/01-null-isn-t-an-int32.patch
new file mode 100644
index 00000000..f3acc8a1
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/01-null-isn-t-an-int32.patch
@@ -0,0 +1,46 @@
+NULL isn't int32_t
+
+From: eroen <eroen@occam.eroen.eu>
+
+ContentLoader.h declares
+vector<vector<int32_t>*> position_Indices;
+
+Thus, it is not appropriate to set
+position_Indices[ent_id]->resize(pos_id+1, NULL);
+
+Rather, 0s will do nicely.
+---
+ ContentLoader.cpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ContentLoader.cpp b/ContentLoader.cpp
+index 9e305a3..c4ffdb1 100644
+--- a/ContentLoader.cpp
++++ b/ContentLoader.cpp
+@@ -150,7 +150,7 @@ bool ContentLoader::Load()
+ if(!position_Indices[ent_id])
+ position_Indices[ent_id] = new vector<int32_t>;
+ if(pos_id >= position_Indices[ent_id]->size())
+- position_Indices[ent_id]->resize(pos_id+1, NULL);
++ position_Indices[ent_id]->resize(pos_id+1, 0);
+ position_Indices[ent_id]->at(pos_id) = found;
+ //LogError("%d(%d):%s->%d(%d):%s = %d\n", i, currentity->id, currentity->entity_raw->code.c_str(), j,currentpos->id, currentpos->code.c_str(), found);
+ }
+@@ -175,7 +175,7 @@ bool ContentLoader::Load()
+ if(!position_Indices[ent_id])
+ position_Indices[ent_id] = new vector<int32_t>;
+ if(pos_id >= position_Indices[ent_id]->size())
+- position_Indices[ent_id]->resize(pos_id+1, NULL);
++ position_Indices[ent_id]->resize(pos_id+1, 0);
+ position_Indices[ent_id]->at(pos_id) = found;
+ //LogError("%d(%d):%s->%d(%d):%s = %d\n", i, currentity->id, currentity->entity_raw->code.c_str(), j,currentpos->id, currentpos->code.c_str(), found);
+ }
+@@ -200,7 +200,7 @@ bool ContentLoader::Load()
+ if(!position_Indices[ent_id])
+ position_Indices[ent_id] = new vector<int32_t>;
+ if(pos_id >= position_Indices[ent_id]->size())
+- position_Indices[ent_id]->resize(pos_id+1, NULL);
++ position_Indices[ent_id]->resize(pos_id+1, 0);
+ position_Indices[ent_id]->at(pos_id) = found;
+ //LogError("%d(%d):%s->%d(%d):%s = %d\n", i, currentity->id, currentity->entity_raw->code.c_str(), j,currentpos->id, currentpos->code.c_str(), found);
+ }
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/02-configurable-install-paths.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/02-configurable-install-paths.patch
new file mode 100644
index 00000000..6ae9a0ae
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/02-configurable-install-paths.patch
@@ -0,0 +1,38 @@
+configurable install paths
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ CMakeLists.txt | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ad5796a..dabd741 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -93,8 +93,9 @@ IF(UNIX)
+ ${include_directories}
+ ${stonesense_SOURCE_DIR}/allegro/include
+ )
++ SET(SSENSE_ALLEGRO_DESTINATION "hack/libs" CACHE PATH "SSENSE_ALLEGRO_DESTINATION")
+ install(DIRECTORY allegro/lib/
+- DESTINATION "hack/libs"
++ DESTINATION ${SSENSE_ALLEGRO_DESTINATION}
+ PATTERN "CVS" EXCLUDE
+ PATTERN ".svn" EXCLUDE)
+ ELSE()
+@@ -155,9 +156,11 @@ IF(APPLE)
+ add_custom_command(TARGET stonesense POST_BUILD COMMAND ${stonesense_SOURCE_DIR}/fix-libs-stonesense.sh WORKING_DIRECTORY . COMMENT "Fixing Stonesense library dependencies...")
+ ENDIF(APPLE)
+ #install resources into DF/stonesense
++SET(SSENSE_RES_DESTINATION "stonesense" CACHE PATH "SSENSE_RES_DESTINATION")
+ install(DIRECTORY resources/
+- DESTINATION "stonesense"
++ DESTINATION ${SSENSE_RES_DESTINATION}
+ PATTERN "CVS" EXCLUDE
+ PATTERN ".svn" EXCLUDE)
+ # install readme
+-install(FILES README.txt DESTINATION stonesense)
++SET(SSENSE_DOC_DESTINATION "stonesense" CACHE PATH "SSENSE_DOC_DESTINATION")
++install(FILES README.txt DESTINATION ${SSENSE_DOC_DESTINATION})
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/03-don-t-segfault-if-logfile-is.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/03-don-t-segfault-if-logfile-is.patch
new file mode 100644
index 00000000..915c63e8
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/03-don-t-segfault-if-logfile-is.patch
@@ -0,0 +1,37 @@
+don't segfault if logfile is unwritable
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ main.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/main.cpp b/main.cpp
+index 32fd9b9..9fa513d 100644
+--- a/main.cpp
++++ b/main.cpp
+@@ -91,10 +91,10 @@ void LogError(const char* msg, ...)
+ FILE* fp = fopen( "Stonesense.log", "a");
+ if(fp) {
+ vfprintf( fp, msg, arglist );
++ fclose(fp);
+ }
+ // Core::printerr(msg, arglist);
+ va_end(arglist);
+- fclose(fp);
+ }
+
+
+@@ -121,10 +121,10 @@ void LogVerbose(const char* msg, ...)
+ FILE* fp = fopen( "Stonesense.log", "a");
+ if(fp) {
+ vfprintf( fp, msg, arglist );
++ fclose(fp);
+ }
+ // Core::printerr(msg, arglist);
+ va_end(arglist);
+- fclose(fp);
+ }
+
+ void SetTitle(const char *format, ...)
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/04-compile-time-configuration-of.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/04-compile-time-configuration-of.patch
new file mode 100644
index 00000000..8291ee0a
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/04-compile-time-configuration-of.patch
@@ -0,0 +1,188 @@
+compile time configuration of magic cwd
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ Config.cpp | 4 ++++
+ ContentBuildingReader.cpp | 4 ++++
+ ContentLoader.cpp | 8 ++++++++
+ GUI.cpp | 4 ++++
+ Keybinds.cpp | 4 ++++
+ OcclusionTest.cpp | 5 +++++
+ Tile.cpp | 8 ++++++++
+ main.cpp | 12 ++++++++++++
+ 8 files changed, 49 insertions(+)
+
+diff --git a/Config.cpp b/Config.cpp
+index 2c431a8..76d3bd7 100644
+--- a/Config.cpp
++++ b/Config.cpp
+@@ -789,7 +789,11 @@ void parseConfigLine( string line )
+ bool loadConfigFile()
+ {
+ string line;
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p =al_create_path(DFHACK_DATA_DESTINATION "/stonesense/init.txt");
++ #else
+ ALLEGRO_PATH * p =al_create_path("stonesense/init.txt");
++ #endif
+ const char * path = al_path_cstr(p,ALLEGRO_NATIVE_PATH_SEP);
+ ifstream myfile (path);
+ if (myfile.is_open() == false) {
+diff --git a/ContentBuildingReader.cpp b/ContentBuildingReader.cpp
+index cf62502..b092611 100644
+--- a/ContentBuildingReader.cpp
++++ b/ContentBuildingReader.cpp
+@@ -436,7 +436,11 @@ void flushBuildingConfig( vector<BuildingConfiguration>* knownBuildings )
+ /*
+ bool LoadBuildingConfiguration( vector<BuildingConfiguration>* knownBuildings ){
+ string line;
++ #ifdef DFHACK_DATA_DESTINATION
++ ifstream myfile (DFHACK_DATA_DESTINATION "/buildings/index.txt");
++ #else
+ ifstream myfile ("buildings/index.txt");
++ #endif
+ if (myfile.is_open() == false){
+ WriteErr("Unable to load building config index file!\n");
+ return false;
+diff --git a/ContentLoader.cpp b/ContentLoader.cpp
+index c4ffdb1..19e2cff 100644
+--- a/ContentLoader.cpp
++++ b/ContentLoader.cpp
+@@ -227,7 +227,11 @@ bool ContentLoader::Load()
+ contentLoader->obsidian = lookupMaterialIndex(INORGANIC, "OBSIDIAN");
+
+ loadGraphicsFromDisk(); //these get destroyed when flushImgFiles is called.
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p = al_create_path(DFHACK_DATA_DESTINATION "/stonesense/index.txt");
++ #else
+ ALLEGRO_PATH * p = al_create_path("stonesense/index.txt");
++ #endif
+ bool overallResult = parseContentIndexFile( al_path_cstr(p, ALLEGRO_NATIVE_PATH_SEP) );
+ al_destroy_path(p);
+ translationComplete = false;
+@@ -249,7 +253,11 @@ bool ContentLoader::reload_configs()
+ flushImgFiles();
+
+ loadGraphicsFromDisk(); //these get destroyed when flushImgFiles is called.
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p = al_create_path(DFHACK_DATA_DESTINATION "/stonesense/index.txt");
++ #else
+ ALLEGRO_PATH * p = al_create_path("stonesense/index.txt");
++ #endif
+ bool overallResult = parseContentIndexFile( al_path_cstr(p, ALLEGRO_NATIVE_PATH_SEP) );
+ al_destroy_path(p);
+
+diff --git a/GUI.cpp b/GUI.cpp
+index 1c45abf..a872df5 100644
+--- a/GUI.cpp
++++ b/GUI.cpp
+@@ -1058,7 +1058,11 @@ bool load_from_path (ALLEGRO_PATH * p, const char * filename, ALLEGRO_BITMAP *&
+
+ void loadGraphicsFromDisk()
+ {
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p = al_create_path_for_directory(DFHACK_DATA_DESTINATION "/stonesense");
++ #else
+ ALLEGRO_PATH * p = al_create_path_for_directory("stonesense");
++ #endif
+ if(!load_from_path(p, "objects.png", IMGObjectSheet)) {
+ return;
+ }
+diff --git a/Keybinds.cpp b/Keybinds.cpp
+index 94cab94..ec67b6a 100644
+--- a/Keybinds.cpp
++++ b/Keybinds.cpp
+@@ -268,7 +268,11 @@ void parseKeymapLine( string line )
+
+ bool loadKeymapFile(){
+ string line;
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p =al_create_path(DFHACK_DATA_DESTINATION "/stonesense/keybinds.txt");
++ #else
+ ALLEGRO_PATH * p =al_create_path("stonesense/keybinds.txt");
++ #endif
+ const char * path = al_path_cstr(p,ALLEGRO_NATIVE_PATH_SEP);
+ ifstream myfile (path);
+ if (myfile.is_open() == false) {
+diff --git a/OcclusionTest.cpp b/OcclusionTest.cpp
+index 36b4c7c..16ab0c3 100644
+--- a/OcclusionTest.cpp
++++ b/OcclusionTest.cpp
+@@ -118,8 +118,13 @@ void init_masks()
+ //load up some mask files
+ int flags = al_get_new_bitmap_flags();
+ al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_BITMAP * wall = load_bitmap_withWarning(DFHACK_DATA_DESTINATION "/stonesense/mask_wall.png");
++ ALLEGRO_BITMAP * floor = load_bitmap_withWarning(DFHACK_DATA_DESTINATION "/stonesense/mask_floor.png");
++ #else
+ ALLEGRO_BITMAP * wall = load_bitmap_withWarning("stonesense/mask_wall.png");
+ ALLEGRO_BITMAP * floor = load_bitmap_withWarning("stonesense/mask_floor.png");
++ #endif
+ al_set_new_bitmap_flags(flags);
+
+ //copy the mask to the bitsets. Each half is seperate to simplify things.
+diff --git a/Tile.cpp b/Tile.cpp
+index 419e4b9..bfab1f5 100644
+--- a/Tile.cpp
++++ b/Tile.cpp
+@@ -636,9 +636,17 @@ void createEffectSprites()
+ sprite_dust = CreateSpriteFromSheet( 182, IMGObjectSheet);
+ sprite_magma = CreateSpriteFromSheet( 185, IMGObjectSheet);
+ sprite_smoke = CreateSpriteFromSheet( 186, IMGObjectSheet);
++ #ifdef DFHACK_DATA_DESTINATION
++ sprite_dragonfire = load_bitmap_withWarning(DFHACK_DATA_DESTINATION "/stonesense/Effect_flames.png");
++ #else
+ sprite_dragonfire = load_bitmap_withWarning("stonesense/Effect_flames.png");
++ #endif
+ sprite_fire = CreateSpriteFromSheet( 188, IMGObjectSheet);
++ #ifdef DFHACK_DATA_DESTINATION
++ sprite_webing = load_bitmap_withWarning(DFHACK_DATA_DESTINATION "/stonesense/Effect_web.png");
++ #else
+ sprite_webing = load_bitmap_withWarning("stonesense/Effect_web.png");
++ #endif
+ sprite_boiling = CreateSpriteFromSheet( 190, IMGObjectSheet);
+ sprite_oceanwave = CreateSpriteFromSheet( 191, IMGObjectSheet);
+ }
+diff --git a/main.cpp b/main.cpp
+index 9fa513d..090c0d2 100644
+--- a/main.cpp
++++ b/main.cpp
+@@ -161,7 +161,11 @@ void correctTileForDisplayedOffset(int32_t& x, int32_t& y, int32_t& z)
+
+ bool loadfont(DFHack::color_ostream & output)
+ {
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p = al_create_path_for_directory(DFHACK_DATA_DESTINATION "/stonesense");
++ #else
+ ALLEGRO_PATH * p = al_create_path_for_directory("stonesense");
++ #endif
+ if(!al_join_paths(p, ssConfig.font)) {
+ al_destroy_path(p);
+ return false;
+@@ -217,7 +221,11 @@ void drawcredits()
+ //centred splash image
+ {
+ if(!SplashImage) {
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p = al_create_path(DFHACK_DATA_DESTINATION "/stonesense/splash.png");
++ #else
+ ALLEGRO_PATH * p = al_create_path("stonesense/splash.png");
++ #endif
+ SplashImage = load_bitmap_withWarning(al_path_cstr(p, ALLEGRO_NATIVE_PATH_SEP));
+ al_destroy_path(p);
+ }
+@@ -448,7 +456,11 @@ static void * stonesense_thread(ALLEGRO_THREAD * main_thread, void * parms)
+ al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR|ALLEGRO_MIPMAP);
+ }
+
++ #ifdef DFHACK_DATA_DESTINATION
++ ALLEGRO_PATH * p = al_create_path(DFHACK_DATA_DESTINATION "/stonesense/stonesense.png");
++ #else
+ ALLEGRO_PATH * p = al_create_path("stonesense/stonesense.png");
++ #endif
+ IMGIcon = load_bitmap_withWarning(al_path_cstr(p, ALLEGRO_NATIVE_PATH_SEP));
+ al_destroy_path(p);
+ if(!IMGIcon) {
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/05-compile-time-configurable-log.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/05-compile-time-configurable-log.patch
new file mode 100644
index 00000000..6847a1eb
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/05-compile-time-configurable-log.patch
@@ -0,0 +1,37 @@
+compile-time configurable log file destination
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ main.cpp | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/main.cpp b/main.cpp
+index 090c0d2..54a45e8 100644
+--- a/main.cpp
++++ b/main.cpp
+@@ -88,7 +88,11 @@ void LogError(const char* msg, ...)
+ char buf[512] = {0};
+ vsprintf(buf, msg, arglist);
+ Core::printerr(buf);
++ #ifdef DFHACK_STATEDIR
++ FILE* fp = fopen( DFHACK_STATEDIR "/Stonesense.log", "a");
++ #else
+ FILE* fp = fopen( "Stonesense.log", "a");
++ #endif
+ if(fp) {
+ vfprintf( fp, msg, arglist );
+ fclose(fp);
+@@ -118,7 +122,11 @@ void LogVerbose(const char* msg, ...)
+ char buf[512] = {0};
+ vsprintf(buf, msg, arglist);
+ Core::printerr(buf);
++ #ifdef DFHACK_STATEDIR
++ FILE* fp = fopen( DFHACK_STATEDIR "/Stonesense.log", "a");
++ #else
+ FILE* fp = fopen( "Stonesense.log", "a");
++ #endif
+ if(fp) {
+ vfprintf( fp, msg, arglist );
+ fclose(fp);
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/06-fix-b0rked-xml-file.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/06-fix-b0rked-xml-file.patch
new file mode 100644
index 00000000..47e31051
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/06-fix-b0rked-xml-file.patch
@@ -0,0 +1,34 @@
+fix b0rked xml file
+
+From: eroen <eroen@occam.eroen.eu>
+
+it breaks loading the file.
+
+ File load failed: /usr/share/games/dfhack-9999/stonesense/terrain/block_walls.xml
+ Failure in reading /usr/share/games/dfhack-9999/stonesense/terrain/block_walls.xml
+---
+ resources/terrain/block_walls.xml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/resources/terrain/block_walls.xml b/resources/terrain/block_walls.xml
+index d48c5af..662b63a 100644
+--- a/resources/terrain/block_walls.xml
++++ b/resources/terrain/block_walls.xml
+@@ -1,7 +1,7 @@
+ <?xml version="1.0"?>
+ <walls file="block_walls.png">
+ <!-- construct -->
+- <walls sheetIndex="0" color="material" halftile="no">
++ <wall sheetIndex="0" color="material" halftile="no">
+ <form value="block" />
+ <material value="Inorganic" />
+ <!-- pillar -->
+@@ -53,7 +53,7 @@
+ />
+ </wall>
+ </walls>
+-<floors file="block_floors.png">
++<floors file="block_floors.png">
+ <!-- construct -->
+ <floor sheetIndex="0" color="material" halftile="no">
+ <form value="block" />
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/07-compile-time-configurable-dump.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/07-compile-time-configurable-dump.patch
new file mode 100644
index 00000000..b1ed23c7
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/07-compile-time-configurable-dump.patch
@@ -0,0 +1,132 @@
+compile time configurable dump location
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ BuildingConfiguration.cpp | 4 ++++
+ ContentLoader.cpp | 6 +++++-
+ DumpInfo.cpp | 24 ++++++++++++++++++++++--
+ GroundMaterialConfiguration.cpp | 4 ++++
+ 4 files changed, 35 insertions(+), 3 deletions(-)
+
+diff --git a/BuildingConfiguration.cpp b/BuildingConfiguration.cpp
+index 6a74246..2519322 100644
+--- a/BuildingConfiguration.cpp
++++ b/BuildingConfiguration.cpp
+@@ -38,7 +38,11 @@ BuildingConfiguration::~BuildingConfiguration(void)
+ void DumpBuildingNamesToDisk()
+ {
+ /*
++ #ifdef DFHACK_STATEDIR
++ FILE* fp = fopen(DFHACK_STATEDIR "/buildingdump.txt", "w");
++ #else
+ FILE* fp = fopen("buildingdump.txt", "w");
++ #endif
+ if(!fp) return;
+ for(uint32_t j=0; j < contentLoader->classIdStrings.size(); j++){
+ fprintf(fp, "%i:%s\n",j, contentLoader->classIdStrings[j].c_str());
+diff --git a/ContentLoader.cpp b/ContentLoader.cpp
+index 19e2cff..e889891 100644
+--- a/ContentLoader.cpp
++++ b/ContentLoader.cpp
+@@ -206,7 +206,11 @@ bool ContentLoader::Load()
+ }
+ }
+ }
++ #ifdef DFHACK_STATEDIR
++ //DumpStringVector(DFHACK_STATEDIR "/professiondump.txt", &professionStrings);
++ #else
+ //DumpStringVector("professiondump.txt", &professionStrings);
++ #endif
+ gatherStyleIndices(&df::global::world->raws);
+ /*
+ if(classIdStrings.empty())
+@@ -953,4 +957,4 @@ ShadeBy getShadeType(const char* Input)
+ return ShadeItem;
+ }
+ return ShadeNone;
+-}
+\ No newline at end of file
++}
+diff --git a/DumpInfo.cpp b/DumpInfo.cpp
+index 2184f43..9779ff2 100644
+--- a/DumpInfo.cpp
++++ b/DumpInfo.cpp
+@@ -133,7 +133,11 @@ void dumpSegment()
+ //}
+ //
+ //void DumpCreatureNamesToDisk(){
+-// /*FILE* fp = fopen("dump.txt", "w");
++// /*#ifdef DFHACK_STATEDIR
++// FILE* fp = fopen(DFHACK_STATEDIR "/dump.txt", "w");
++// #else
++// FILE* fp = fopen("dump.txt", "w");
++// #endif
+ // if(!fp) return;
+ // for(uint32_t j=0; j < v_creatureNames.size(); j++){
+ // fprintf(fp, "%i:%s\n",j, v_creatureNames[j].id);
+@@ -141,7 +145,11 @@ void dumpSegment()
+ // fclose(fp);*/
+ //}
+ //void DumpProfessionsToDisk(){
++// #ifdef DFHACK_STATEDIR
++// FILE* fp = fopen(DFHACK_STATEDIR "/dump.txt", "w");
++// #else
+ // FILE* fp = fopen("dump.txt", "w");
++// #endif
+ // if(!fp) return;
+ // string proffStr;
+ // for(int j=0; (proffStr = contentLoader->professionStrings[j]) != "" ; j++){
+@@ -248,16 +256,28 @@ void DumpInfo(color_ostream & out, std::vector<std::string> & params)
+ string & p1 = params[0];
+ if(p1 == "dumpitems") {
+ out.print("dumping equippable item names to 'itemdump.txt'...\n");
++ #ifdef DFHACK_STATEDIR
++ DumpItemNamesToDisk(DFHACK_STATEDIR "/itemdump.txt");
++ #else
+ DumpItemNamesToDisk("itemdump.txt");
++ #endif
+ out.print("...done\n");
+ } else if(p1 == "dumptiles") {
+ out.print("dumping equippable item names to 'tiledump.txt'...\n");
++ #ifdef DFHACK_STATEDIR
++ DumpTileTypes(DFHACK_STATEDIR "/tiledump.txt");
++ #else
+ DumpTileTypes("tiledump.txt");
++ #endif
+ out.print("...done\n");
+ } else if(p1 == "genterrain") {
+ if(params.size() > 1) {
+ out.print("generating 'terrain.xml'...\n");
++ #ifdef DFHACK_STATEDIR
++ GenerateTerrainXml(DFHACK_STATEDIR "/terrain.xml", params[1], GetBasicShape(params[1]));
++ #else
+ GenerateTerrainXml("terrain.xml", params[1], GetBasicShape(params[1]));
++ #endif
+ out.print("...done\n");
+ } else {
+ out.printerr("invalid argument\n");
+@@ -266,4 +286,4 @@ void DumpInfo(color_ostream & out, std::vector<std::string> & params)
+ out.printerr("invalid argument\n");
+ }
+
+-}
+\ No newline at end of file
++}
+diff --git a/GroundMaterialConfiguration.cpp b/GroundMaterialConfiguration.cpp
+index 8b9a0d9..acd3e10 100644
+--- a/GroundMaterialConfiguration.cpp
++++ b/GroundMaterialConfiguration.cpp
+@@ -40,7 +40,11 @@ TerrainConfiguration::~TerrainConfiguration()
+
+ void DumpInorganicMaterialNamesToDisk()
+ {
++ #ifdef DFHACK_STATEDIR
++ FILE* fp = fopen(DFHACK_STATEDIR "/dump.txt", "w");
++ #else
+ FILE* fp = fopen("dump.txt", "w");
++ #endif
+ if(!fp) {
+ return;
+ }
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/08-compile-time-configurable.patch b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/08-compile-time-configurable.patch
new file mode 100644
index 00000000..ff7f80ed
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/08-compile-time-configurable.patch
@@ -0,0 +1,25 @@
+compile time configurable benchmark location
+
+From: eroen <eroen@occam.eroen.eu>
+
+
+---
+ main.cpp | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/main.cpp b/main.cpp
+index 54a45e8..def4fe4 100644
+--- a/main.cpp
++++ b/main.cpp
+@@ -200,7 +200,11 @@ void benchmark()
+ reloadDisplayedSegment();
+ }
+
++ #ifdef DFHACK_STATEDIR
++ FILE* fp = fopen(DFHACK_STATEDIR "/benchmark.txt", "w" );
++ #else
+ FILE* fp = fopen("benchmark.txt", "w" );
++ #endif
+ if(!fp) {
+ return;
+ }
diff --git a/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/series b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/series
new file mode 100644
index 00000000..a0285561
--- /dev/null
+++ b/games-util/dfhack/files/stonesense-0.34.11.3_p20130302/series
@@ -0,0 +1,9 @@
+# This series applies on GIT commit 0d41614ff3dae9245e786ad667b0e463fe0dea3e
+01-null-isn-t-an-int32.patch
+02-configurable-install-paths.patch
+03-don-t-segfault-if-logfile-is.patch
+04-compile-time-configuration-of.patch
+05-compile-time-configurable-log.patch
+06-fix-b0rked-xml-file.patch
+07-compile-time-configurable-dump.patch
+08-compile-time-configurable.patch