include_directories(${CMAKE_CURRENT_SOURCE_DIR}  ${CMAKE_CURRENT_BINARY_DIR})

set(monitorLib_XSD
  ${CMAKE_CURRENT_SOURCE_DIR}/MonitoringModel.xsd
  ${CMAKE_CURRENT_SOURCE_DIR}/MonitorIn.xsd
  ${CMAKE_CURRENT_SOURCE_DIR}/MonitorOut.xsd
)

option(MML_GENERATE_XSD_LIB "Generates mml from XML Schema (XSD code synthesis needed)" OFF)

if(MML_GENERATE_XSD_LIB)
  # check if the plateform can compile the xsd automatically
  find_package(XSD REQUIRED)

  if (XSD_COMMAND)
    set(XSD_COMMAND xsdcxx CACHE STRING "name of the XSD code synthesis compiler")
    # generates headers from scratch
    foreach(xsdFile ${monitorLib_XSD})
      get_filename_component(xsdFileName ${xsdFile} NAME_WE)
      message(STATUS "Generating code from ${xsdFileName}")
      add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${xsdFileName}.hxx ${CMAKE_CURRENT_BINARY_DIR}/${xsdFileName}.cxx
                        COMMAND ${XSD_COMMAND}
                        ARGS cxx-tree --generate-polymorphic --generate-serialization --namespace-map =mml --polymorphic-type Method --polymorphic-type Criteria ${xsdFile}
                        DEPENDS ${xsdFile})
      set(monitoringLib_H ${monitoringLib_H} ${CMAKE_CURRENT_BINARY_DIR}/${xsdFileName}.hxx)
      set(monitoringLib_SRCS ${monitoringLib_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/${xsdFileName}.cxx)
    endforeach()
  else()
    message(FATAL_ERROR "Cannot find xsdcxx command: cannot generate mml from scratch, try with MML_GENERATE_XSD_LIB set to OFF")
    set(MML_GENERATE_XSD_LIB OFF)
  endif()
else()
  # use previously generated headers
  foreach(xsdFile ${monitorLib_XSD})
    get_filename_component(xsdFileName ${xsdFile} NAME_WE)
    set(monitoringLib_H ${monitoringLib_H} generated/${xsdFileName}.hxx)
    set(monitoringLib_SRCS ${monitoringLib_SRCS} generated/${xsdFileName}.cxx)
  endforeach()
endif()

set(monitoringLib_LIBRARIES ${MML_LIBRARIES})

include_directories(${MML_INCLUDE_DIRECTORIES})

add_library(mml STATIC ${monitoringLib_SRCS}) # better use static libs for distributing executables

target_link_libraries(mml ${MML_LIBRARIES})

#--------------
# installation
#--------------
export_headers(${monitoringLib_H} COMPONENT mml)

# lib installation
install(TARGETS mml
        ARCHIVE DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}
        COMPONENT mml
)