# 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_BINARY_DIR}/idl)

#INCLUDE(vtkWrapHierarchy.cmake)
#SET(VTK_WRAP_HIERARCHY_EXE vtkWrapHierarchy)

INCLUDE(wrap.cmake)


SET(BASEIDL_FILES
  PARAVIS_Gen_Types.idl
  PARAVIS_Gen.idl
  )

SET(BASEIDL_SK_FILES
  PARAVIS_Gen_TypesSK.cc
  PARAVIS_GenSK.cc
  )

# potential problem on parallel make on the following - multiple outputs
SET(SUFFIXES
  .idl
  .hh
  SK.cc
  )

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

IF(WINDOWS)
ADD_LIBRARY(SalomeIDLPARAVIS STATIC ${srcs})
ELSE(WINDOWS)
ADD_LIBRARY(SalomeIDLPARAVIS SHARED ${srcs})
ENDIF(WINDOWS)

SET(flags)
FOREACH(f ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${CORBA_INCLUDES} ${CORBA_CXXFLAGS} ${KERNEL_CXXFLAGS})
  SET(flags "${flags} ${f}")
ENDFOREACH(f ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${CORBA_INCLUDES} ${CORBA_CXXFLAGS} ${KERNEL_CXXFLAGS})

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

TARGET_LINK_LIBRARIES(SalomeIDLPARAVIS ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${CORBA_LIBS})
INSTALL(TARGETS SalomeIDLPARAVIS DESTINATION lib/salome)
  
ADD_EXECUTABLE(vtkWrapIDL 
  ${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/vtkParseExtras.c
  ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseMain.c
  ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrap.c
  ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrapText.c
  ${CMAKE_CURRENT_SOURCE_DIR}/vtkWrapIDL.c)

ADD_DEPENDENCIES(vtkWrapIDL generate_txt)
  
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/ParaView)
SET(flags)
FOREACH(f ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${PARAVIEW_INCLUDES} ${VTK_INCLUDES})
  SET(flags "${flags} ${f}")
ENDFOREACH(f ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${PARAVIEW_INCLUDES} ${VTK_INCLUDES})

SET_TARGET_PROPERTIES(vtkWrapIDL PROPERTIES COMPILE_FLAGS "${flags}")

TARGET_LINK_LIBRARIES(vtkWrapIDL ${PLATFORM_LDFLAGS} ${PLATFORM_LIBADD})
SET(vtkWrapIDL_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL)
IF(WINDOWS)
  IF(CMAKE_BUILD_TOOL STREQUAL nmake)
    SET(vtkWrapIDL_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL.exe)
  ELSE(CMAKE_BUILD_TOOL STREQUAL nmake)
    SET(vtkWrapIDL_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/vtkWrapIDL.exe)
  ENDIF(CMAKE_BUILD_TOOL STREQUAL nmake)
ENDIF(WINDOWS)
INSTALL(FILES ${vtkWrapIDL_EXEFILE} DESTINATION bin/salome PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

FOREACH(input ${BASEIDL_FILES} ${WRAP_IDL})
  STRING(REGEX REPLACE ".idl" "" base ${input})
  SET(src ${CMAKE_CURRENT_BINARY_DIR}/${base}SK.cc)
  SET(outputs ${src})
  SET(dynsrc ${CMAKE_CURRENT_BINARY_DIR}/${base}DynSK.cc)
  SET(outputs ${outputs} ${dynsrc})
  SET(inc ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh)
  SET(outputs ${outputs} ${inc})
  LIST(FIND BASEIDL_FILES ${input} BASE_INDEX)
  IF(${BASE_INDEX} EQUAL -1)
    SET(input ${CMAKE_CURRENT_BINARY_DIR}/${input})
  ELSE(${BASE_INDEX} EQUAL -1)
    SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
  ENDIF(${BASE_INDEX} EQUAL -1)
  ADD_CUSTOM_COMMAND(
    OUTPUT ${outputs}
    COMMAND ${OMNIORB_IDL} -bcxx ${IDLCXXFLAGS} -I${CMAKE_CURRENT_SOURCE_DIR} -I${KERNEL_ROOT_DIR}/idl/salome ${OMNIORB_IDLCXXFLAGS} ${input}
    MAIN_DEPENDENCY ${input}
    )
  INSTALL(FILES ${input} DESTINATION idl/salome)

  SET(IDL_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh)
  INSTALL(FILES ${IDL_HEADER} DESTINATION include/salome)
  INSTALL(CODE "SET(IDL_FILE ${input})")
  INSTALL(CODE "SET(DIR lib/python${PYTHON_VERSION}/site-packages/salome)")
  INSTALL(CODE "SET(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})")
  INSTALL(CODE "SET(OMNIORB_IDL_PYTHON ${OMNIORB_IDL_PYTHON})")
  INSTALL(CODE "SET(IDLPYFLAGS -bpythonIDL -p${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR} -I${KERNEL_ROOT_DIR}/idl/salome)")
  INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_python_from_idl.cmake)

ENDFOREACH(input ${IDL_FILES})
