# LogService cmake local file

# Generate the code out of the IDL source files and build the ad-hoc libraries.
# (idl is part of omniORB which is mandatory)

# Define the flags for the IDL compiler
SET(
  LOGSERVICE_IDL_FLAGS "-bcxx -Wba -Wbtp"
  CACHE STRING
  "Idl compiler flags"
  FORCE
)
MARK_AS_ADVANCED( LOGSERVICE_IDL_FLAGS )

SEPARATE_ARGUMENTS( LOGSERVICE_IDL_FLAGS )

SET( IDL_SOURCES
  LogComponent
  LogTool
  LogTypes
)

# The C/C++ callers of the idl generated interface will include the 
# idl generated header files. The following technical variable is a
# commidity for expressing this dependency (refer below to the definition
# of LOGSERVICE_TARGET_IDL_GENERATED_HEADERS):
SET( LOGSERVICE_TARGET_IDL_GENERATED_HEADER_FILES )

SET( LOGSERVICE_IDL_GENERATED_CXX_FILES "" )

FOREACH( loop_var ${IDL_SOURCES} )

  ADD_CUSTOM_COMMAND(
    OUTPUT    ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}SK.cc
    COMMAND   ${OMNIORB4_IDL_COMPILER}
    ARGS      ${LOGSERVICE_IDL_FLAGS}
              ${CMAKE_CURRENT_SOURCE_DIR}/${loop_var}.idl
    DEPENDS   ${CMAKE_CURRENT_SOURCE_DIR}/${loop_var}.idl
    COMMENT   "idl generated code"
  )

  # Dirty trick to avoid executing twice the IDL compiler which produces
  # multiple outputs ${loop_var}SK.cc, ${loop_var}DynSK.cc and
  # ${loop_var}.hh [refer to
  # http://public.kitware.com/pipermail/cmake/2004-August/005392.html ]
  ADD_CUSTOM_COMMAND(
    OUTPUT    ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}DynSK.cc
    COMMAND   echo
    ARGS      -n
    DEPENDS   ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}SK.cc
    COMMENT   "idl generated code"
  )
  ADD_CUSTOM_COMMAND(
    OUTPUT    ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}.hh
    COMMAND   echo
    ARGS      -n
    DEPENDS   ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}SK.cc
    COMMENT   "idl generated code"
  )

  SET( LOGSERVICE_TARGET_IDL_GENERATED_HEADER_FILES
    ${LOGSERVICE_TARGET_IDL_GENERATED_HEADER_FILES}
    ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}.hh
  )
  SET( LOGSERVICE_IDL_GENERATED_CXX_FILES
    ${LOGSERVICE_IDL_GENERATED_CXX_FILES}
    ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}DynSK.cc
    ${CMAKE_CURRENT_BINARY_DIR}/${loop_var}SK.cc
  )
ENDFOREACH(loop_var)

# idl generated header files:
ADD_CUSTOM_TARGET( LOGSERVICE_TARGET_IDL_GENERATED_HEADERS
  DEPENDS  ${LOGSERVICE_TARGET_IDL_GENERATED_HEADER_FILES}
)

INCLUDE_DIRECTORIES(
  ${OMNIORB4_INCLUDE_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}
)

ADD_LIBRARY( LogServiceIDL ${LOGSERVICE_IDL_GENERATED_CXX_FILES} )
TARGET_LINK_LIBRARIES( LogServiceIDL ${OMNIORB4_LIBRARIES} )
INSTALL_TARGETS( /lib/ LogServiceIDL )

