Support linking against an external tinyxml if EXTERNAL_TINYXML is set
As best as I can tell, the copy of tinyxml dfhack uses is unmodified from whenever it was first bundled. This commit adds an option to CMake, EXTERNAL_TINYXML, that if set to ON, will attempt to link against a system tinyxml instead of using the dfhack-bundled one. It defaults to OFF, so there is no change in default behavior. The DFHACK_TINYXML variable is then set to either "tinyxml" or "dfhack-tinyxml" so the library (and any plugins that need updating) can link against one or the other. The FindTinyXML.cmake script was taken from https://github.com/ros/cmake_modules (licensed under the 3-clause BSD license). Add license text to new CMake file.develop
parent
036c0f787c
commit
ae55d2d526
@ -0,0 +1,107 @@
|
|||||||
|
# Sourced from:
|
||||||
|
# https://raw.githubusercontent.com/ros/cmake_modules/0.4-devel/cmake/Modules/FindTinyXML.cmake
|
||||||
|
# under the following license: https://github.com/ros/cmake_modules/blob/0.4-devel/LICENSE,
|
||||||
|
# reproduced here:
|
||||||
|
|
||||||
|
# Copyright (c) 2013, Open Source Robotics Foundation
|
||||||
|
# All rights reserved.
|
||||||
|
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
# are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
# Redistributions of source code must retain the above copyright notice, this
|
||||||
|
# list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
# list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
# other materials provided with the distribution.
|
||||||
|
|
||||||
|
# Neither the name of the {organization} nor the names of its
|
||||||
|
# contributors may be used to endorse or promote products derived from
|
||||||
|
# this software without specific prior written permission.
|
||||||
|
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
#
|
||||||
|
# CMake script for finding TinyXML.
|
||||||
|
#
|
||||||
|
# Input variables:
|
||||||
|
#
|
||||||
|
# - TinyXML_ROOT_DIR (optional): When specified, header files and libraries will be searched for in
|
||||||
|
# ${TinyXML_ROOT_DIR}/include
|
||||||
|
# ${TinyXML_ROOT_DIR}/libs
|
||||||
|
# respectively, and the default CMake search order will be ignored. When unspecified, the default
|
||||||
|
# CMake search order is used.
|
||||||
|
# This variable can be specified either as a CMake or environment variable. If both are set,
|
||||||
|
# preference is given to the CMake variable.
|
||||||
|
# Use this variable for finding packages installed in a nonstandard location, or for enforcing
|
||||||
|
# that one of multiple package installations is picked up.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Cache variables (not intended to be used in CMakeLists.txt files)
|
||||||
|
#
|
||||||
|
# - TinyXML_INCLUDE_DIR: Absolute path to package headers.
|
||||||
|
# - TinyXML_LIBRARY: Absolute path to library.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Output variables:
|
||||||
|
#
|
||||||
|
# - TinyXML_FOUND: Boolean that indicates if the package was found
|
||||||
|
# - TinyXML_INCLUDE_DIRS: Paths to the necessary header files
|
||||||
|
# - TinyXML_LIBRARIES: Package libraries
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Example usage:
|
||||||
|
#
|
||||||
|
# find_package(TinyXML)
|
||||||
|
# if(NOT TinyXML_FOUND)
|
||||||
|
# # Error handling
|
||||||
|
# endif()
|
||||||
|
# ...
|
||||||
|
# include_directories(${TinyXML_INCLUDE_DIRS} ...)
|
||||||
|
# ...
|
||||||
|
# target_link_libraries(my_target ${TinyXML_LIBRARIES})
|
||||||
|
#
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
# Get package location hint from environment variable (if any)
|
||||||
|
if(NOT TinyXML_ROOT_DIR AND DEFINED ENV{TinyXML_ROOT_DIR})
|
||||||
|
set(TinyXML_ROOT_DIR "$ENV{TinyXML_ROOT_DIR}" CACHE PATH
|
||||||
|
"TinyXML base directory location (optional, used for nonstandard installation paths)")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Search path for nonstandard package locations
|
||||||
|
if(TinyXML_ROOT_DIR)
|
||||||
|
set(TinyXML_INCLUDE_PATH PATHS "${TinyXML_ROOT_DIR}/include" NO_DEFAULT_PATH)
|
||||||
|
set(TinyXML_LIBRARY_PATH PATHS "${TinyXML_ROOT_DIR}/lib" NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Find headers and libraries
|
||||||
|
find_path(TinyXML_INCLUDE_DIR NAMES tinyxml.h PATH_SUFFIXES "tinyxml" ${TinyXML_INCLUDE_PATH})
|
||||||
|
find_library(TinyXML_LIBRARY NAMES tinyxml PATH_SUFFIXES "tinyxml" ${TinyXML_LIBRARY_PATH})
|
||||||
|
|
||||||
|
mark_as_advanced(TinyXML_INCLUDE_DIR
|
||||||
|
TinyXML_LIBRARY)
|
||||||
|
|
||||||
|
# Output variables generation
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(TinyXML DEFAULT_MSG TinyXML_LIBRARY
|
||||||
|
TinyXML_INCLUDE_DIR)
|
||||||
|
|
||||||
|
set(TinyXML_FOUND ${TINYXML_FOUND}) # Enforce case-correctness: Set appropriately cased variable...
|
||||||
|
unset(TINYXML_FOUND) # ...and unset uppercase variable generated by find_package_handle_standard_args
|
||||||
|
|
||||||
|
if(TinyXML_FOUND)
|
||||||
|
set(TinyXML_INCLUDE_DIRS ${TinyXML_INCLUDE_DIR})
|
||||||
|
set(TinyXML_LIBRARIES ${TinyXML_LIBRARY})
|
||||||
|
endif()
|
@ -1,3 +1,5 @@
|
|||||||
|
if(NOT TinyXML_FOUND)
|
||||||
project(dfhack-tinyxml)
|
project(dfhack-tinyxml)
|
||||||
ADD_LIBRARY(dfhack-tinyxml STATIC EXCLUDE_FROM_ALL tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp)
|
ADD_LIBRARY(dfhack-tinyxml STATIC EXCLUDE_FROM_ALL tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp)
|
||||||
IDE_FOLDER(dfhack-tinyxml "Depends")
|
IDE_FOLDER(dfhack-tinyxml "Depends")
|
||||||
|
endif()
|
||||||
|
Loading…
Reference in New Issue