IF (NOT OrocosRTT_FOUND)

FIND_PACKAGE(OrocosRTT REQUIRED)

ENDIF(NOT OrocosRTT_FOUND)

orogen_pkg_check_modules(OrocosCORBA “orocos-rtt-corba-${OROCOS_TARGET}>=2.1.0”) IF(NOT OrocosCORBA_FOUND)

IF (OrocosCORBA_FIND_REQUIRED)
    MESSAGE(FATAL_ERROR "RTT has not been built with CORBA support")
ELSEIF(NOT OrocosCORBA_FIND_QUIETLY)
    MESSAGE(STATUS "RTT has not been built with CORBA support")
ENDIF (OrocosCORBA_FIND_REQUIRED)

ELSE(NOT OrocosCORBA_FOUND)

LIST(APPEND OROCOS_COMPONENT_INCLUDE ${OrocosCORBA_INCLUDE_DIRS})

# First, find the actual implementation of the used ORB (TAO or OMNIORB)
FIND_FILE( OrocosCORBA_config rtt/transports/corba/rtt-corba-config.h ${OrocosRTT_INCLUDE_DIRS})
FILE(STRINGS ${OrocosCORBA_config} CORBA_IMPLEMENTATION
    REGEX "define RTT_CORBA_IMPLEMENTATION ")
STRING(STRIP ${CORBA_IMPLEMENTATION} CORBA_IMPLEMENTATION)
STRING(REGEX MATCH "[^ ]+$" CORBA_IMPLEMENTATION ${CORBA_IMPLEMENTATION})

# In the case of the TAO ORB, we add TAO_Strategies to be able to use
# multiple communication methods
IF (CORBA_IMPLEMENTATION STREQUAL "TAO")
    LIST(APPEND OrocosCORBA_LIBRARIES TAO_Strategies TAO_AnyTypeCode)
ENDIF (CORBA_IMPLEMENTATION STREQUAL "TAO")
IF (CORBA_IMPLEMENTATION STREQUAL "OMNIORB")
    LIST(APPEND OrocosCORBA_LIBRARIES omniDynamic4)
ENDIF (CORBA_IMPLEMENTATION STREQUAL "OMNIORB")

# ORB-specific configuration steps if the TYPEKIT component
# is required
STRING(REGEX MATCH "Typekit" _orocos_corba_typekit "${OrocosCORBA_FIND_COMPONENTS}")
IF (_orocos_corba_typekit)
    IF (CORBA_IMPLEMENTATION STREQUAL "TAO")
        MESSAGE(STATUS "Orocos reports in ${OrocosCORBA_config} to use the TAO ORB")

        FIND_PROGRAM(OrocosCORBA_IDL_EXECUTABLE tao_idl)
        IF (OrocosCORBA_IDL_EXECUTABLE )
            SET(OrocosCORBA_Typekit_FOUND TRUE)
            ADD_DEFINITIONS(-D_REENTRANT)
            # The ${OrocosRTT_INCLUDE_DIRS}/rtt part is a workaround for RTT's
            # includes brokenness
            SET(OrocosCORBA_Typekit_INCLUDE_DIR "${OrocosCORBA_INCLUDE_DIRS}")
            SET(OrocosCORBA_IDL ${OrocosCORBA_IDL_EXECUTABLE})
        ELSE(OrocosCORBA_IDL_EXECUTABLE )
            IF(NOT OrocosCORBA_FIND_QUIETLY)
                MESSAGE(STATUS "cannot find tao_idl or associated development files")
            ENDIF(NOT OrocosCORBA_FIND_QUIETLY)
        ENDIF (OrocosCORBA_IDL_EXECUTABLE)

    ELSEIF (CORBA_IMPLEMENTATION STREQUAL "OMNIORB")
        MESSAGE(STATUS "Orocos reports in ${OrocosCORBA_config} to use the OMNIORB")

        FIND_PROGRAM(OrocosCORBA_IDL_EXECUTABLE omniidl)
        IF (OrocosCORBA_IDL_EXECUTABLE)
            SET(OrocosCORBA_Typekit_FOUND TRUE)
            # The ${OrocosRTT_INCLUDE_DIRS}/rtt part is a workaround for RTT's
            # includes brokenness
            SET(OrocosCORBA_Typekit_INCLUDE_DIR "${OROCOS_RTT_INCLUDE_DIRS}/rtt;${OROCOS_RTT_INCLUDE_DIRS}/rtt/corba")
            SET(OrocosCORBA_IDL ${OrocosCORBA_IDL_EXECUTABLE} -bcxx -Wba -Wbh=C.h -Wbs=C.cpp -Wbd=DynSK.cpp)
        ELSE(OrocosCORBA_IDL_EXECUTABLE)
            IF(NOT OrocosCORBA_FIND_QUIETLY)
                MESSAGE(STATUS "cannot find omniidl or associated development files")
            ENDIF(NOT OrocosCORBA_FIND_QUIETLY)
        ENDIF (OrocosCORBA_IDL_EXECUTABLE)
    ELSE (CORBA_IMPLEMENTATION STREQUAL "TAO")
        MESSAGE(FATAL_ERROR "unknown Corba implementation ${CORBA_IMPLEMENTATION}")
    ENDIF (CORBA_IMPLEMENTATION STREQUAL "TAO")
ENDIF (_orocos_corba_typekit)

ENDIF(NOT OrocosCORBA_FOUND)