From 37507388814441479769822c9414aa3853d83a58 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 9 Jun 2014 19:04:11 -0700 Subject: [PATCH] remove archetypes, they are not used by any existing game. make compiling with libxml2 optional (USE_LIBXML2) --- CMakeLists.txt | 6 +- src/CMakeLists.txt | 19 +++-- src/archetype.c | 161 ----------------------------------------- src/archetype.h | 52 ------------- src/economy.c | 158 +--------------------------------------- src/eressea.c | 6 +- src/give.c | 23 ------ src/helpers.c | 32 -------- src/kernel/battle.c | 2 +- src/kernel/xmlkernel.h | 28 ------- src/kernel/xmlreader.c | 4 + src/laws.c | 2 - src/util/xml.c | 7 ++ src/util/xml.h | 4 +- src/xmlreport.c | 2 + 15 files changed, 36 insertions(+), 470 deletions(-) delete mode 100644 src/archetype.c delete mode 100644 src/archetype.h delete mode 100644 src/kernel/xmlkernel.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fc3b59e6..dc4237086 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,11 @@ ELSE(CMAKE_COMPILER_IS_GNUCC) MESSAGE(STATUS "Unknown compiler ${CMAKE_C_COMPILER_ID}") ENDIF(CMAKE_COMPILER_IS_GNUCC) -find_package (LibXml2 REQUIRED) +find_package (LibXml2) +if (LIBXML2_FOUND) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_LIBXML2") +endif(LIBXML2_FOUND) + find_package (SQLite3 REQUIRED) find_package (Curses REQUIRED) find_package (Lua REQUIRED) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fde5e11f0..235eee440 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,7 +21,6 @@ include_directories (${CRYPTO_INCLUDE_DIR}) include_directories (${QUICKLIST_INCLUDE_DIR}) include_directories (${CUTEST_INCLUDE_DIR}) include_directories (${LUA_INCLUDE_DIR}) -include_directories (${LIBXML2_INCLUDE_DIR}) include_directories (${BSON_INCLUDE_DIR}) include_directories (${INIPARSER_INCLUDE_DIR}) include_directories (${CURSES_INCLUDE_DIR}) @@ -65,7 +64,6 @@ set (SERVER_SRC settings.pkg.c eressea.c json.c - archetype.c creation.c creport.c economy.c @@ -79,7 +77,7 @@ set (SERVER_SRC spy.c study.c summary.c - xmlreport.c +# xmlreport.c gmtool.c monsters.c bind_building.c @@ -88,11 +86,11 @@ set (SERVER_SRC bind_gmtool.c bind_hashtable.c bindings.c - helpers.c + helpers.c bind_message.c bind_monsters.c - bind_process.c - bind_region.c + bind_process.c + bind_region.c bind_settings.c bind_ship.c bind_sqlite.c @@ -113,7 +111,6 @@ target_link_libraries(eressea ${LUA_LIBRARIES} ${TOLUA_LIBRARIES} ${QUICKLIST_LIBRARIES} - ${LIBXML2_LIBRARIES} ${STORAGE_LIBRARIES} ${SQLITE3_LIBRARIES} ${CRITBIT_LIBRARIES} @@ -141,7 +138,6 @@ target_link_libraries(test_eressea ${LUA_LIBRARIES} ${TOLUA_LIBRARIES} ${QUICKLIST_LIBRARIES} - ${LIBXML2_LIBRARIES} ${STORAGE_LIBRARIES} ${SQLITE3_LIBRARIES} ${CRITBIT_LIBRARIES} @@ -164,3 +160,10 @@ add_test( ) install(TARGETS eressea DESTINATION bin) + +if (LIBXML2_FOUND) +include_directories (${LIBXML2_INCLUDE_DIR}) +target_link_libraries(eressea ${LIBXML2_LIBRARIES}) +target_link_libraries(test_eressea ${LIBXML2_LIBRARIES}) +endif(LIBXML2_FOUND) + diff --git a/src/archetype.c b/src/archetype.c deleted file mode 100644 index 8306f620a..000000000 --- a/src/archetype.c +++ /dev/null @@ -1,161 +0,0 @@ -#include -#include -#include "archetype.h" - -/* kernel includes */ -#include -#include -#include -#include - -/* util includes */ -#include -#include -#include -#include -#include - -/* libxml includes */ -#include -#include -#include - -/* libc includes */ -#include -#include - -static struct archetype *archetypes; - -struct attrib_type at_recruit = { - "recruit", NULL, NULL, NULL, NULL, NULL, ATF_UNIQUE -}; - -const struct archetype *find_archetype(const char *s, const struct locale *lang) -{ - void **tokens = get_translations(lang, UT_ARCHETYPES); - variant token; - - if (tokens && findtoken(*tokens, s, &token) == E_TOK_SUCCESS) { - return (const struct archetype *)token.v; - } - return NULL; -} - -void register_archetype(archetype * arch) -{ - arch->next = archetypes; - archetypes = arch; -} - -void init_archetypes(void) -{ - const struct locale *lang = locales; - for (; lang; lang = nextlocale(lang)) { - variant var; - archetype *arch = archetypes; - void *tokens = get_translations(lang, UT_ARCHETYPES); - for (; arch; arch = arch->next) { - const char *s1, *s2; - var.v = arch; - - s1 = LOC(lang, arch->name[0]); - addtoken(tokens, s1, var); - s2 = LOC(lang, arch->name[1]); - if (strcmp(s2, s1) != 0) { - addtoken(tokens, s2, var); - } - } - } -} - -static int parse_archetypes(xmlDocPtr doc) -{ - char zName[64]; - xmlXPathContextPtr xpath = xmlXPathNewContext(doc); - xmlXPathObjectPtr result = - xmlXPathEvalExpression(BAD_CAST "/eressea/archetypes/archetype", xpath); - xmlNodeSetPtr nodes = result->nodesetval; - - xmlChar *propValue; - if (nodes) { - int i; - for (i = 0; i != nodes->nodeNr; ++i) { - xmlNodePtr node = nodes->nodeTab[i]; - xmlNodePtr child; - archetype *arch = calloc(1, sizeof(archetype)); - xmlXPathObjectPtr sub; - - propValue = xmlGetProp(node, BAD_CAST "name"); - assert(propValue != NULL); - arch->name[0] = _strdup((const char *)propValue); - sprintf(zName, "%s_p", arch->name[0]); - arch->name[1] = _strdup(zName); - xmlFree(propValue); - - propValue = xmlGetProp(node, BAD_CAST "equip"); - if (propValue != NULL) { - arch->equip = get_equipment((const char *)propValue); - xmlFree(propValue); - } else { - arch->equip = get_equipment(arch->name[0]); - } - - propValue = xmlGetProp(node, BAD_CAST "building"); - if (propValue != NULL) { - arch->btype = bt_find((const char *)propValue); - xmlFree(propValue); - } - - arch->size = xml_ivalue(node, "cost", 0); - - for (child = node->children; child; child = child->next) { - if (strcmp((const char *)child->name, "function") == 0) { - xmlChar *propName = xmlGetProp(child, BAD_CAST "name"); - xmlChar *propValue = xmlGetProp(child, BAD_CAST "value"); - if (strcmp((const char *)propName, "create")) { - pf_generic foo = get_function((const char *)propValue); - arch->exec = (archetype_function) foo; - } - xmlFree(propValue); - xmlFree(propName); - } - } - xpath->node = node; - sub = xmlXPathEvalExpression(BAD_CAST "allow|deny", xpath); - if (sub->nodesetval && sub->nodesetval->nodeNr) { - int k; - arch->rules = calloc(sub->nodesetval->nodeNr + 1, sizeof(rule)); - for (k = 0; k != sub->nodesetval->nodeNr; ++k) { - xmlNodePtr rule = sub->nodesetval->nodeTab[k]; - arch->rules[k].allow = (rule->name[0] == 'a'); - - propValue = xmlGetProp(rule, BAD_CAST "property"); - arch->rules[k].property = _strdup((const char *)propValue); - xmlFree(propValue); - - propValue = xmlGetProp(rule, BAD_CAST "value"); - arch->rules[k].value = _strdup((const char *)propValue); - xmlFree(propValue); - } - } - xmlXPathFreeObject(sub); - - xpath->node = node; - sub = xmlXPathEvalExpression(BAD_CAST "construction", xpath); - if (sub->nodesetval) { - xml_readconstruction(xpath, sub->nodesetval, &arch->ctype); - } - xmlXPathFreeObject(sub); - register_archetype(arch); - } - } - xmlXPathFreeObject(result); - - xmlXPathFreeContext(xpath); - return 0; -} - -void register_archetypes(void) -{ - xml_register_callback(parse_archetypes); -} diff --git a/src/archetype.h b/src/archetype.h deleted file mode 100644 index 55c6896cc..000000000 --- a/src/archetype.h +++ /dev/null @@ -1,52 +0,0 @@ -/* vi: set ts=2: -+-------------------+ -| | Enno Rehling -| Eressea PBEM host | Christian Schlittchen -| (c) 1998 - 2007 | Katja Zedel -| | Henning Peters -+-------------------+ - -This program may not be used, modified or distributed -without prior permission by the authors of Eressea. -*/ - -#ifndef H_GC_ARCHETYPE -#define H_GC_ARCHETYPE - -#ifdef __cplusplus -extern "C" { -#endif - - typedef struct rule { - bool allow; - char *property; - char *value; - } rule; - - struct archetype; - typedef int (*archetype_function) (struct unit * u, const struct archetype *, - int); - - typedef struct archetype { - struct archetype *next; - char *name[2]; - int size; - struct building_type *btype; - struct equipment *equip; - struct construction *ctype; - struct rule *rules; - archetype_function exec; - } archetype; - - extern const struct archetype *find_archetype(const char *s, - const struct locale *lang); - extern void init_archetypes(void); - extern void register_archetype(struct archetype *arch); - extern void register_archetypes(void); - - extern struct attrib_type at_recruit; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/economy.c b/src/economy.c index ca7690b21..c85bdf6ac 100644 --- a/src/economy.c +++ b/src/economy.c @@ -22,7 +22,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "economy.h" /* gamecode includes */ -#include "archetype.h" #include "give.h" #include "laws.h" #include "randenc.h" @@ -101,7 +100,6 @@ static request *oa; #define RECRUIT_MERGE 1 #define RECRUIT_CLASSIC 2 -#define RECRUIT_ARCHETYPES 4 static int rules_recruit = -1; static void recruit_init(void) @@ -114,9 +112,6 @@ static void recruit_init(void) if (get_param_int(global.parameters, "recruit.classic", 1)) { rules_recruit |= RECRUIT_CLASSIC; } - if (get_param_int(global.parameters, "recruit.archetype", 0)) { - rules_recruit |= RECRUIT_ARCHETYPES; - } } } @@ -510,7 +505,7 @@ static void recruit(unit * u, struct order *ord, request ** recruitorders) if (u->number == 0) { str = getstrtoken(); if (str && str[0]) { - /* Monster dürfen REKRUTIERE 15 dracoid machen + /* Monsters can RECRUIT 15 DRACOID * also: secondary race */ rc = findrace(str, f->locale); if (rc != NULL) { @@ -1145,152 +1140,6 @@ void maintain_buildings(region * r, bool crash) } } -static int recruit_archetype(unit * u, order * ord) -{ - bool merge = (u->number > 0); - int want; - const char *s; - - if (rules_recruit < 0) - recruit_init(); - - init_tokens(ord); - skip_token(); - want = getuint(); - s = getstrtoken(); - if (want > 0 && s && s[0]) { - int n = want; - const archetype *arch = find_archetype(s, u->faction->locale); - attrib *a = NULL; - - if ((rules_recruit & RECRUIT_MERGE) == 0 && merge) { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "unit_must_be_new", "")); - /* TODO: error message */ - return 0; - } - - if (arch == NULL) { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "unknown_archetype", - "name", s)); - /* TODO: error message */ - return 0; - } - if (arch->rules) { - /* Simple allow/deny style restrictions for archetypes (let only humans - * recruit gamedesigners, etc). These need to be more powerful to be - * useful, and the current way they are implemented is not, but the - * general idea strikes me as good. Also, feedback should be configurable - * for each failed rule. - */ - int k; - for (k = 0; arch->rules[k].property; ++k) { - bool match = false; - if (arch->rules[k].value[0] == '*') - match = true; - else if (strcmp(arch->rules[k].property, "race") == 0) { - const race *rc = rc_find(arch->rules[k].value); - assert(rc); - if (rc == u_race(u)) - match = true; - } else if (strcmp(arch->rules[k].property, "building") == 0) { - const building_type *btype = bt_find(arch->rules[k].value); - assert(btype); - if (u->building && u->building->type == btype) - match = true; - } - if (match) { - if (arch->rules[k].allow) - break; - else { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "recruit_rule_fail", - "property value", arch->rules[k].property, - arch->rules[k].value)); - /* TODO: error message */ - return 0; - } - } - } - } - if (arch->btype) { - if (u->building == NULL || u->building->type != arch->btype) { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, - "unit_must_be_in_building", "type", arch->btype)); - /* TODO: error message */ - return 0; - } - if (arch->size) { - int maxsize = u->building->size; - attrib *a = a_find(u->building->attribs, &at_recruit); - if (a != NULL) { - maxsize -= a->data.i; - } - n = _min(maxsize / arch->size, n); - if (n <= 0) { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, - "recruit_capacity_exhausted", "building", u->building)); - /* TODO: error message */ - return 0; - } - } - } - - n = build(u, arch->ctype, 0, n); - if (n > 0) { - unit *u2; - if (merge) { - u2 = create_unit(u->region, u->faction, 0, u_race(u), 0, 0, u); - } else { - u2 = u; - } - if (arch->exec) { - n = arch->exec(u2, arch, n); - } else { - set_number(u2, n); - equip_unit(u2, arch->equip); - u2->hp = n * unit_max_hp(u2); - if (arch->size) { - if (a == NULL) - a = a_add(&u->building->attribs, a_new(&at_recruit)); - a->data.i += n * arch->size; - } - } - ADDMSG(&u->faction->msgs, msg_message("recruit_archetype", - "unit amount archetype", u, n, arch->name[n == 1])); - if (u != u2 && u_race(u) == u_race(u2)) { - transfermen(u2, u, u2->number); - } - return n; - } else - switch (n) { - case ENOMATERIALS: - ADDMSG(&u->faction->msgs, msg_materials_required(u, ord, arch->ctype, - want)); - break; - case ELOWSKILL: - case ENEEDSKILL: - /* no skill, or not enough skill points to build */ - cmistake(u, ord, 50, MSG_PRODUCE); - break; - case EBUILDINGREQ: - ADDMSG(&u->faction->msgs, - msg_feedback(u, u->thisorder, "building_needed", "building", - arch->ctype->btype->_name)); - break; - default: - assert(!"unhandled return value from build() in recruit_archetype"); - } - return 0; - } - return -1; -} - -int recruit_archetypes(void) -{ - if (rules_recruit < 0) - recruit_init(); - return (rules_recruit & RECRUIT_ARCHETYPES) != 0; -} - void economics(region * r) { unit *u; @@ -1333,11 +1182,6 @@ void economics(region * r) if ((rules_recruit & RECRUIT_MERGE) || u->number == 0) { for (ord = u->orders; ord; ord = ord->next) { if (get_keyword(ord) == K_RECRUIT) { - if (rules_recruit & RECRUIT_ARCHETYPES) { - if (recruit_archetype(u, ord) >= 0) { - continue; - } - } if (rules_recruit & RECRUIT_CLASSIC) { recruit(u, ord, &recruitorders); } diff --git a/src/eressea.c b/src/eressea.c index e10293414..16e9763f3 100755 --- a/src/eressea.c +++ b/src/eressea.c @@ -24,11 +24,9 @@ #include #include #include -#include "archetype.h" #include "report.h" #include "items.h" #include "creport.h" -#include "xmlreport.h" void game_done(void) { @@ -58,7 +56,6 @@ void game_init(void) register_reports(); register_nr(); register_cr(); - register_xr(); register_names(); register_resources(); @@ -76,8 +73,9 @@ void game_init(void) register_wormholes(); register_itemtypes(); +#ifdef USE_LIBXML2 register_xmlreader(); - register_archetypes(); +#endif register_attributes(); register_gmcmd(); diff --git a/src/give.c b/src/give.c index c51f3a67a..d700b10f4 100644 --- a/src/give.c +++ b/src/give.c @@ -286,29 +286,6 @@ void give_men(int n, unit * u, unit * u2, struct order *ord) } if (u2) { - if (u2->number != 0 && recruit_archetypes()) { - /* must have same set of skills */ - bool okay = false; - if (u->skill_size == u2->skill_size) { - int i; - for (i = 0; i != u->skill_size; ++i) { - int j; - for (j = 0; j != u2->skill_size; ++j) { - if (u->skills[i].id == u2->skills[j].id) - break; - } - if (j != u2->skill_size) - break; - } - if (i == u->skill_size) - okay = true; - } - if (!okay) { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "give_cannot_merge", - "")); - } - } - /* Einheiten von Schiffen können nicht NACH in von * Nicht-alliierten bewachten Regionen ausführen */ sh = leftship(u); diff --git a/src/helpers.c b/src/helpers.c index 1f6b12400..7ba1c14bd 100644 --- a/src/helpers.c +++ b/src/helpers.c @@ -29,8 +29,6 @@ without prior permission by the authors of Eressea. #include #include -#include "archetype.h" - #include #include @@ -558,35 +556,6 @@ lua_useitem(struct unit *u, const struct item_type *itype, int amount, return result; } -static int lua_recruit(struct unit *u, const struct archetype *arch, int amount) -{ - lua_State *L = (lua_State *) global.vm_state; - int result = 0; - char fname[64]; - - strlcpy(fname, "recruit_", sizeof(fname)); - strlcat(fname, arch->name[0], sizeof(fname)); - - lua_getglobal(L, fname); - if (lua_isfunction(L, -1)) { - tolua_pushusertype(L, (void *)u, TOLUA_CAST "unit"); - tolua_pushnumber(L, (lua_Number) amount); - - if (lua_pcall(L, 2, 1, 0) != 0) { - const char *error = lua_tostring(L, -1); - log_error("use(%s) calling '%s': %s.\n", unitname(u), fname, error); - lua_pop(L, 1); - } else { - result = (int)lua_tonumber(L, -1); - lua_pop(L, 1); - } - } else { - log_error("use(%s) calling '%s': not a function.\n", unitname(u), fname); - lua_pop(L, 1); - } - return result; -} - int tolua_toid(lua_State * L, int idx, int def) { int no = 0; @@ -610,7 +579,6 @@ void register_tolua_helpers(void) TOLUA_CAST "lua_building_taxes"); register_function((pf_generic) & lua_agebuilding, TOLUA_CAST "lua_agebuilding"); - register_function((pf_generic) & lua_recruit, TOLUA_CAST "lua_recruit"); register_function((pf_generic) & lua_callspell, TOLUA_CAST "lua_castspell"); register_function((pf_generic) & lua_initfamiliar, TOLUA_CAST "lua_initfamiliar"); diff --git a/src/kernel/battle.c b/src/kernel/battle.c index 408549d62..2794031f8 100644 --- a/src/kernel/battle.c +++ b/src/kernel/battle.c @@ -74,7 +74,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. static FILE *bdebug; #define TACTICS_BONUS 1 /* when undefined, we have a tactics round. else this is the bonus tactics give */ -#define TACTICS_MODIFIER 1 /* modifier for generals in the fromt/rear */ +#define TACTICS_MODIFIER 1 /* modifier for generals in the front/rear */ #define CATAPULT_INITIAL_RELOAD 4 /* erster schuss in runde 1 + rng_int() % INITIAL */ #define CATAPULT_STRUCTURAL_DAMAGE diff --git a/src/kernel/xmlkernel.h b/src/kernel/xmlkernel.h deleted file mode 100644 index b07b93ee5..000000000 --- a/src/kernel/xmlkernel.h +++ /dev/null @@ -1,28 +0,0 @@ -/* vi: set ts=2: -+-------------------+ -| | Enno Rehling -| Eressea PBEM host | Christian Schlittchen -| (c) 1998 - 2007 | Katja Zedel -| | Henning Peters -+-------------------+ - -This program may not be used, modified or distributed -without prior permission by the authors of Eressea. -*/ - -#ifndef H_KRNL_XML -#define H_KRNL_XML - -#ifdef __cplusplus -extern "C" { -#endif - -#include - - extern void xml_readconstruction(xmlXPathContextPtr xpath, - xmlNodeSetPtr nodeSet, struct construction **consPtr); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 0d1d7bd26..73d73978d 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -40,10 +40,12 @@ without prior permission by the authors of Eressea. #include #include +#ifdef USE_LIBXML2 /* libxml includes */ #include #include #include +#endif /* libc includes */ #include @@ -51,6 +53,7 @@ without prior permission by the authors of Eressea. #include #include +#ifdef USE_LIBXML2 static void xml_readtext(xmlNodePtr node, struct locale **lang, xmlChar ** text) { xmlChar *propValue = xmlGetProp(node, BAD_CAST "locale"); @@ -2364,3 +2367,4 @@ void register_xmlreader(void) xml_register_callback(parse_calendar); xml_register_callback(parse_directions); } +#endif diff --git a/src/laws.c b/src/laws.c index 1229559b9..a95aa7a33 100755 --- a/src/laws.c +++ b/src/laws.c @@ -25,7 +25,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* gamecode includes */ #include "economy.h" -#include "archetype.h" #include "monster.h" #include "randenc.h" #include "spy.h" @@ -4717,7 +4716,6 @@ int init_data(const char *filename, const char *catalog) return l; init_locales(); - init_archetypes(); if (turn < 0) { turn = first_turn; diff --git a/src/util/xml.c b/src/util/xml.c index 0755e7331..b55836e5a 100644 --- a/src/util/xml.c +++ b/src/util/xml.c @@ -85,6 +85,7 @@ double xml_fvalue(xmlNodePtr node, const char *name, double dflt) #include #include +#ifdef USE_LIBXML2 typedef struct xml_reader { struct xml_reader *next; xml_callback callback; @@ -103,9 +104,11 @@ void xml_register_callback(xml_callback callback) insert = &(*insert)->next; *insert = reader; } +#endif int read_xml(const char *filename, const char *catalog) { +#ifdef USE_LIBXML2 xml_reader *reader = xmlReaders; xmlDocPtr doc; int result; @@ -132,4 +135,8 @@ int read_xml(const char *filename, const char *catalog) } xmlFreeDoc(doc); return result; +#else + log_error("LIBXML2 disabled, cannot read %s.\n", filename); + return -1; +#endif } diff --git a/src/util/xml.h b/src/util/xml.h index 42b9178bb..9ffe4406e 100644 --- a/src/util/xml.h +++ b/src/util/xml.h @@ -17,17 +17,19 @@ extern "C" { #endif +#ifdef USE_LIBXML2 /* new xml functions: */ #include typedef int (*xml_callback) (xmlDocPtr); extern void xml_register_callback(xml_callback callback); - extern int read_xml(const char *filename, const char *catalog); extern double xml_fvalue(xmlNodePtr node, const char *name, double dflt); extern int xml_ivalue(xmlNodePtr node, const char *name, int dflt); extern bool xml_bvalue(xmlNodePtr node, const char *name, bool dflt); const xmlChar *xml_i(double number); +#endif + extern int read_xml(const char *filename, const char *catalog); #ifdef __cplusplus } diff --git a/src/xmlreport.c b/src/xmlreport.c index 0be472540..6bf30d75f 100644 --- a/src/xmlreport.c +++ b/src/xmlreport.c @@ -64,12 +64,14 @@ without prior permission by the authors of Eressea. #include #include +#ifdef USE_LIBXML2 /* libxml2 includes */ #include #include #ifdef USE_ICONV #include #endif +#endif /* libc includes */ #include