From 36b6e22d1c508cca15a730c825e1f1fe2c4e07d1 Mon Sep 17 00:00:00 2001
From: Rashad Kanavath <rashad.kanavath@c-s.fr>
Date: Wed, 15 Jun 2016 13:22:30 +0200
Subject: [PATCH] SuperBuild: macro for inlude file only once

---
 SuperBuild/CMake/External_boost.cmake       | 12 +--
 SuperBuild/CMake/External_curl.cmake        | 17 +---
 SuperBuild/CMake/External_expat.cmake       | 16 +---
 SuperBuild/CMake/External_fftw.cmake        | 12 +--
 SuperBuild/CMake/External_freetype.cmake    | 18 ++---
 SuperBuild/CMake/External_gdal.cmake        | 13 +--
 SuperBuild/CMake/External_geos.cmake        | 13 +--
 SuperBuild/CMake/External_geotiff.cmake     | 13 +--
 SuperBuild/CMake/External_glew.cmake        | 88 ++++++++++-----------
 SuperBuild/CMake/External_glfw.cmake        | 50 ++++++------
 SuperBuild/CMake/External_glut.cmake        | 55 ++++++-------
 SuperBuild/CMake/External_itk.cmake         | 11 +--
 SuperBuild/CMake/External_jpeg.cmake        | 12 +--
 SuperBuild/CMake/External_libkml.cmake      | 10 +--
 SuperBuild/CMake/External_libsvm.cmake      | 13 +--
 SuperBuild/CMake/External_muparser.cmake    | 12 +--
 SuperBuild/CMake/External_muparserx.cmake   | 12 +--
 SuperBuild/CMake/External_mvd.cmake         | 10 +--
 SuperBuild/CMake/External_opencv.cmake      | 10 +--
 SuperBuild/CMake/External_openjpeg.cmake    | 13 +--
 SuperBuild/CMake/External_openssl.cmake     | 14 +---
 SuperBuild/CMake/External_openthreads.cmake | 13 +--
 SuperBuild/CMake/External_ossim.cmake       | 13 +--
 SuperBuild/CMake/External_otb.cmake         |  7 +-
 SuperBuild/CMake/External_pcre.cmake        | 60 ++++++--------
 SuperBuild/CMake/External_png.cmake         | 13 +--
 SuperBuild/CMake/External_proj.cmake        | 11 +--
 SuperBuild/CMake/External_qt4.cmake         |  6 +-
 SuperBuild/CMake/External_qwt.cmake         | 12 +--
 SuperBuild/CMake/External_sqlite.cmake      | 13 +--
 SuperBuild/CMake/External_swig.cmake        | 11 +--
 SuperBuild/CMake/External_tiff.cmake        | 12 +--
 SuperBuild/CMake/External_tinyxml.cmake     | 13 +--
 SuperBuild/CMake/External_zlib.cmake        | 13 +--
 SuperBuild/CMake/SuperBuild_Macro.cmake     | 18 ++++-
 35 files changed, 181 insertions(+), 458 deletions(-)

diff --git a/SuperBuild/CMake/External_boost.cmake b/SuperBuild/CMake/External_boost.cmake
index ff0dd1e44c..70b2e9eff3 100644
--- a/SuperBuild/CMake/External_boost.cmake
+++ b/SuperBuild/CMake/External_boost.cmake
@@ -4,16 +4,10 @@
 # support both libraries. See the related changeset in OTB trunk:
 # http://hg.orfeo-toolbox.org/OTB/r# ev/8da67e36c78d
 
-if(NOT __EXTERNAL_BOOST__)
-set(__EXTERNAL_BOOST__ 1)
+INCLUDE_ONCE_MACRO(BOOST)
 
-if(USE_SYSTEM_BOOST)
-  message(STATUS "  Using Boost system version")
-else()
   SETUP_SUPERBUILD(PROJECT BOOST)
 
-  message(STATUS "  Using Boost superbuild version")
-
   option(SUPERBUILD_BOOST_HEADER_ONLY "Only use Boost headers" ON)
   mark_as_advanced(SUPERBUILD_BOOST_HEADER_ONLY)
 
@@ -61,7 +55,6 @@ else()
       )
     endif()
 
-    message(STATUS "  Using Boost SuperBuild version")
 
   else(MSVC)
     #TODO: find hash for archives properly
@@ -127,6 +120,3 @@ else()
   set(_SB_Boost_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include)
   set(_SB_Boost_LIBRARY_DIR ${SB_INSTALL_PREFIX}/lib)
 
