set(proj Uncrustify)
string(TOUPPER "${proj}" PROJ)

#-----------------------------------------------------------------------------
# Make sure this file is included only once
#-----------------------------------------------------------------------------
get_filename_component(CMAKE_CURRENT_LIST_FILENAME ${CMAKE_CURRENT_LIST_FILE} NAME_WE)
if(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED)
  return()
endif()
set(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED 1)

#-----------------------------------------------------------------------------
# Sanity checks
#-----------------------------------------------------------------------------
if(DEFINED ${PROJ}_EXECUTABLE AND NOT EXISTS ${${PROJ}_EXECUTABLE})
  message(FATAL_ERROR "${PROJ}_EXECUTABLE variable is defined but corresponds to non-existing file")
endif()

#-----------------------------------------------------------------------------
# Set dependency list
#-----------------------------------------------------------------------------
set(${proj}_DEPENDENCIES "")

#-----------------------------------------------------------------------------
# If needs to download and build
#-----------------------------------------------------------------------------
if(NOT DEFINED ${PROJ}_EXECUTABLE AND NOT ${USE_SYSTEM_${PROJ}})

  #-----------------------------------------------------------------------------
  # Set project Git info
  #-----------------------------------------------------------------------------
  set(${proj}_REPOSITORY ${git_protocol}://github.com/uncrustify/uncrustify.git)
  set(${proj}_GIT_TAG cf7bbac22c65df32dea3f0abf949cba80fc66d00)
  
  #-----------------------------------------------------------------------------
  # Set project directory
  #-----------------------------------------------------------------------------
  set(${proj}_SOURCE_DIR ${CMAKE_BINARY_DIR}/Superbuild/${proj})
  set(${proj}_DIR ${CMAKE_BINARY_DIR}/Superbuild/${proj}-build)

  #-----------------------------------------------------------------------------
  # Add project
  #-----------------------------------------------------------------------------
  include(ExternalProject)
  ExternalProject_add(${proj}
    GIT_REPOSITORY ${${proj}_REPOSITORY}
    GIT_TAG ${${proj}_GIT_TAG}
    UPDATE_COMMAND ""
    SOURCE_DIR ${${proj}_SOURCE_DIR}
    BINARY_DIR ${${proj}_DIR}
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${${proj}_DIR}
    DEPENDS ${${proj}_DEPENDENCIES}
    )
  set(${PROJ}_EXECUTABLE ${${proj}_DIR}/bin/uncrustify)

#-----------------------------------------------------------------------------
# If using system
#-----------------------------------------------------------------------------
else()
  if(${USE_SYSTEM_${PROJ}})
    find_program(${PROJ}_EXECUTABLE ${proj} DOC "Path of ${proj} program")
    if(NOT ${PROJ}_EXECUTABLE)
      message(FATAL_ERROR "To use the system ${proj}, set ${PROJ}_EXECUTABLE")
    endif()
  endif()
endif()