From ddbb2bea8a2a246a161c053bc16f11037dd7660f Mon Sep 17 00:00:00 2001 From: James Turner Date: Sun, 16 Sep 2012 17:07:35 +0100 Subject: [PATCH] Option to use system, instead of built-in, expat At least one Linux distribution packager of FG has complained that we're bundling expat in our binaries. To keep them happy, add the option (-DSYSTEM_EXPAT=1 at cmake time) to use the system expat instead. For the moment (and simplicity), this requires building SIMGEAR_SHARED (which is fired to on by selecting the option). --- CMakeLists.txt | 12 ++++++++- simgear/CMakeLists.txt | 4 ++- simgear/simgear_config_cmake.h.in | 2 ++ simgear/xml/CMakeLists.txt | 43 +++++++++++++++++-------------- simgear/xml/easyxml.cxx | 13 ++++++++-- 5 files changed, 51 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ccde5449..328dfdd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,7 @@ option(JPEG_FACTORY "Enable JPEG-factory support" OFF) option(ENABLE_LIBSVN "Set to ON to build SimGear with libsvnclient support" ON) option(ENABLE_RTI "Set to ON to build SimGear with RTI support" OFF) option(ENABLE_TESTS "Set to OFF to disable building SimGear's test applications" ON) +option(SYSTEM_EXPAT "Set to ON to build SimGear using the system libExpat" OFF) if (MSVC) GET_FILENAME_COMPONENT(PARENT_DIR ${PROJECT_SOURCE_DIR} PATH) @@ -168,6 +169,16 @@ endif(ENABLE_LIBSVN) find_package(ZLIB REQUIRED) find_package(Threads REQUIRED) +if (SYSTEM_EXPAT) + message(STATUS "Requested to use system Expat library, forcing SIMGEAR_SHARED to true") + set(SIMGEAR_SHARED ON) + find_package(EXPAT REQUIRED) + include_directories(${EXPAT_INCLUDE_DIRS}) +else() + message(STATUS "Using built-in expat code") + add_definitions(-DHAVE_EXPAT_CONFIG_H) +endif(SYSTEM_EXPAT) + check_include_file(sys/time.h HAVE_SYS_TIME_H) check_include_file(sys/timeb.h HAVE_SYS_TIMEB_H) check_include_file(unistd.h HAVE_UNISTD_H) @@ -272,7 +283,6 @@ include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS} ${OPENAL_INCLUDE_DIR} ) add_definitions(-DHAVE_CONFIG_H) -add_definitions(-DHAVE_EXPAT_CONFIG_H) # configure a header file to pass some of the CMake settings # to the source code diff --git a/simgear/CMakeLists.txt b/simgear/CMakeLists.txt index 2ec11752..872be32a 100644 --- a/simgear/CMakeLists.txt +++ b/simgear/CMakeLists.txt @@ -60,7 +60,9 @@ if(SIMGEAR_SHARED) set_property(TARGET SimGearCore PROPERTY VERSION ${SIMGEAR_VERSION}) set_property(TARGET SimGearCore PROPERTY SOVERSION ${SIMGEAR_SOVERSION}) - target_link_libraries(SimGearCore ${ZLIB_LIBRARY} ${RT_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(SimGearCore ${ZLIB_LIBRARY} ${RT_LIBRARY} + ${EXPAT_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT}) if(LIBSVN_FOUND) target_link_libraries(SimGearCore ${LIBSVN_LIBRARIES}) diff --git a/simgear/simgear_config_cmake.h.in b/simgear/simgear_config_cmake.h.in index 563f9f73..a9d12392 100644 --- a/simgear/simgear_config_cmake.h.in +++ b/simgear/simgear_config_cmake.h.in @@ -17,3 +17,5 @@ #cmakedefine HAVE_LIBSVN_CLIENT_1 #cmakedefine GCC_ATOMIC_BUILTINS_FOUND + +#cmakedefine SYSTEM_EXPAT diff --git a/simgear/xml/CMakeLists.txt b/simgear/xml/CMakeLists.txt index 0cb8d2c4..8a96949d 100644 --- a/simgear/xml/CMakeLists.txt +++ b/simgear/xml/CMakeLists.txt @@ -7,26 +7,31 @@ set(HEADERS ) set(SOURCES - asciitab.h - hashtable.h - iasciitab.h - latin1tab.h - nametab.h - utf8tab.h - xmldef.h - xmlparse.h - xmlrole.h - xmltok.h - xmltok_impl.h - hashtable.c - xmlparse.c - xmlrole.c - xmltok.c easyxml.cxx - internal.h - ascii.h - expat.h - expat_external.h ) +if (NOT SYSTEM_EXPAT) + list(APPEND SOURCES + asciitab.h + hashtable.h + iasciitab.h + latin1tab.h + nametab.h + utf8tab.h + xmldef.h + xmlparse.h + xmlrole.h + xmltok.h + xmltok_impl.h + hashtable.c + xmlparse.c + xmlrole.c + xmltok.c + internal.h + ascii.h + expat.h + expat_external.h + ) +endif() + simgear_component(xml xml "${SOURCES}" "${HEADERS}") diff --git a/simgear/xml/easyxml.cxx b/simgear/xml/easyxml.cxx index 65a35513..5cccdc48 100644 --- a/simgear/xml/easyxml.cxx +++ b/simgear/xml/easyxml.cxx @@ -4,13 +4,22 @@ * This file is in the Public Domain, and comes with NO WARRANTY of any kind. */ +#ifdef HAVE_CONFIG_H +# include +#endif + #include #include // strcmp() #include "easyxml.hxx" -#include "xmlparse.h" - + +#ifdef SYSTEM_EXPAT +# include +#else +# include "xmlparse.h" +#endif + #include #include