-
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_curl.cmake b/SuperBuild/CMake/External_curl.cmake
index 2880f4b819..94aad37e5a 100644
--- a/SuperBuild/CMake/External_curl.cmake
+++ b/SuperBuild/CMake/External_curl.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_CURL__)
-  return()
-else()
-  set(__EXTERNAL_CURL__ 1)
-endif()
-
-if(USE_SYSTEM_CURL)
-  message(STATUS "  Using cURL system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(CURL)
 
 SETUP_SUPERBUILD(PROJECT CURL)
-message(STATUS "  Using cURL SuperBuild version")
 
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(CURL ZLIB)
@@ -45,10 +35,7 @@ else(UNIX)
     INSTALL_DIR ${SB_INSTALL_PREFIX}
     DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
     CMAKE_CACHE_ARGS
-    -DCMAKE_INSTALL_PREFIX:STRING=${SB_INSTALL_PREFIX}
-    -DCMAKE_PREFIX_PATH:STRING=${SB_INSTALL_PREFIX};${CMAKE_PREFIX_PATH}
-    -DCMAKE_BUILD_TYPE:STRING=Release
-    -DBUILD_SHARED_LIBS:BOOL=ON
+    ${SB_CMAKE_CACHE_ARGS}
     -DBUILD_CURL_TESTS:BOOL=OFF
     -DBUILD_CURL_EXE:BOOL=ON
     -DCMAKE_USE_OPENSSL:BOOL=${SB_ENABLE_OPENSSL_CURL}
diff --git a/SuperBuild/CMake/External_expat.cmake b/SuperBuild/CMake/External_expat.cmake
index bbad2b0950..7684e8db2f 100644
--- a/SuperBuild/CMake/External_expat.cmake
+++ b/SuperBuild/CMake/External_expat.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_EXPAT__)
-  return()
-else()
-  set(__EXTERNAL_EXPAT__ 1)
-endif()
-
-if(USE_SYSTEM_EXPAT)
-  message(STATUS "  Using Expat system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(EXPAT)
 
 SETUP_SUPERBUILD(PROJECT EXPAT)
-message(STATUS "  Using Expat SuperBuild version")
 
 ExternalProject_Add(EXPAT
   PREFIX EXPAT
@@ -20,9 +10,7 @@ ExternalProject_Add(EXPAT
   INSTALL_DIR ${SB_INSTALL_PREFIX}
   DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
   CMAKE_CACHE_ARGS
-  -DCMAKE_INSTALL_PREFIX:STRING=${SB_INSTALL_PREFIX}
-  -DCMAKE_BUILD_TYPE:STRING=Release
-  -DBUILD_SHARED_LIBS:BOOL=ON
+  ${SB_CMAKE_CACHE_ARGS}
   -DBUILD_examples:BOOL=OFF
   -DBUILD_tests:BOOL=OFF
   -DBUILD_tools:BOOL=OFF
diff --git a/SuperBuild/CMake/External_fftw.cmake b/SuperBuild/CMake/External_fftw.cmake
index dd28babb87..e5eebc6447 100644
--- a/SuperBuild/CMake/External_fftw.cmake
+++ b/SuperBuild/CMake/External_fftw.cmake
@@ -1,13 +1,4 @@
-if( __EXTERNAL_FFTW__)
-  return()
-else()
-  set(__EXTERNAL_FFTW__ 1)
-endif()
-
-if(USE_SYSTEM_FFTW)
-  message(STATUS "  Using FFTW system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(FFTW)
 
 SETUP_SUPERBUILD(PROJECT FFTW)
 
@@ -22,7 +13,6 @@ if(MSVC)
 endif()
 
 
-message(STATUS "  Using FFTW SuperBuild version")
 
 # Compile the float version of FFTW
 ExternalProject_Add(FFTWF
diff --git a/SuperBuild/CMake/External_freetype.cmake b/SuperBuild/CMake/External_freetype.cmake
index c36e33ede9..740b325fe1 100644
--- a/SuperBuild/CMake/External_freetype.cmake
+++ b/SuperBuild/CMake/External_freetype.cmake
@@ -1,17 +1,6 @@
-if( __EXTERNAL_FREETYPE__)
-  return()
-else()
-  set(__EXTERNAL_FREETYPE__ 1)
-endif()
-
-if(USE_SYSTEM_FREETYPE)
-  message(STATUS "  Using FreeType system version")
-  return()
-endif()
-
+INCLUDE_ONCE_MACRO(FREETYPE)
 
 SETUP_SUPERBUILD(PROJECT FREETYPE)
-message(STATUS "  Using FreeType SuperBuild version")
 
 set(FREETYPE_SB_CONFIG)
 if(MSVC AND BUILD_SHARED_LIBS)
@@ -26,7 +15,10 @@ ExternalProject_Add(FREETYPE
   BINARY_DIR ${FREETYPE_SB_BUILD_DIR}
   INSTALL_DIR ${SB_INSTALL_PREFIX}
   DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-  CMAKE_COMMAND ${SB_CMAKE_COMMAND} ${FREETYPE_SB_CONFIG}
+  CMAKE_CACHE_ARGS
+  ${SB_CMAKE_CACHE_ARGS}
+  ${FREETYPE_SB_CONFIG}
+  CMAKE_COMMAND ${SB_CMAKE_COMMAND} 
   )
 
 set(_SB_FREETYPE_INCLUDE_DIRS ${SB_INSTALL_PREFIX}/include/freetype2)
diff --git a/SuperBuild/CMake/External_gdal.cmake b/SuperBuild/CMake/External_gdal.cmake
index 5b4c004a2f..02a5572941 100644
--- a/SuperBuild/CMake/External_gdal.cmake
+++ b/SuperBuild/CMake/External_gdal.cmake
@@ -1,18 +1,7 @@
-if( __EXTERNAL_GDAL__)
-  return()
-else()
-  set(__EXTERNAL_GDAL__ 1)
-endif()
-
-if(USE_SYSTEM_GDAL)
-  message(STATUS "  Using GDAL system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(GDAL)
 
 SETUP_SUPERBUILD(PROJECT GDAL)
 
-message(STATUS "  Using GDAL SuperBuild version")
-
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(GDAL TIFF CURL GEOTIFF PNG JPEG OPENJPEG SQLITE GEOS ZLIB EXPAT)
 
diff --git a/SuperBuild/CMake/External_geos.cmake b/SuperBuild/CMake/External_geos.cmake
index 8a789f4abd..2425d0b3b5 100644
--- a/SuperBuild/CMake/External_geos.cmake
+++ b/SuperBuild/CMake/External_geos.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_GEOS__)
-  return()
-else()
-  set(__EXTERNAL_GEOS__ 1)
-endif()
-
-if(USE_SYSTEM_GEOS)
-  message(STATUS "  Using GEOS system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(GEOS)
 
 SETUP_SUPERBUILD(PROJECT GEOS)
-message(STATUS "  Using GEOS SuperBuild version")
 
 ExternalProject_Add(GEOS
   PREFIX GEOS
@@ -21,6 +11,7 @@ ExternalProject_Add(GEOS
   INSTALL_DIR ${SB_INSTALL_PREFIX}
   DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
   CMAKE_CACHE_ARGS
+  ${SB_CMAKE_CACHE_ARGS}
   -DBUILD_TESTING:BOOL=OFF
   -DGEOS_ENABLE_TESTS:BOOL=OFF
   CMAKE_COMMAND ${SB_CMAKE_COMMAND} )
diff --git a/SuperBuild/CMake/External_geotiff.cmake b/SuperBuild/CMake/External_geotiff.cmake
index 36ffcbc785..a9be9a3197 100644
--- a/SuperBuild/CMake/External_geotiff.cmake
+++ b/SuperBuild/CMake/External_geotiff.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_GEOTIFF__)
-  return()
-else()
-  set(__EXTERNAL_GEOTIFF__ 1)
-endif()
-
-if(USE_SYSTEM_GEOTIFF)
-  message(STATUS "  Using GeoTIFF system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(GEOTIFF)
 
 SETUP_SUPERBUILD(PROJECT GEOTIFF)
-message(STATUS "  Using GeoTIFF SuperBuild version")
 
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(GEOTIFF TIFF PROJ JPEG ZLIB)
@@ -66,6 +56,7 @@ else()
     DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
     DEPENDS ${GEOTIFF_DEPENDENCIES}
     CMAKE_CACHE_ARGS
+    ${SB_CMAKE_CACHE_ARGS}
     -DBUILD_TESTING:BOOL=OFF
     -DPROJ4_OSGEO4W_HOME:PATH=${SB_INSTALL_PREFIX}
     ${GEOTIFF_SB_CONFIG}
diff --git a/SuperBuild/CMake/External_glew.cmake b/SuperBuild/CMake/External_glew.cmake
index 053d9624de..ddec34fd45 100644
--- a/SuperBuild/CMake/External_glew.cmake
+++ b/SuperBuild/CMake/External_glew.cmake
@@ -1,54 +1,46 @@
-if(NOT __EXTERNAL_GLEW__)
-set(__EXTERNAL_GLEW__ 1)
+INCLUDE_ONCE_MACRO(GLEW)
 
-if(USE_SYSTEM_GLEW)
-  message(STATUS "  Using GLEW system version")
-else()
-  SETUP_SUPERBUILD(PROJECT GLEW)
-  message(STATUS "  Using GLEW SuperBuild version")
+SETUP_SUPERBUILD(PROJECT GLEW)
 
-  if(UNIX)
-    ExternalProject_Add(GLEW
-      PREFIX GLEW
-      URL "https://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0.tgz/download"
-      URL_MD5 7cbada3166d2aadfc4169c4283701066
-      BINARY_DIR ${GLEW_SB_BUILD_DIR}
-      DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-      INSTALL_DIR ${SB_INSTALL_PREFIX}
-      CMAKE_COMMAND ${SB_CMAKE_COMMAND}
-      DEPENDS ${GLEW_DEPENDENCIES}
-      PATCH_COMMAND ${CMAKE_COMMAND} -E copy
-      ${CMAKE_SOURCE_DIR}/patches/GLEW/CMakeLists.txt
-      ${GLEW_SB_SRC}
-      )
+if(UNIX)
+  ExternalProject_Add(GLEW
+    PREFIX GLEW
+    URL "https://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0.tgz/download"
+    URL_MD5 7cbada3166d2aadfc4169c4283701066
+    BINARY_DIR ${GLEW_SB_BUILD_DIR}
+    DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
+    INSTALL_DIR ${SB_INSTALL_PREFIX}
+    CMAKE_CACHE_ARGS ${SB_CMAKE_CACHE_ARGS}
+    CMAKE_COMMAND ${SB_CMAKE_COMMAND}
+    DEPENDS ${GLEW_DEPENDENCIES}
+    PATCH_COMMAND ${CMAKE_COMMAND} -E copy
+    ${CMAKE_SOURCE_DIR}/patches/GLEW/CMakeLists.txt
+    ${GLEW_SB_SRC}
+    )
 
-  elseif(MSVC)
-    set(SB_GLEW_DIR "Release/Win32")
-    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-      set(SB_GLEW_DIR "Release/x64")
-    endif()
-    ExternalProject_Add(GLEW
-      PREFIX GLEW
-      URL "https://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0-win32.zip/download"
-      URL_MD5 a2c0e4d75bdb84217550e51c0f1e7090
-      BINARY_DIR ${GLEW_SB_BUILD_DIR}
-      INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
-      DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-      PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${GLEW_SB_SRC}/include ${CMAKE_INSTALL_PREFIX}/include
-      CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${GLEW_SB_SRC}/lib/${SB_GLEW_DIR}/glew32s.lib ${CMAKE_INSTALL_PREFIX}/lib
-      BUILD_COMMAND  ${CMAKE_COMMAND} -E copy ${GLEW_SB_SRC}/lib/${SB_GLEW_DIR}/glew32.lib ${CMAKE_INSTALL_PREFIX}/lib
-      INSTALL_COMMAND  ${CMAKE_COMMAND} -E copy ${GLEW_SB_SRC}/bin/${SB_GLEW_DIR}/glew32.dll ${CMAKE_INSTALL_PREFIX}/bin/
-      )
-
-    message(STATUS "  Pre-built binaries of GLEW are used for MSVC")
-  endif()
-
- set(_SB_GLEW_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include)
-  if(WIN32)
-    set(_SB_GLEW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libGLEW.lib)
-  elseif(UNIX)
-    set(_SB_GLEW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libGLEW${CMAKE_SHARED_LIBRARY_SUFFIX})
+elseif(MSVC)
+  set(SB_GLEW_DIR "Release/Win32")
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(SB_GLEW_DIR "Release/x64")
   endif()
-
+  ExternalProject_Add(GLEW
+    PREFIX GLEW
+    URL "https://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0-win32.zip/download"
+    URL_MD5 a2c0e4d75bdb84217550e51c0f1e7090
+    BINARY_DIR ${GLEW_SB_BUILD_DIR}
+    INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
+    DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
+    PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${GLEW_SB_SRC}/include ${CMAKE_INSTALL_PREFIX}/include
+    CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${GLEW_SB_SRC}/lib/${SB_GLEW_DIR}/glew32s.lib ${CMAKE_INSTALL_PREFIX}/lib
+    BUILD_COMMAND  ${CMAKE_COMMAND} -E copy ${GLEW_SB_SRC}/lib/${SB_GLEW_DIR}/glew32.lib ${CMAKE_INSTALL_PREFIX}/lib
+    INSTALL_COMMAND  ${CMAKE_COMMAND} -E copy ${GLEW_SB_SRC}/bin/${SB_GLEW_DIR}/glew32.dll ${CMAKE_INSTALL_PREFIX}/bin/
+    )
+  message(STATUS "  Pre-built binaries of GLEW are used for MSVC")
 endif()
+
+set(_SB_GLEW_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include)
+if(WIN32)
+  set(_SB_GLEW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libGLEW.lib)
+elseif(UNIX)
+  set(_SB_GLEW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libGLEW${CMAKE_SHARED_LIBRARY_SUFFIX})
 endif()
diff --git a/SuperBuild/CMake/External_glfw.cmake b/SuperBuild/CMake/External_glfw.cmake
index bd7d5d0b8c..4646e64cfe 100644
--- a/SuperBuild/CMake/External_glfw.cmake
+++ b/SuperBuild/CMake/External_glfw.cmake
@@ -1,32 +1,26 @@
-if(NOT __EXTERNAL_GLFW__w)
-  set(__EXTERNAL_GLFW__ 1)
+INCLUDE_ONCE_MACRO(GLFW)
 
-  if(USE_SYSTEM_GLFW)
-    message(STATUS "  Using GLFW system version")
-  else()
-    SETUP_SUPERBUILD(PROJECT GLFW)
-    message(STATUS "  Using GLFW SuperBuild version")
+SETUP_SUPERBUILD(PROJECT GLFW)
 
-    ExternalProject_Add(GLFW
-      PREFIX GLFW
-      URL "https://github.com/glfw/glfw/releases/download/3.1.2/glfw-3.1.2.zip"
-      URL_MD5 8023327bfe979b3fe735e449e2f54842
-      BINARY_DIR ${GLFW_SB_BUILD_DIR}
-      INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
-      DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-      CMAKE_CACHE_ARGS
-      -DGLFW_BUILD_EXAMPLES:BOOL=OFF
-      -DGLFW_BUILD_DOCS:BOOL=OFF
-      -DGLFW_BUILD_TESTS:BOOL=OFF
-      CMAKE_COMMAND ${SB_CMAKE_COMMAND}
-      )
+ExternalProject_Add(GLFW
+  PREFIX GLFW
+  URL "https://github.com/glfw/glfw/releases/download/3.1.2/glfw-3.1.2.zip"
+  URL_MD5 8023327bfe979b3fe735e449e2f54842
+  BINARY_DIR ${GLFW_SB_BUILD_DIR}
+  INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
+  DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
+  CMAKE_CACHE_ARGS
+  ${SB_CMAKE_CACHE_ARGS}
+  -DGLFW_BUILD_EXAMPLES:BOOL=OFF
+  -DGLFW_BUILD_DOCS:BOOL=OFF
+  -DGLFW_BUILD_TESTS:BOOL=OFF
+  CMAKE_COMMAND ${SB_CMAKE_COMMAND}
+  )
 
-    set(_SB_GLFW_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include)
-    if(WIN32)
-      set(_SB_GLFW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libglfw.lib)
-    elseif(UNIX)
-      set(_SB_GLFW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libglfw${CMAKE_SHARED_LIBRARY_SUFFIX})
-    endif()
-
-  endif()
+set(_SB_GLFW_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include)
+if(WIN32)
+  set(_SB_GLFW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libglfw.lib)
+elseif(UNIX)
+  set(_SB_GLFW_LIBRARY ${SB_INSTALL_PREFIX}/lib/libglfw${CMAKE_SHARED_LIBRARY_SUFFIX})
 endif()
+
diff --git a/SuperBuild/CMake/External_glut.cmake b/SuperBuild/CMake/External_glut.cmake
index 88f712067f..457e2d1d8f 100644
--- a/SuperBuild/CMake/External_glut.cmake
+++ b/SuperBuild/CMake/External_glut.cmake
@@ -1,37 +1,30 @@
-if(NOT __EXTERNAL_GLUT__)
-set(__EXTERNAL_GLUT__ 1)
+INCLUDE_ONCE_MACRO(GLUT)
 
-if(USE_SYSTEM_GLUT)
-  message(STATUS "  Using GLUT system version")
-else()
-
-  if(APPLE)
-    message(FATAL_ERROR "Cannot activate GLUT on OSX. See manits issue #1194")
-  endif()
+if(APPLE)
+  message(FATAL_ERROR "Cannot activate GLUT on OSX. See manits issue #1194")
+  retunr()
+endif()
 
-  SETUP_SUPERBUILD(PROJECT GLUT)
-  message(STATUS "  Using GLUT SuperBuild version")
+SETUP_SUPERBUILD(PROJECT GLUT)
 
-  ExternalProject_Add(GLUT
-    PREFIX GLUT
-    URL "http://downloads.sourceforge.net/project/freeglut/freeglut/2.8.1/freeglut-2.8.1.tar.gz"
-    URL_MD5 918ffbddcffbac83c218bc52355b6d5a
-    BINARY_DIR ${GLUT_SB_BUILD_DIR}
-    INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
-    DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-    PATCH_COMMAND ${CMAKE_COMMAND} -E copy
-    ${CMAKE_SOURCE_DIR}/patches/GLUT/CMakeLists.txt
-    ${GLUT_SB_SRC}
-    CMAKE_COMMAND ${SB_CMAKE_COMMAND}
+ExternalProject_Add(GLUT
+  PREFIX GLUT
+  URL "http://downloads.sourceforge.net/project/freeglut/freeglut/2.8.1/freeglut-2.8.1.tar.gz"
+  URL_MD5 918ffbddcffbac83c218bc52355b6d5a
+  BINARY_DIR ${GLUT_SB_BUILD_DIR}
+  INSTALL_DIR ${SB_INSTALL_PREFIX}
+  DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
+  PATCH_COMMAND ${CMAKE_COMMAND} -E copy
+  ${CMAKE_SOURCE_DIR}/patches/GLUT/CMakeLists.txt
+  ${GLUT_SB_SRC}
+  CMAKE_CACHE_ARGS ${SB_CMAKE_CACHE_ARGS}
+  CMAKE_COMMAND ${SB_CMAKE_COMMAND}
   )
 
-  set(_SB_GLUT_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include)
-  if(WIN32)
-    set(_SB_GLUT_LIBRARY ${SB_INSTALL_PREFIX}/lib/libfreeglut.lib)
-  elseif(UNIX)
-    set(_SB_GLUT_LIBRARY ${SB_INSTALL_PREFIX}/lib/libfreeglut${CMAKE_SHARED_LIBRARY_SUFFIX})
-  endif()
-
-  message(STATUS "  Using glut SuperBuild version")
-endif()
+set(_SB_GLUT_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include)
+if(WIN32)
+  set(_SB_GLUT_LIBRARY ${SB_INSTALL_PREFIX}/lib/libfreeglut.lib)
+elseif(UNIX)
+  set(_SB_GLUT_LIBRARY ${SB_INSTALL_PREFIX}/lib/libfreeglut${CMAKE_SHARED_LIBRARY_SUFFIX})
 endif()
+
diff --git a/SuperBuild/CMake/External_itk.cmake b/SuperBuild/CMake/External_itk.cmake
index f3462644cf..c2a8aa8601 100644
--- a/SuperBuild/CMake/External_itk.cmake
+++ b/SuperBuild/CMake/External_itk.cmake
@@ -1,11 +1,6 @@
-if(NOT __EXTERNAL_ITK__)
-set(__EXTERNAL_ITK__ 1)
+INCLUDE_ONCE_MACRO(ITK)
 
-if(USE_SYSTEM_ITK)
-  message(STATUS "  Using ITK system version")
-else()
   SETUP_SUPERBUILD(PROJECT ITK)
-  message(STATUS "  Using ITK SuperBuild version")
 
   # if(MSVC)
     # set(ITK_SB_SRC "C:/Temp/ITK")
@@ -149,6 +144,7 @@ else()
     INSTALL_DIR ${SB_INSTALL_PREFIX}
       DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
       CMAKE_CACHE_ARGS
+      ${SB_CMAKE_CACHE_ARGS}
       ${ITK_SB_COMPILATION_FLAGS}
       -DITK_BUILD_DEFAULT_MODULES:BOOL=OFF
       ${ITK_MODULES_CMAKE_CACHE}
@@ -165,6 +161,3 @@ else()
     )
 
   set(_SB_ITK_DIR ${SB_INSTALL_PREFIX}/lib/cmake/ITK-${ITK_SB_VERSION})
-
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_jpeg.cmake b/SuperBuild/CMake/External_jpeg.cmake
index b9a7790e55..c8392a4cc4 100644
--- a/SuperBuild/CMake/External_jpeg.cmake
+++ b/SuperBuild/CMake/External_jpeg.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_JPEG__)
-  return()
-else()
-  set(__EXTERNAL_JPEG__ 1)
-endif()
-
-if(USE_SYSTEM_JPEG)
-  message(STATUS "  Using libjpeg system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(JPEG)
 
 SETUP_SUPERBUILD(PROJECT JPEG)
-message(STATUS "  Using libjpeg SuperBuild version")
 
 if(WIN32)
   set(JPEG_PATCH_COMMAND ${CMAKE_COMMAND}
diff --git a/SuperBuild/CMake/External_libkml.cmake b/SuperBuild/CMake/External_libkml.cmake
index 0470e4492f..aa9affced0 100644
--- a/SuperBuild/CMake/External_libkml.cmake
+++ b/SuperBuild/CMake/External_libkml.cmake
@@ -1,11 +1,6 @@
-if(NOT __EXTERNAL_LIBKML__)
-set(__EXTERNAL_LIBKML__ 1)
+INCLUDE_ONCE_MACRO(LIBKML)
 
-if(USE_SYSTEM_LIBKML)
-  message(STATUS "  Using libKML system version")
-else()
   SETUP_SUPERBUILD(PROJECT LIBKML)
-  message(STATUS "  Using libKML SuperBuild version")
 
   # declare dependencies
   ##set(LIBKML_DEPENDENCIES EXPAT ZLIB BOOST)
@@ -60,6 +55,3 @@ else()
     set(_SB_LIBKML_XSD_LIBRARY ${SB_INSTALL_PREFIX}/lib/libkmlxsd${CMAKE_SHARED_LIBRARY_SUFFIX})
     set(_SB_LIBKML_MINIZIP_LIBRARY ${SB_INSTALL_PREFIX}/lib/libminizip${CMAKE_SHARED_LIBRARY_SUFFIX})
   endif()
-
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_libsvm.cmake b/SuperBuild/CMake/External_libsvm.cmake
index 4b89c5bd17..6e6ef5f256 100644
--- a/SuperBuild/CMake/External_libsvm.cmake
+++ b/SuperBuild/CMake/External_libsvm.cmake
@@ -1,16 +1,7 @@
-if( __EXTERNAL_LIBSVM__)
-  return()
-else()
-  set(__EXTERNAL_LIBSVM__ 1)
-endif()
-
-if(USE_SYSTEM_LIBSVM)
-  message(STATUS "  Using LibSVM system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(LIBSVM)
 
 SETUP_SUPERBUILD(PROJECT LIBSVM)
-message(STATUS "  Using LibSVM SuperBuild version")
+
 
 ExternalProject_Add(LIBSVM
   PREFIX LIBSVM
diff --git a/SuperBuild/CMake/External_muparser.cmake b/SuperBuild/CMake/External_muparser.cmake
index 3c40c36ae9..0f8795da49 100644
--- a/SuperBuild/CMake/External_muparser.cmake
+++ b/SuperBuild/CMake/External_muparser.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_MUPARSER__)
-  return()
-else()
-  set(__EXTERNAL_MUPARSER__ 1)
-endif()
-
-if(USE_SYSTEM_MUPARSER)
-  message(STATUS "  Using muParser system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(MUPARSER)
 
 SETUP_SUPERBUILD(PROJECT MUPARSER)
-message(STATUS "  Using muParser SuperBuild version")
 
 ExternalProject_Add(MUPARSER
   PREFIX MUPARSER
diff --git a/SuperBuild/CMake/External_muparserx.cmake b/SuperBuild/CMake/External_muparserx.cmake
index 35bccac518..711f8dfcf2 100644
--- a/SuperBuild/CMake/External_muparserx.cmake
+++ b/SuperBuild/CMake/External_muparserx.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_MUPARSERX__)
-  return()
-else()
-  set(__EXTERNAL_MUPARSERX__ 1)
-endif()
-
-if(USE_SYSTEM_MUPARSERX)
-  message(STATUS "  Using muParserX system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(MUPARSERX)
 
 SETUP_SUPERBUILD(PROJECT MUPARSERX)
-message(STATUS "  Using muParserX SuperBuild version")
 
 set(MUPARSERX_FLAGS)
 if(APPLE)
diff --git a/SuperBuild/CMake/External_mvd.cmake b/SuperBuild/CMake/External_mvd.cmake
index d5ac422d5d..90a8e57f5f 100644
--- a/SuperBuild/CMake/External_mvd.cmake
+++ b/SuperBuild/CMake/External_mvd.cmake
@@ -1,8 +1,10 @@
-if(NOT __EXTERNAL_MVD__)
-set(__EXTERNAL_MVD__ 1)
+if( __EXTERNAL_MVD__)
+  return()
+else()
+  set(__EXTERNAL_MVD__ 1)
+endif()
 
 SETUP_SUPERBUILD(PROJECT MVD)
-message(STATUS "  Using Monteverdi SuperBuild version")
 
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(MVD OTB QWT QT4)
@@ -34,5 +36,3 @@ ExternalProject_Add(MVD
   ${MVD_SB_CONFIG}
   CMAKE_COMMAND ${SB_CMAKE_COMMAND}
 )
-
-endif()
diff --git a/SuperBuild/CMake/External_opencv.cmake b/SuperBuild/CMake/External_opencv.cmake
index 3289d4f85f..0674a3640a 100644
--- a/SuperBuild/CMake/External_opencv.cmake
+++ b/SuperBuild/CMake/External_opencv.cmake
@@ -1,11 +1,7 @@
-if(NOT __EXTERNAL_OPENCV__)
-set(__EXTERNAL_OPENCV__ 1)
+INCLUDE_ONCE_MACRO(OPENCV)
 
-if(USE_SYSTEM_OPENCV)
-  message(STATUS "  Using OpenCV system version")
-else()
   SETUP_SUPERBUILD(PROJECT OPENCV)
-  message(STATUS "  Using OpenCV SuperBuild version")
+
 
   # declare dependencies
   ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(OPENCV ZLIB TIFF PNG)
@@ -76,5 +72,3 @@ else()
   endif()
 
   set(_SB_OpenCV_DIR ${SB_INSTALL_PREFIX}/share/OpenCV)
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_openjpeg.cmake b/SuperBuild/CMake/External_openjpeg.cmake
index f01528ae60..de4a66638b 100644
--- a/SuperBuild/CMake/External_openjpeg.cmake
+++ b/SuperBuild/CMake/External_openjpeg.cmake
@@ -1,17 +1,6 @@
-if( __EXTERNAL_OPENJPEG__)
-  return()
-else()
-  set(__EXTERNAL_OPENJPEG__ 1)
-endif()
-
-if(USE_SYSTEM_OPENJPEG)
-  message(STATUS "  Using OpenJPEG system version")
-  return()
-endif()
-
+INCLUDE_ONCE_MACRO(OPENJPEG)
 
 SETUP_SUPERBUILD(PROJECT OPENJPEG)
-message(STATUS "  Using OpenJPEG SuperBuild version")
 
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(OPENJPEG ZLIB TIFF PNG)
diff --git a/SuperBuild/CMake/External_openssl.cmake b/SuperBuild/CMake/External_openssl.cmake
index c0f7245838..9e4e6bcae6 100644
--- a/SuperBuild/CMake/External_openssl.cmake
+++ b/SuperBuild/CMake/External_openssl.cmake
@@ -1,13 +1,6 @@
-if(NOT __EXTERNAL_OPENSSL__)
-set(__EXTERNAL_OPENSSL__ 1)
-
-#RK: OPENSSL is deactivated in QT4 build.
-#revisit that when you have a clean openssl
-if(USE_SYSTEM_OPENSSL)
-  message(STATUS "  Using OpenSSL system version")
-else()
+INCLUDE_ONCE_MACRO(OPENSSL)
   SETUP_SUPERBUILD(PROJECT OPENSSL)
-  message(STATUS "  Using OpenSSL SuperBuild version")
+
 
   # declare dependencies
   ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(OPENSSL ZLIB)
@@ -74,6 +67,3 @@ else()
   elseif(UNIX)
     set(_SB_OPENSSL_LIBRARY ${SB_INSTALL_PREFIX}/lib/libssl${CMAKE_SHARED_LIBRARY_SUFFIX})
   endif()
-
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_openthreads.cmake b/SuperBuild/CMake/External_openthreads.cmake
index 18f69f5e66..f5a34a77a4 100644
--- a/SuperBuild/CMake/External_openthreads.cmake
+++ b/SuperBuild/CMake/External_openthreads.cmake
@@ -1,17 +1,6 @@
-if( __EXTERNAL_OPENTHREADS__)
-  return()
-else()
-  set(__EXTERNAL_OPENTHREADS__ 1)
-endif()
-
-if(USE_SYSTEM_OPENTHREADS)
-  message(STATUS "  Using OpenThreads system version")
-  return()
-endif()
-
+INCLUDE_ONCE_MACRO(OPENTHREADS)
 
 SETUP_SUPERBUILD(PROJECT OPENTHREADS)
-message(STATUS "  Using OpenThreads SuperBuild version")
 
 #TODO: try to use cmake variable for DOWNLOAD_COMMAND for different platforms
 #if(MSVC)
diff --git a/SuperBuild/CMake/External_ossim.cmake b/SuperBuild/CMake/External_ossim.cmake
index 25b208b48c..e607617023 100644
--- a/SuperBuild/CMake/External_ossim.cmake
+++ b/SuperBuild/CMake/External_ossim.cmake
@@ -1,16 +1,7 @@
-if( __EXTERNAL_OSSIM__)
-  return()
-else()
-  set(__EXTERNAL_OSSIM__ 1)
-endif()
-
-if(USE_SYSTEM_OSSIM)
-  message(STATUS "  Using OSSIM system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(OSSIM)
 
 SETUP_SUPERBUILD(PROJECT OSSIM)
-message(STATUS "  Using OSSIM SuperBuild version")
+
 
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(OSSIM TIFF GEOTIFF GEOS JPEG OPENTHREADS FREETYPE)
diff --git a/SuperBuild/CMake/External_otb.cmake b/SuperBuild/CMake/External_otb.cmake
index 0e2cc778fc..76328f0b23 100644
--- a/SuperBuild/CMake/External_otb.cmake
+++ b/SuperBuild/CMake/External_otb.cmake
@@ -1,8 +1,6 @@
-if(NOT __EXTERNAL_OTB__)
-set(__EXTERNAL_OTB__ 1)
+INCLUDE_ONCE_MACRO(OTB)
 
 SETUP_SUPERBUILD(PROJECT OTB)
-message(STATUS "  Using OTB SuperBuild version")
 
 if(SUPERBUILD_IN_OTB_TREE)
   set(OTB_SB_SRC ${CMAKE_SOURCE_DIR}/..)
@@ -198,6 +196,3 @@ ExternalProject_Add_Step(OTB install_copyright
   else()
     set(_SB_OTB_DIR ${SB_INSTALL_PREFIX})
   endif()
-
-
-endif()
diff --git a/SuperBuild/CMake/External_pcre.cmake b/SuperBuild/CMake/External_pcre.cmake
index 7344b7bda8..3a07923493 100644
--- a/SuperBuild/CMake/External_pcre.cmake
+++ b/SuperBuild/CMake/External_pcre.cmake
@@ -1,38 +1,28 @@
-if(NOT __EXTERNAL_PCRE__)
-set(__EXTERNAL_PCRE__ 1)
-
-if(USE_SYSTEM_PCRE)
-  message(STATUS "  Using pcre system version")
+INCLUDE_ONCE_MACRO(PCRE)
+SETUP_SUPERBUILD(PROJECT PCRE)
+if(MSVC)
+  # TODO ?
 else()
-  SETUP_SUPERBUILD(PROJECT PCRE)
-  message(STATUS "  Using pcre SuperBuild version")
-
-  if(MSVC)
-    # TODO ?
-  else()
-    ExternalProject_Add(PCRE
-      PREFIX PCRE
-      URL "http://sourceforge.net/projects/pcre/files/pcre/8.36/pcre-8.36.tar.gz/download"
-      URL_MD5 ff7b4bb14e355f04885cf18ff4125c98
-      BINARY_DIR ${PCRE_SB_BUILD_DIR}
-      INSTALL_DIR ${SB_INSTALL_PREFIX}
-      DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-      CONFIGURE_COMMAND
-        ${PCRE_SB_BUILD_DIR}/configure
-        --prefix=${SB_INSTALL_PREFIX}
-      BUILD_COMMAND $(MAKE)
-      INSTALL_COMMAND $(MAKE) install
-      DEPENDS ${PCRE_DEPENDENCIES}
-      )
-
-    ExternalProject_Add_Step(PCRE copy_source
-      COMMAND ${CMAKE_COMMAND} -E copy_directory
-        ${PCRE_SB_SRC} ${PCRE_SB_BUILD_DIR}
-      DEPENDEES patch update
-      DEPENDERS configure
-      )
+  ExternalProject_Add(PCRE
+    PREFIX PCRE
+    URL "http://sourceforge.net/projects/pcre/files/pcre/8.36/pcre-8.36.tar.gz/download"
+    URL_MD5 ff7b4bb14e355f04885cf18ff4125c98
+    BINARY_DIR ${PCRE_SB_BUILD_DIR}
+    INSTALL_DIR ${SB_INSTALL_PREFIX}
+    DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
+    CONFIGURE_COMMAND
+    ${PCRE_SB_BUILD_DIR}/configure
+    --prefix=${SB_INSTALL_PREFIX}
+    BUILD_COMMAND $(MAKE)
+    INSTALL_COMMAND $(MAKE) install
+    DEPENDS ${PCRE_DEPENDENCIES}
+    )
 
-  endif()
-
-endif()
+  ExternalProject_Add_Step(PCRE copy_source
+    COMMAND ${CMAKE_COMMAND} -E copy_directory
+    ${PCRE_SB_SRC} ${PCRE_SB_BUILD_DIR}
+    DEPENDEES patch update
+    DEPENDERS configure
+    )
+  
 endif()
diff --git a/SuperBuild/CMake/External_png.cmake b/SuperBuild/CMake/External_png.cmake
index 9390adc98d..0bfc1931b1 100644
--- a/SuperBuild/CMake/External_png.cmake
+++ b/SuperBuild/CMake/External_png.cmake
@@ -1,16 +1,7 @@
-if( __EXTERNAL_PNG__)
-  return()
-else()
-  set(__EXTERNAL_PNG__ 1)
-endif()
-
-if(USE_SYSTEM_PNG)
-  message(STATUS "  Using libpng system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(PNG)
 
 SETUP_SUPERBUILD(PROJECT PNG)
-message(STATUS "  Using libpng SuperBuild version")
+
 
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(PNG ZLIB)
diff --git a/SuperBuild/CMake/External_proj.cmake b/SuperBuild/CMake/External_proj.cmake
index 17521f3c76..874d11709b 100644
--- a/SuperBuild/CMake/External_proj.cmake
+++ b/SuperBuild/CMake/External_proj.cmake
@@ -1,11 +1,7 @@
-if(NOT __EXTERNAL_PROJ__)
-set(__EXTERNAL_PROJ__ 1)
+INCLUDE_ONCE_MACRO(PROJ)
 
-if(USE_SYSTEM_PROJ)
-  message(STATUS "  Using Proj4 system version")
-else()
   SETUP_SUPERBUILD(PROJECT PROJ)
-  message(STATUS "  Using Proj4 SuperBuild version")
+
 
   if(MSVC)
 
@@ -68,6 +64,3 @@ else()
   elseif(UNIX)
     set(_SB_PROJ_LIBRARY ${SB_INSTALL_PREFIX}/lib/libproj${CMAKE_SHARED_LIBRARY_SUFFIX})
   endif()
-
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_qt4.cmake b/SuperBuild/CMake/External_qt4.cmake
index c44265bf29..cb024eefe5 100644
--- a/SuperBuild/CMake/External_qt4.cmake
+++ b/SuperBuild/CMake/External_qt4.cmake
@@ -1,9 +1,5 @@
-if(NOT __EXTERNAL_QT4__)
-  set(__EXTERNAL_QT4__ 1)
+INCLUDE_ONCE_MACRO(QT4)
 
-  if(USE_SYSTEM_QT4)
-    message(STATUS "  Using Qt4 system version")
-  else()
     SETUP_SUPERBUILD(PROJECT QT4)
     message(STATUS "  Using Qt4 SuperBuild version")
     if(UNIX AND NOT APPLE)
diff --git a/SuperBuild/CMake/External_qwt.cmake b/SuperBuild/CMake/External_qwt.cmake
index bf12e0dbb6..61611f649f 100644
--- a/SuperBuild/CMake/External_qwt.cmake
+++ b/SuperBuild/CMake/External_qwt.cmake
@@ -1,11 +1,6 @@
-if(NOT __EXTERNAL_QWT__)
-set(__EXTERNAL_QWT__ 1)
+INCLUDE_ONCE_MACRO(QWT)
 
-if(USE_SYSTEM_QWT)
-  message(STATUS "  Using QWT system version")
-else()
-  SETUP_SUPERBUILD(PROJECT QWT)
-  message(STATUS "  Using Qwt SuperBuild version")
+SETUP_SUPERBUILD(PROJECT QWT)
 
   # declare dependencies
   ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(QWT QT4)
@@ -50,6 +45,3 @@ else()
   elseif(UNIX)
     set(_SB_QWT_LIBRARY ${SB_INSTALL_PREFIX}/lib/libqwt${CMAKE_SHARED_LIBRARY_SUFFIX})
   endif()
-
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_sqlite.cmake b/SuperBuild/CMake/External_sqlite.cmake
index 556af80b5a..85b6c189da 100644
--- a/SuperBuild/CMake/External_sqlite.cmake
+++ b/SuperBuild/CMake/External_sqlite.cmake
@@ -1,16 +1,7 @@
-if( __EXTERNAL_SQLITE__)
-  return()
-else()
-  set(__EXTERNAL_SQLITE__ 1)
-endif()
-
-if(USE_SYSTEM_SQLITE)
-  message(STATUS "  Using SQLite system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(SQLITE)
 
 SETUP_SUPERBUILD(PROJECT SQLITE)
-message(STATUS "  Using SQLite SuperBuild version")
+
 
 ExternalProject_Add(SQLITE
   PREFIX SQLITE
diff --git a/SuperBuild/CMake/External_swig.cmake b/SuperBuild/CMake/External_swig.cmake
index a40a5a53f0..d09745fb46 100644
--- a/SuperBuild/CMake/External_swig.cmake
+++ b/SuperBuild/CMake/External_swig.cmake
@@ -1,11 +1,7 @@
-if(NOT __EXTERNAL_SWIG__)
-set(__EXTERNAL_SWIG__ 1)
+INCLUDE_ONCE_MACRO(SWIG)
 
-if(USE_SYSTEM_SWIG)
-  message(STATUS "  Using swig system version")
-else()
   SETUP_SUPERBUILD(PROJECT SWIG)
-  message(STATUS "  Using swig SuperBuild version")
+
 
   set(PythonInterp_FIND_VERSION 2.7)
   find_package(PythonInterp)
@@ -77,6 +73,3 @@ else()
   elseif(UNIX)
     set(_SB_SWIG_EXECUTABLE ${SB_INSTALL_PREFIX}/bin/swig)
   endif()
-
-endif()
-endif()
diff --git a/SuperBuild/CMake/External_tiff.cmake b/SuperBuild/CMake/External_tiff.cmake
index ac8e34a636..c8a7151377 100644
--- a/SuperBuild/CMake/External_tiff.cmake
+++ b/SuperBuild/CMake/External_tiff.cmake
@@ -1,16 +1,6 @@
-if( __EXTERNAL_TIFF__)
-  return()
-else()
-  set(__EXTERNAL_TIFF__ 1)
-endif()
-
-if(USE_SYSTEM_TIFF)
-  message(STATUS "  Using libtiff system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(TIFF)
 
 SETUP_SUPERBUILD(PROJECT TIFF)
-message(STATUS "  Using libtiff SuperBuild version")
 
 # declare dependencies
 ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(TIFF ZLIB JPEG)
diff --git a/SuperBuild/CMake/External_tinyxml.cmake b/SuperBuild/CMake/External_tinyxml.cmake
index 5df7e52ccb..c567628b9c 100644
--- a/SuperBuild/CMake/External_tinyxml.cmake
+++ b/SuperBuild/CMake/External_tinyxml.cmake
@@ -1,16 +1,5 @@
-if( __EXTERNAL_TINYXML__)
-  return()
-else()
-  set(__EXTERNAL_TINYXML__ 1)
-endif()
-
-if(USE_SYSTEM_TINYXML)
-  message(STATUS "  Using TinyXML system version")
-  return()
-endif()
-
+INCLUDE_ONCE_MACRO(TINYXML)
   SETUP_SUPERBUILD(PROJECT TINYXML)
-  message(STATUS "  Using TinyXML SuperBuild version")
 
   ExternalProject_Add(TINYXML
     PREFIX TINYXML
diff --git a/SuperBuild/CMake/External_zlib.cmake b/SuperBuild/CMake/External_zlib.cmake
index 68755e6b0a..cdeb46d959 100644
--- a/SuperBuild/CMake/External_zlib.cmake
+++ b/SuperBuild/CMake/External_zlib.cmake
@@ -1,16 +1,7 @@
-if( __EXTERNAL_ZLIB__)
-  return()
-else()
-  set(__EXTERNAL_ZLIB__ 1)
-endif()
-
-if(USE_SYSTEM_ZLIB)
-  message(STATUS "  Using Zlib system version")
-  return()
-endif()
+INCLUDE_ONCE_MACRO(ZLIB)
 
 SETUP_SUPERBUILD(PROJECT ZLIB)
-message(STATUS "  Using zlib SuperBuild version")
+
 
 # Try official release 1.2.8
 ExternalProject_Add(ZLIB
diff --git a/SuperBuild/CMake/SuperBuild_Macro.cmake b/SuperBuild/CMake/SuperBuild_Macro.cmake
index b0e9b73b52..506250cb55 100644
--- a/SuperBuild/CMake/SuperBuild_Macro.cmake
+++ b/SuperBuild/CMake/SuperBuild_Macro.cmake
@@ -53,10 +53,26 @@ macro(ADD_SYSTEM_PREFIX)
   endif()
 endmacro(ADD_SYSTEM_PREFIX)
 
+macro(INCLUDE_ONCE_MACRO project)
+  if( __included_${project}__)
+  return()
+else()
+  set(__included_${project}__ 1)
+endif()
+
+if(USE_SYSTEM_${project})
+  #message(STATUS "  Using ${project} system version")
+  list(APPEND FROM_SYSTEM_LIST ${project})
+  return()
+endif()  
+endmacro()
+
 # Macro SETUP_SUPERBUILD
 # Initialize usefull variables to build a superbuild project
 macro(SETUP_SUPERBUILD)
   cmake_parse_arguments(NEW_SB "" "PROJECT" "" ${ARGN})
+  list(APPEND FROM_SUPERBUILD_LIST ${NEW_SB_PROJECT})
+  #message(STATUS "  Using ${NEW_SB_PROJECT} SuperBuild version")
   #set_property(GLOBAL PROPERTY prop_${project}_DEPENDENCIES "")
   set(${NEW_SB_PROJECT}_DEPENDENCIES "")
   set(${NEW_SB_PROJECT}_SB_BUILD_DIR ${CMAKE_BINARY_DIR}/${NEW_SB_PROJECT}/build)
@@ -186,4 +202,4 @@ macro(SUPERBUILD_UPDATE_CMAKE_VARIABLES PROJECT with_prefix)
   set(_SB_${PROJECT}_INCLUDE_DIR ${SB_INSTALL_PREFIX}/${include_dir})
   set(_SB_${PROJECT}_LIBRARY ${SB_INSTALL_PREFIX}/lib/${lib_file})
 
-endmacro()
\ No newline at end of file
+endmacro()
-- 
GitLab