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