# Allow the user to customize their build with some local options
include(${VTK_SOURCE_DIR}/Wrapping/Tools/LocalUserOptions.cmake OPTIONAL)

# vtkParse.tab.c has #line markers that break #include with double quotes.
include_directories(
  ${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${VTK_BINARY_DIR}/Common/Core
  ${VTK_SOURCE_DIR}/Common/Core
  ${VTK_BINARY_DIR}/Utilities/KWSys)

set(VTK_PARSE_SOURCES
  vtkParse.h
  vtkParseType.h
  vtkParse.tab.c
  vtkParseData.c
  vtkParseMain.c
  vtkParseExtras.c
  vtkParseMangle.c
  vtkParseMerge.c
  vtkParseString.c
  vtkParseHierarchy.c
  vtkParsePreprocess.c
  vtkWrap.c
  vtkWrapText.c
)

set_source_files_properties(
  vtkParse.h
  vtkParseType.h
  HEADER_FILE_ONLY
)

# get absolute path of each header for install rules
set(VTK_PARSE_HEADERS)
foreach(arg ${VTK_PARSE_SOURCES})
  get_filename_component(src "${arg}" ABSOLUTE)
  string(REGEX REPLACE "\\.c$" ".h" hdr "${src}")
  if("${hdr}" MATCHES "\\.h$" AND EXISTS "${hdr}")
    list(APPEND VTK_PARSE_HEADERS "${hdr}")
  endif()
endforeach()

# Create a module, but the wrapper tools module is atypical so a lot of
# customization is done here.
set(${vtk-module}_LIBRARIES ${vtk-module})
vtk_module_impl()

# Wrapper tools must be statically linked
vtk_add_library(${vtk-module} STATIC ${VTK_PARSE_SOURCES})
vtk_module_export_info()

if(NOT VTK_INSTALL_NO_DEVELOPMENT)
  install(FILES ${VTK_PARSE_HEADERS}
    DESTINATION ${VTK_INSTALL_INCLUDE_DIR}
    COMPONENT Development
    )
endif()

set_property(SOURCE vtkParseMain.c PROPERTY COMPILE_DEFINITIONS
  VTK_PARSE_VERSION="${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")

if(NOT VTK_COMPILE_TOOLS_IMPORTED)

  add_executable(vtkWrapHierarchy vtkWrapHierarchy.c)
  target_link_libraries(vtkWrapHierarchy vtkWrappingTools)
  vtk_compile_tools_target(vtkWrapHierarchy)

  add_executable(vtkWrapTcl vtkWrapTcl.c)
  target_link_libraries(vtkWrapTcl vtkWrappingTools)
  add_executable(vtkWrapTclInit vtkWrapTclInit.c)
  vtk_compile_tools_target(vtkWrapTcl)
  vtk_compile_tools_target(vtkWrapTclInit)

  add_executable(vtkWrapPython
    vtkWrapPython.c
    vtkWrapPythonClass.c
    vtkWrapPythonConstant.c
    vtkWrapPythonEnum.c
    vtkWrapPythonMethod.c
    vtkWrapPythonMethodDef.c
    vtkWrapPythonNamespace.c
    vtkWrapPythonOverload.c
    vtkWrapPythonTemplate.c
    vtkWrapPythonType.c
  )
  target_link_libraries(vtkWrapPython vtkWrappingTools)
  add_executable(vtkWrapPythonInit vtkWrapPythonInit.c)
  vtk_compile_tools_target(vtkWrapPython)
  vtk_compile_tools_target(vtkWrapPythonInit)

  add_executable(vtkParseJava vtkParseJava.c)
  target_link_libraries(vtkParseJava vtkWrappingTools)
  add_executable(vtkWrapJava vtkWrapJava.c)
  target_link_libraries(vtkWrapJava vtkWrappingTools)
  vtk_compile_tools_target(vtkParseJava)
  vtk_compile_tools_target(vtkWrapJava)

endif()
