PROJECT(Xdmf)

SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")

# Send VTK executables to the ParaView LIBRARY directory (not a mistake).
# Send VTK include files to the ParaView include directory
# Send VTK libraries to the ParaView library directory.
SET(VTK_INSTALL_PACKAGE_DIR_CM24 ${PV_INSTALL_LIB_DIR})

IF (PARAVIEW_USE_MPI)
  SET(XDMF_BUILD_MPI 1)
  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
  IF (MPI_LIBRARY) 
    SET(XDMF2_MPI_LIBRARIES ${MPI_LIBRARY})   
  ENDIF (MPI_LIBRARY)   
  IF (MPI_EXTRA_LIBRARY)   
    SET(XDMF2_MPI_LIBRARIES ${XDMF2_MPI_LIBRARIES} "${MPI_EXTRA_LIBRARY}")   
  ENDIF (MPI_EXTRA_LIBRARY) 
ELSE (PARAVIEW_USE_MPI)
  SET(XDMF_BUILD_MPI 0)
ENDIF (PARAVIEW_USE_MPI)

IF(NOT BUILD_SHARED_LIBS)
  ADD_DEFINITIONS(-DLIBXML_STATIC)
ENDIF(NOT BUILD_SHARED_LIBS)

SET(XDMF_BUILD_VTK 1)
IF(VTK_USE_SYSTEM_LIBXML2)
  SET(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
  SET(VTKLIBXML2_INCLUDE_DIR ${LIBXML2_INCLUDE_DIR})
ELSE(VTK_USE_SYSTEM_LIBXML2)
  SET(LIBXML2_LIBRARY vtklibxml2)
  SET(VTKLIBXML2_INCLUDE_DIR ${ParaView_BINARY_DIR}/VTK/Utilities/vtklibxml2)
ENDIF(VTK_USE_SYSTEM_LIBXML2)

SET(HDF5_LIBRARY ${PARAVIEW_HDF5_LIBRARIES})
IF(VTK_USE_SYSTEM_EXPAT)
  SET(XDMF_EXPAT_LIBRARIES ${EXPAT_LIBRARY})
ELSE(VTK_USE_SYSTEM_EXPAT)
  SET(XDMF_EXPAT_LIBRARIES vtkexpat)
ENDIF(VTK_USE_SYSTEM_EXPAT)
SET(XDMF_USE_ANSI_STDLIB ${PARAVIEW_USE_ANSI_STDLIB})

IF(NOT XDMF_INSTALL_LIB_DIR)
  SET(XDMF_INSTALL_LIB_DIR /lib)
ENDIF(NOT XDMF_INSTALL_LIB_DIR)
IF(NOT XDMF_INSTALL_INCLUDE_DIR)
  SET(XDMF_INSTALL_INCLUDE_DIR /include/Xdmf)
ENDIF(NOT XDMF_INSTALL_INCLUDE_DIR)
IF(NOT XDMF_INSTALL_INCLUDE_VTK_DIR)
  SET(XDMF_INSTALL_INCLUDE_VTK_DIR /include/XdmfVtk)
ENDIF(NOT XDMF_INSTALL_INCLUDE_VTK_DIR)

# Let parent project set XDMF_INSTALL_NO_DEVELOPMENT or
# XDMF_INSTALL_NO_RUNTIME to remove components from the installation.
SET(XDMF_INSTALL_NO_LIBRARIES)
IF(BUILD_SHARED_LIBS)
  IF(XDMF_INSTALL_NO_RUNTIME AND XDMF_INSTALL_NO_DEVELOPMENT)
    SET(XDMF_INSTALL_NO_LIBRARIES 1)
  ENDIF(XDMF_INSTALL_NO_RUNTIME AND XDMF_INSTALL_NO_DEVELOPMENT)
ELSE(BUILD_SHARED_LIBS)
  IF(XDMF_INSTALL_NO_DEVELOPMENT)
    SET(XDMF_INSTALL_NO_LIBRARIES 1)
  ENDIF(XDMF_INSTALL_NO_DEVELOPMENT)
ENDIF(BUILD_SHARED_LIBS)

IF(EXISTS "${HDF5_CONFIG}")
  INCLUDE("${HDF5_CONFIG}")
  ADD_DEFINITIONS(${HDF5_EXTRA_FLAGS})
ENDIF(EXISTS "${HDF5_CONFIG}")

OPTION(XDMF_HAS_NDGM "XDMF has Network Distributed Global Memory (NDGM)" OFF)
MARK_AS_ADVANCED(XDMF_HAS_NDGM)
IF(XDMF_HAS_NDGM)
  OPTION(XDMF_HAS_NDGM_SOURCE "XDMF has Network Distributed Global Memory (NDGM) Source" OFF)
  IF(XDMF_HAS_NDGM_SOURCE)
    FIND_PATH(NDGM_DIR BuildNDGM.cmake ${Xdmf_SOURCE_DIR}/../Ndgm "Root of Source for NDGM")
    IF(NDGM_DIR)
      MESSAGE(STATUS "......Process NDGM Source")
      INCLUDE(${NDGM_DIR}/BuildNDGM.cmake)
      #SUBDIRS(NDGM)
      INCLUDE_DIRECTORIES(${NDGM_DIR}/libsrc)
      SET(NDGM_LIBRARY ndgm) 
    ENDIF(NDGM_DIR)
  ELSE(XDMF_HAS_NDGM_SOURCE)
    MESSAGE(STATUS "......Looking for NDGM_INCLUDE_DIR")
    FIND_PATH(NDGM_INCLUDE_DIR Ndgm ${Xdmf_SOURCE_DIR}/../Ndgm/libsrc "Include Directory for NDGM; Resolves #include <Ndgm/ndgm.h>")
    MESSAGE(STATUS "......Looking for NDGM_LIBRARY")
    FIND_LIBRARY(NDGM_LIBRARY ndgm ${LIBRARY_OUTPUT_PATH})
    INCLUDE_DIRECTORIES(${NDGM_INCLUDE_DIR})
    SET(NDGM_LIBRARY ${NDGM_LIBRARY})
  ENDIF(XDMF_HAS_NDGM_SOURCE)
  SET(HAVE_NDGM 1)
ENDIF(XDMF_HAS_NDGM)

SET(XDMF2_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
SET(XDMF2_VTK_DIR ${ParaView_BINARY_DIR}/VTK)
CONFIGURE_FILE(${Xdmf_SOURCE_DIR}/XDMFConfig.cmake.in
  ${Xdmf_BINARY_DIR}/XDMFConfig.cmake @ONLY IMMEDIATE)

MAKE_DIRECTORY(${Xdmf_BINARY_DIR}/Ice)

INCLUDE_DIRECTORIES(
  ${Xdmf_SOURCE_DIR}/Ice
  ${Xdmf_BINARY_DIR}/Ice
  ${Xdmf_SOURCE_DIR}/libsrc
  ${Xdmf_BINARY_DIR}/libsrc
  ${Xdmf_SOURCE_DIR}/libsrc/utils
  ${Xdmf_SOURCE_DIR}/vtk
  ${Xdmf_BINARY_DIR}/vtk
  ${VTK_INCLUDE_DIR} 
  ${VTKEXPAT_INCLUDE_DIR}
  ${ParaView_SOURCE_DIR}/VTK/Utilities
  ${ParaView_BINARY_DIR}/VTK/Utilities
  ${VTKLIBXML2_INCLUDE_DIR}
  ${HDF5_INCLUDE_DIR}
  )
SUBDIRS(Ice)
SUBDIRS(libsrc)
SUBDIRS(vtk)
