From 1c73b1a624d848f4bb6a86d7811f19098e9728a4 Mon Sep 17 00:00:00 2001
From: Julien Malik <julien.malik@c-s.fr>
Date: Tue, 13 Mar 2012 06:44:55 +0100
Subject: [PATCH] ENH: support external tinyXML

---
 CMake/FindTinyXML.cmake             | 26 ++++++++++++++++++++++++++
 CMake/ImportTinyXML.cmake           | 10 ++++++++++
 CMake/otbIncludeDirectories.cmake   | 19 +++++++++++++++++--
 CMakeLists.txt                      |  1 +
 Code/Fuzzy/CMakeLists.txt           |  2 +-
 Code/IO/CMakeLists.txt              |  2 +-
 Code/ObjectDetection/CMakeLists.txt |  2 +-
 Testing/Utilities/CMakeLists.txt    |  2 +-
 Utilities/CMakeLists.txt            |  8 ++++++--
 Utilities/tinyXMLlib/CMakeLists.txt | 14 ++++++++------
 10 files changed, 72 insertions(+), 14 deletions(-)
 create mode 100644 CMake/FindTinyXML.cmake
 create mode 100644 CMake/ImportTinyXML.cmake

diff --git a/CMake/FindTinyXML.cmake b/CMake/FindTinyXML.cmake
new file mode 100644
index 0000000000..e9bf948562
--- /dev/null
+++ b/CMake/FindTinyXML.cmake
@@ -0,0 +1,26 @@
+# - Find TinyXML
+# Find the native TinyXML includes and library
+#
+#   TINYXML_FOUND       - True if TinyXML found.
+#   TINYXML_INCLUDE_DIR - where to find tinyxml.h, etc.
+#   TINYXML_LIBRARIES   - List of libraries when using TinyXML.
+#
+
+IF( TINYXML_INCLUDE_DIR )
+    # Already in cache, be silent
+    SET( TinyXML_FIND_QUIETLY TRUE )
+ENDIF( TINYXML_INCLUDE_DIR )
+
+FIND_PATH( TINYXML_INCLUDE_DIR tinyxml.h
+           PATH_SUFFIXES tinyxml )
+
+FIND_LIBRARY( TINYXML_LIBRARIES
+              NAMES tinyxml
+              PATH_SUFFIXES tinyxml )
+
+# handle the QUIETLY and REQUIRED arguments and set TINYXML_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE( FindPackageHandleStandardArgs )
+FIND_PACKAGE_HANDLE_STANDARD_ARGS( TinyXML DEFAULT_MSG TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )
+
+MARK_AS_ADVANCED( TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )
diff --git a/CMake/ImportTinyXML.cmake b/CMake/ImportTinyXML.cmake
new file mode 100644
index 0000000000..8cdae4a9b4
--- /dev/null
+++ b/CMake/ImportTinyXML.cmake
@@ -0,0 +1,10 @@
+MESSAGE(STATUS "Importing TinyXML...")
+FIND_PACKAGE(TinyXML)
+
+IF(TINYXML_FOUND)
+  OPTION(OTB_USE_EXTERNAL_TINYXML "Use external TinyXML library." ON)
+ELSE(TINYXML_FOUND)
+  OPTION(OTB_USE_EXTERNAL_TINYXML "Use external TinyXML library." OFF)
+  SET(TINYXML_LIBRARIES otbtinyXML)
+ENDIF(TINYXML_FOUND)
+MARK_AS_ADVANCED(OTB_USE_EXTERNAL_TINYXML)
diff --git a/CMake/otbIncludeDirectories.cmake b/CMake/otbIncludeDirectories.cmake
index 0961d6a7b5..bcc9aa813f 100644
--- a/CMake/otbIncludeDirectories.cmake
+++ b/CMake/otbIncludeDirectories.cmake
@@ -64,7 +64,6 @@ SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
   ${OTB_SOURCE_DIR}/Utilities/otbossimplugins/ossim
   ${OTB_SOURCE_DIR}/Utilities/InsightJournal
   ${OTB_SOURCE_DIR}/Utilities/otb6S
-  ${OTB_SOURCE_DIR}/Utilities/tinyXMLlib
 #  ${OTB_SOURCE_DIR}/Utilities/otbgalib
   ${OTB_SOURCE_DIR}/Utilities/otbkml/src
   ${OTB_SOURCE_DIR}/Utilities/otbkml/third_party
@@ -110,6 +109,14 @@ IF(OTB_USE_SIFTFAST)
       ${OTB_SOURCE_DIR}/Utilities/otbsiftfast)
 ENDIF(OTB_USE_SIFTFAST)
 
+IF(OTB_USE_EXTERNAL_TINYXML)
+  SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
+      ${TINYXML_INCLUDE_DIRS})
+ELSEIF(OTB_USE_EXTERNAL_TINYXML)
+  SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
+      ${OTB_SOURCE_DIR}/Utilities/tinyXMLlib)
+ENDIF(OTB_USE_EXTERNAL_TINYXML)
+
 #-----------------------------------------------------------------------------
 # Include directories from the ossim build tree
 SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
