###############################################################################
# the macros in charge of dispatching to the language specific macros

###############################################################################
# ccache management. This option is shared by most of generators, so put it here.
cmake_dependent_option(
  ITK_USE_CCACHE
  "Use ccache to cache swig/castxml/... output and speedup the rebuild."
  OFF
  ITK_WRAP_PYTHON
  OFF)
mark_as_advanced(ITK_USE_CCACHE)
if(ITK_USE_CCACHE)
  find_program(
    CCACHE_EXECUTABLE
    NAMES ccache-swig ccache
    DOC "ccache executable.")
endif()

if(DEFINED ITK_WRAP_GCCXML)
  message(FATAL_ERROR "ITK_WRAP_GCCXML is deprecated.  Use ${module_prefix}_WRAP_CASTXML instead.")
endif()
###############################################################################
# build the generators list
if(EXTERNAL_WRAP_ITK_PROJECT)
  # generators there have been turned on while building wrapitk
else()
  cmake_dependent_option(
    ${module_prefix}_WRAP_CASTXML
    "Build xml files."
    ON
    ITK_WRAP_PYTHON
    OFF)
  cmake_dependent_option(
    ${module_prefix}_WRAP_SWIGINTERFACE
    "Build swig interfaces."
    ON
    ITK_WRAP_PYTHON
    OFF)
  mark_as_advanced(${module_prefix}_WRAP_CASTXML ${module_prefix}_WRAP_SWIGINTERFACE)
endif()
if(NOT ${module_prefix}_WRAP_CASTXML)
  message(FATAL_ERROR "${module_prefix}_WRAP_CASTXML is required to be on for wrapping python")
endif()
if(NOT ${module_prefix}_WRAP_SWIGINTERFACE)
  message(FATAL_ERROR "${module_prefix}_WRAP_SWIGINTERFACE is required to be on for wrapping python")
endif()

set(WRAP_ITK_GENERATORS CACHE INTERNAL "Internal generators list.")
set(WRAP_ITK_UNUSED_GENERATORS CACHE INTERNAL "Internal unused generators list.")

# The following list of directories int the "ITK/Wrapping/Generators
set(_candidate_generators
    "SwigInterface"
    "Doc"
    "CastXML"
    "Python")

foreach(lang ${_candidate_generators})
  string(TOUPPER "${lang}" lang_upper)

  # add the language to the options
  if(NOT DEFINED ${module_prefix}_WRAP_${lang_upper})
    cmake_dependent_option(
      ${module_prefix}_WRAP_${lang_upper}
      "Build swig ${lang} wrapper support."
      OFF
      ITK_WRAP_PYTHON
      OFF)
  endif()
  # add the language to the list, if the user have turn it on, and include
  # the subdirectory
  if(${module_prefix}_WRAP_${lang_upper})
    list(APPEND WRAP_ITK_GENERATORS "${lang}")
    add_subdirectory("${lang}")
  else()
    list(APPEND WRAP_ITK_UNUSED_GENERATORS "${lang}")
  endif()
endforeach()
mark_as_advanced(${module_prefix}_WRAP_DOC)
set(WRAP_ITK_GENERATORS
    ${WRAP_ITK_GENERATORS}
    CACHE INTERNAL "Internal generators list.")
set(WRAP_ITK_UNUSED_GENERATORS
    ${WRAP_ITK_UNUSED_GENERATORS}
    CACHE INTERNAL "Internal unused generators list.")

# The include_directories are added here to be used by Wrapping/ConfigureWrapping.cmake
foreach(lang ${_candidate_generators})
  string(TOUPPER "${lang}" lang_upper)
  if(${module_prefix}_WRAP_${lang_upper})
    get_directory_property(inc DIRECTORY "${lang}" INCLUDE_DIRECTORIES)
    include_directories(${inc})
  endif()
endforeach()
unset(_candidate_generators)
