# Copyright (C) 2010-2012  CEA/DEN, EDF R&D
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#

SET(VERSION_INFO ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MAINTENANCE})
SET(SOVERSION_INFO ${VERSION_MAJOR}.${VERSION_MINOR})

ADD_DEFINITIONS(-DHAVE_SALOME_CONFIG)
INCLUDE_DIRECTORIES(${KERNEL_ROOT_DIR}/include/salome ${CMAKE_CURRENT_SOURCE_DIR}/../ParaView ${CMAKE_BINARY_DIR}/idl ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

IF(WITH_VISU)
  SET(VISU_PARAVIS_LIBS
    ${SalomeIDLVISU}
    )
  
  ADD_DEFINITIONS(-DWITH_VISU)
ENDIF(WITH_VISU)

#Executable
SET(bin_PROGRAMS
  vtkWrapIDL_HH
  vtkWrapIDL_CC
  )

SET(vtkWrapIDL_HH_CPPFLAGS
  -DIDL_I_HH
  )

SET(vtkWrapIDL_CC_CPPFLAGS
  -DIDL_I_CC
  )

INCLUDE(wrap.cmake)

# Library sources
SET(dist_libPARAVIS_la_SOURCES
  PVGUI_Module.h
  PVGUI_Module.cxx
  PVGUI_Module_actions.cxx
  PVGUI_Module_widgets.cxx
  PVGUI_ViewManager.h
  PVGUI_ViewManager.cxx
  PVGUI_ViewModel.h
  PVGUI_ViewModel.cxx
  PVGUI_ViewWindow.h
  PVGUI_ViewWindow.cxx
  PVGUI_OutputWindowAdapter.h
  PVGUI_OutputWindowAdapter.cxx
  PVGUI_Tools.h
  PVGUI_Tools.cxx
  PVGUI_ParaViewSettingsPane.h
  PVGUI_ParaViewSettingsPane.cxx
  PV_I.h
  PARAVIS_Gen_i.hh
  PV_Events.h
  PV_Tools.h
  PARAVIS_Gen_i.cc
  PV_Tools.cxx
  ${WRAP_IDL_I_HH}
  ${WRAP_IDL_I_CC}
  PARAVIS_CreateClass.cxx
  )

# Check ParaView documentation file existence
# if it exists add it to the resources (compile into binary form)
# otherwise print warning message
SET(PV_DOC_FILE ${ParaView_INSTALL_PREFIX}/share/doc/paraview-${PARAVIEW_VERSION_MAJOR}.${PARAVIEW_VERSION_MINOR}/paraview.qch)
IF (EXISTS ${PV_DOC_FILE})
  SET(RC_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/PVGUI.qrc.in)
  SET(RC_GENERATED ${CMAKE_CURRENT_BINARY_DIR}/PVGUI.qrc)
  MESSAGE(STATUS "Creation of ${RC_GENERATED}")
  CONFIGURE_FILE(${RC_SOURCE} ${RC_GENERATED})
  QT4_ADD_RESOURCES(RCS_SOURCES ${RC_GENERATED})
  SET(dist_libPARAVIS_la_SOURCES ${dist_libPARAVIS_la_SOURCES} ${RCS_SOURCES})
  ADD_DEFINITIONS(-DHAS_PV_DOC)
ELSE (EXISTS ${PV_DOC_FILE})
  MESSAGE(WARNING "Help file for ParaView has not been found! ParaView documentation will not be available.")
ENDIF (EXISTS ${PV_DOC_FILE})

# MOC pre-processing
SET(MOC_FILES
  PVGUI_Module_moc.cxx
  PVGUI_ViewManager_moc.cxx
  PVGUI_ViewModel_moc.cxx
  PVGUI_ViewWindow_moc.cxx
  PVGUI_ParaViewSettingsPane_moc.cxx
  )

# additionnal compilation flags
# Note that ParaView uses HDF5
SET(libPARAVIS_la_CPPFLAGS
  -ftemplate-depth-32
  ${QT_INCLUDES}
  ${QT_ASSISTANT_INCLUDES}
  ${PYTHON_INCLUDES}
  ${CAS_CPPFLAGS}
  ${CAS_CXXFLAGS}
  ${KERNEL_CXXFLAGS}
  ${CORBA_CXXFLAGS}
  ${CORBA_INCLUDES}
  ${BOOST_CPPFLAGS}
  ${GUI_CXXFLAGS}
  ${MED_CXXFLAGS}
  ${VISU_CXXFLAGS}
  ${VISU_PARAVIS_DEFINES}
  )

# remove deprecation warnings from Paraview
IF(WINDOWS)
ELSE(WINDOWS)
  SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
ENDIF(WINDOWS)

# resources files
SET(nodist_salomeres_DATA
  PARAVIS_images.qm
  PARAVIS_msg_en.qm
  PARAVIS_msg_fr.qm
  )

SET(srcs)
FOREACH(src ${dist_libPARAVIS_la_SOURCES})
  SET(srcs ${srcs} ${src})
ENDFOREACH(src ${dist_libPARAVIS_la_SOURCES})

FOREACH(f ${MOC_FILES})
  SET(srcs ${srcs} ${CMAKE_CURRENT_BINARY_DIR}/${f})
ENDFOREACH(f ${MOC_FILES})

ADD_LIBRARY(PARAVIS SHARED ${srcs})

SET(flags)
FOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${libPARAVIS_la_CPPFLAGS})
  SET(flags "${flags} ${f}")
ENDFOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${libPARAVIS_la_CPPFLAGS})

SET_TARGET_PROPERTIES(PARAVIS PROPERTIES COMPILE_FLAGS "${flags}")
SET_TARGET_PROPERTIES(PARAVIS PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO})

TARGET_LINK_LIBRARIES(PARAVIS 
  ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS}
  ${CORBA_LIBS}
  ${QT_LIBS}
  ${CAS_KERNEL}
  ${VTK_LIBS}
  ${PYTHON_LIBS}
  ${KERNEL_LDFLAGS} ${SalomeDS} ${SALOMELocalTrace} ${SalomeIDLKernel} ${SalomeNS} ${SalomeLifeCycleCORBA} ${SalomeContainer} ${TOOLSDS}
  ${GUI_LDFLAGS} ${SalomeApp} ${LightApp} ${CAM} ${qtx} ${suit} ${Event} ${PyInterp} ${SalomeObject}
  ${MED_LDFLAGS} ${SalomeIDLMED}
  ${VISU_LDFLAGS}
  ${VISU_PARAVIS_LIBS}
  ${PARAVIEW_LIBS}
  SalomeIDLPARAVIS
)
INSTALL(TARGETS PARAVIS DESTINATION lib/salome)

FOREACH(name ${bin_PROGRAMS})
  ADD_EXECUTABLE(${name} 
    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParse.tab.c 
    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParsePreprocess.c
    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseHierarchy.c
    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseMain.c
    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseExtras.c
    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrap.c
    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrapText.c
    ${CMAKE_SOURCE_DIR}/idl/vtkWrapIDL.c)
  ADD_DEPENDENCIES(${name} generate_txt)
  
  SET(flags)
  FOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${${name}_CPPFLAGS})
    SET(flags "${flags} ${f}")
  ENDFOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${${name}_CPPFLAGS})
  
  SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}")
  TARGET_LINK_LIBRARIES(${name} ${PLATFORM_LIBADD})
  
  SET(${name}_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${name})
  IF(WINDOWS)
    IF(CMAKE_BUILD_TOOL STREQUAL nmake)
      SET(${name}_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${name}.exe)
    ELSE(CMAKE_BUILD_TOOL STREQUAL nmake)
      SET(${name}_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${name}.exe)
    ENDIF(CMAKE_BUILD_TOOL STREQUAL nmake)
  ENDIF(WINDOWS)
  INSTALL(FILES ${${name}_EXEFILE} DESTINATION bin/salome PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
ENDFOREACH(name ${bin_PROGRAMS})

FOREACH(output ${MOC_FILES})
  STRING(REGEX REPLACE _moc.cxx .h input ${output})
  
  SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
  SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
  ADD_CUSTOM_COMMAND(
    OUTPUT ${output}
    COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input} -o ${output}
    MAIN_DEPENDENCY ${input}
    )
ENDFOREACH(output ${MOC_FILES})
            
FOREACH(f ${nodist_salomeres_DATA})
  STRING(REGEX REPLACE .qm .ts input ${f})
  SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input})
  SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f})
  EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output})
  INSTALL(FILES ${output} DESTINATION share/salome/resources/paravis)
ENDFOREACH(f ${nodist_salomeres_DATA})