@@ -320,7 +327,6 @@ SET(OTB_INCLUDE_RELATIVE_DIRS ${OTB_INCLUDE_RELATIVE_DIRS}
   Utilities/otbsvm
   Utilities/InsightJournal
   Utilities/otb6S
-  Utilities/tinyXMLlib
 #  Utilities/otbgalib
   Utilities/otbkml
   Utilities/otbkml/src
@@ -384,6 +390,15 @@ ELSE(OTB_USE_EXTERNAL_FLTK)
   		        Utilities/FLTK)
 ENDIF(OTB_USE_EXTERNAL_FLTK)
 
+#For TinyXML header file
+IF(OTB_USE_EXTERNAL_TINYXML)
+        SET(OTB_INCLUDE_ABSOLUE_DIRS ${OTB_INCLUDE_ABSOLUE_DIRS}
+                ${TINYXML_INCLUDE_DIRS})
+ELSE(OTB_USE_EXTERNAL_TINYXML)
+        SET(OTB_INCLUDE_RELATIVE_DIRS ${OTB_INCLUDE_RELATIVE_DIRS}
+                Utilities/tinyXMLlib)
+ENDIF(OTB_USE_EXTERNAL_TINYXML)
+
 #For GLU header file
 SET(OTB_INCLUDE_ABSOLUE_DIRS ${OTB_INCLUDE_ABSOLUE_DIRS}
   		${OTB_GLU_INCLUDE_PATH} )
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ed9f55bd6..94c12f66d8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -230,6 +230,7 @@ INCLUDE(ImportOssim)
 INCLUDE(ImportQt4)
 INCLUDE(ImportGetText)
 INCLUDE(ImportSiftFast)
+INCLUDE(ImportTinyXML)
 
 
 INCLUDE_DIRECTORIES (
diff --git a/Code/Fuzzy/CMakeLists.txt b/Code/Fuzzy/CMakeLists.txt
index 800a234a4c..9d7c197986 100644
--- a/Code/Fuzzy/CMakeLists.txt
+++ b/Code/Fuzzy/CMakeLists.txt
@@ -3,7 +3,7 @@
 FILE(GLOB OTBFuzzy_SRCS "*.cxx" )
 
 ADD_LIBRARY(OTBFuzzy ${OTBFuzzy_SRCS})
-TARGET_LINK_LIBRARIES (OTBFuzzy OTBCommon tinyXML)
+TARGET_LINK_LIBRARIES (OTBFuzzy OTBCommon ${TINYXML_LIBRARIES})
 IF(OTB_LIBRARY_PROPERTIES)
   SET_TARGET_PROPERTIES(OTBFuzzy PROPERTIES ${OTB_LIBRARY_PROPERTIES})
 ENDIF(OTB_LIBRARY_PROPERTIES)
diff --git a/Code/IO/CMakeLists.txt b/Code/IO/CMakeLists.txt
index 9b5f0f1e6a..6b215aeaf7 100644
--- a/Code/IO/CMakeLists.txt
+++ b/Code/IO/CMakeLists.txt
@@ -39,7 +39,7 @@ ADD_LIBRARY(OTBIO ${OTBIO_SRCS})
 #    LINK_INTERFACE_LIBRARIES ""
 #  )
 TARGET_LINK_LIBRARIES (OTBIO  ${TIFF_LIBRARY} ${GEOTIFF_LIBRARY}  ${GDAL_LIBRARY} ${OGR_LIBRARY} ${JPEG_LIBRARY} ${OPENTHREADS_LIBRARY} OTBCommon OTBBasicFilters OTBCurlAdapters)
-TARGET_LINK_LIBRARIES (OTBIO ITKIO ITKCommon otbkml tinyXML)
+TARGET_LINK_LIBRARIES (OTBIO ITKIO ITKCommon otbkml ${TINYXML_LIBRARIES})
 
 IF (OTB_USE_LIBLAS)
 IF(OTB_USE_EXTERNAL_LIBLAS)
diff --git a/Code/ObjectDetection/CMakeLists.txt b/Code/ObjectDetection/CMakeLists.txt
index 0ec0fb4252..0103a2f06d 100644
--- a/Code/ObjectDetection/CMakeLists.txt
+++ b/Code/ObjectDetection/CMakeLists.txt
@@ -2,7 +2,7 @@
 FILE(GLOB OTBObjectDetection_SRCS "*.cxx" )
 
 ADD_LIBRARY(OTBObjectDetection ${OTBObjectDetection_SRCS})
-TARGET_LINK_LIBRARIES (OTBObjectDetection OTBCommon)
+TARGET_LINK_LIBRARIES (OTBObjectDetection OTBCommon ${TINYXML_LIBRARIES})
 
 IF(OTB_LIBRARY_PROPERTIES)
   SET_TARGET_PROPERTIES(OTBObjectDetection PROPERTIES ${OTB_LIBRARY_PROPERTIES})
diff --git a/Testing/Utilities/CMakeLists.txt b/Testing/Utilities/CMakeLists.txt
index d94d025ab4..444db639f8 100644
--- a/Testing/Utilities/CMakeLists.txt
+++ b/Testing/Utilities/CMakeLists.txt
@@ -399,7 +399,7 @@ IF(NOT BUILD_SHARED_LIBS)
 ENDIF(NOT BUILD_SHARED_LIBS)
 
 ADD_EXECUTABLE(otbUtilitiesTests otbUtilitiesTests.cxx ${UtilitiesTests_SRCS})
-TARGET_LINK_LIBRARIES(otbUtilitiesTests OTBIO OTBCommon OTBTesting otbsvm otb6S tinyXML otbkml)
+TARGET_LINK_LIBRARIES(otbUtilitiesTests OTBIO OTBCommon OTBTesting otbsvm otb6S ${TINYXML_LIBRARIES} otbkml)
 
 IF(OTB_USE_SIFTFAST)
   TARGET_LINK_LIBRARIES(otbUtilitiesTests otbsiftfast)
diff --git a/Utilities/CMakeLists.txt b/Utilities/CMakeLists.txt
index 3e025b98f4..00b40cd496 100644
--- a/Utilities/CMakeLists.txt
+++ b/Utilities/CMakeLists.txt
@@ -68,8 +68,12 @@ MESSAGE(STATUS "Configuring otbossimplugins...")
 ADD_SUBDIRECTORY(otbossimplugins)
 MESSAGE(STATUS "Configuring otb6S...")
 ADD_SUBDIRECTORY(otb6S)
-MESSAGE(STATUS "Configuring tinyXMLlib...")
-ADD_SUBDIRECTORY(tinyXMLlib)
+
+IF(NOT OTB_USE_EXTERNAL_TINYXML)
+  MESSAGE(STATUS "Configuring tinyXMLlib...")
+  ADD_SUBDIRECTORY(tinyXMLlib)
+ENDIF(NOT OTB_USE_EXTERNAL_TINYXML)
+
 MESSAGE(STATUS "Configuring otbkml...")
 ADD_SUBDIRECTORY(otbkml)
 MESSAGE(STATUS "Configuring otbedison...")
diff --git a/Utilities/tinyXMLlib/CMakeLists.txt b/Utilities/tinyXMLlib/CMakeLists.txt
index e1de4a684d..93a4988a06 100644
--- a/Utilities/tinyXMLlib/CMakeLists.txt
+++ b/Utilities/tinyXMLlib/CMakeLists.txt
@@ -2,14 +2,13 @@ PROJECT(tinyXMLlib)
 
 FILE(GLOB tinyXMLlib_SRCS "*.cpp")
 FILE(GLOB tinyXMLlib_HDRS "*.h")
-ADD_LIBRARY(tinyXML ${tinyXMLlib_SRCS})
-TARGET_LINK_LIBRARIES(tinyXML)
+ADD_LIBRARY(otbtinyXML ${tinyXMLlib_SRCS})
 IF(OTB_LIBRARY_PROPERTIES)
-  SET_TARGET_PROPERTIES(tinyXML PROPERTIES ${OTB_LIBRARY_PROPERTIES})
+  SET_TARGET_PROPERTIES(otbtinyXML PROPERTIES ${OTB_LIBRARY_PROPERTIES})
 ENDIF(OTB_LIBRARY_PROPERTIES)
 
 IF(NOT OTB_INSTALL_NO_LIBRARIES)
-  INSTALL(TARGETS tinyXML
+  INSTALL(TARGETS otbtinyXML
     RUNTIME DESTINATION ${OTB_INSTALL_BIN_DIR_CM24} COMPONENT RuntimeLibraries
     LIBRARY DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} COMPONENT RuntimeLibraries
     ARCHIVE DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} COMPONENT Development)
@@ -17,6 +16,9 @@ ENDIF(NOT OTB_INSTALL_NO_LIBRARIES)
 
 IF(NOT OTB_INSTALL_NO_DEVELOPMENT)
   INSTALL(FILES ${tinyXMLlib_HDRS}
-    DESTINATION ${OTB_INSTALL_INCLUDE_DIR_CM24}/Utilities/tinyXMLlib
-    COMPONENT Development)
+          DESTINATION ${OTB_INSTALL_INCLUDE_DIR_CM24}/Utilities/tinyXMLlib
+          COMPONENT Development)
 ENDIF(NOT OTB_INSTALL_NO_DEVELOPMENT)
+
+SET(TINYXML_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+SET(TINYXML_LIBRARIES otbtinyXML)
-- 
GitLab