AC_DEFUN([AI_CHECK_MICO], [ AC_LANG_PUSH(C++) AC_ARG_VAR([IDLCPPFLAGS], [additional -I and -D IDL compiler flags]) AC_ARG_WITH( [mico-prefix], AS_HELP_STRING(--with-mico-prefix=DIR,search for MICO in DIR), [ MICO_PREFIX="${withval}" ], [ MICO_PREFIX="" ]) checkMicoPrefix() { MICO_PREFIX="${1}" MICO_PREFIX=`echo ${MICO_PREFIX} | sed 's|[[\\/]]$||'` if test ! -f "${MICO_PREFIX}/include/mico/version.h" then MICO_PREFIX="" fi } findMico() { MICO="no" ORB_DEFINES="" if test "x${AI_SOCKET}" = "x" then AI_CHECK_SOCKET fi if test "x${AI_DLOPEN}" = "x" then AI_CHECK_DLOPEN fi AC_MSG_NOTICE([checking for MICO...]) if test "x${AI_SOCKET}" != "xyes" then return fi if test "x${MICO_PREFIX}" = "x" then for MICO_PREFIX in "/usr/local" "/usr" "/usr/pkg" "/opt/sfw" "/usr/sfw" "/opt/local" do checkMicoPrefix "${MICO_PREFIX}" if test "x${MICO_PREFIX}" != "x" then break fi done else checkMicoPrefix "${MICO_PREFIX}" fi if test "x${MICO_PREFIX}" = "x" then return fi if test ! -f "${MICO_PREFIX}/bin/idl" then return fi if test ! -d "${MICO_PREFIX}/include" then return fi ORB_BIN_DIRS="${MICO_PREFIX}/bin" ORB_LIB_DIRS="${MICO_PREFIX}/lib" ORB_INC_DIRS="${MICO_PREFIX}/include" ORB_COSS_IDL_DIRS="${MICO_PREFIX}/include/coss" ORB_VERSION=`grep ' MICO_VERSION ' "${MICO_PREFIX}/include/mico/version.h" | head -n 1` ORB_VERSION=`echo ${ORB_VERSION} | sed 's/^.*MICO_VERSION *"\(.\{1,\}\)".*$/\1/'` ORB_CFLAGS="" ORB_CXXFLAGS="" ORB_LIBS="" EXT_ORB_LIBS="" if grep '^#define HAVE_SSL 1$' "${MICO_PREFIX}/include/mico/config.h" > /dev/null then if test "x${AI_OPENSSL}" = "x" then AI_CHECK_OPENSSL fi if test "x${AI_OPENSSL}" = "xno" then return fi _AI_LIST_PREPEND_WO_DUPLICATES([${EXT_ORB_LIBS}], [${AI_OPENSSL_LIBS}], EXT_ORB_LIBS) _AI_LIST_CONTAINS([${ORB_LIB_DIRS}], [${AI_OPENSSL_PREFIX}/lib], [], [ ORB_LIB_DIRS="${ORB_LIB_DIRS} ${AI_OPENSSL_PREFIX}/lib" ]) _AI_LIST_CONTAINS([${ORB_BIN_DIRS}], [${AI_OPENSSL_PREFIX}/bin], [], [ ORB_BIN_DIRS="${ORB_BIN_DIRS} ${AI_OPENSSL_PREFIX}/bin" ]) _AI_LIST_CONTAINS([${ORB_INC_DIRS}], [${AI_OPENSSL_PREFIX}/include], [], [ ORB_INC_DIRS="${ORB_INC_DIRS} ${AI_OPENSSL_PREFIX}/include" ]) fi if grep '^#define HAVE_THREADS 1$' "${MICO_PREFIX}/include/mico/config.h" > /dev/null then if test "x${acx_pthread_ok}" = "x" then ACX_PTHREAD fi if test "x${acx_pthread_ok}" = "xno" then return fi ORB_CXXFLAGS="${ORB_CXXFLAGS} ${PTHREAD_CFLAGS}" ORB_CFLAGS="${ORB_CFLAGS} ${PTHREAD_CFLAGS}" _AI_LIST_PREPEND_WO_DUPLICATES([${EXT_ORB_LIBS}], [${PTHREAD_LIBS}], EXT_ORB_LIBS) fi _AI_LIST_PREPEND_WO_DUPLICATES([${EXT_ORB_LIBS}], [${AI_SOCKET_LIBS}], EXT_ORB_LIBS) if grep '^#define HAVE_LIBM 1$' "${MICO_PREFIX}/include/mico/config.h" > /dev/null then AC_CHECK_LIB(m, sqrt, [ _AI_LIST_PREPEND_WO_DUPLICATES([${EXT_ORB_LIBS}], [-lm], EXT_ORB_LIBS) ], [ return ]) fi if test "x${AI_DLOPEN}" = "xyes" then _AI_LIST_PREPEND_WO_DUPLICATES([${EXT_ORB_LIBS}], [${AI_DLOPEN_LIBS}], EXT_ORB_LIBS) fi _AI_LIST_ADD_PREFIX_AND_SUFFIX([${ORB_INC_DIRS}], [-I], [ ], ORB_CPPFLAGS) _AI_LIST_ADD_PREFIX_AND_SUFFIX([${ORB_LIB_DIRS}], [-L], [ ], ORB_LDFLAGS) AI_CHECK_MICO_save_CXXFLAGS="${CXXFLAGS}" AI_CHECK_MICO_save_CPPFLAGS="${CPPFLAGS}" AI_CHECK_MICO_save_LDFLAGS="${LDFLAGS}" AI_CHECK_MICO_save_LIBS="${LIBS}" CXXFLAGS="${CXXFLAGS} ${ORB_CXXFLAGS}" CPPFLAGS="${CPPFLAGS} ${ORB_CPPFLAGS}" LDFLAGS="${LDFLAGS} ${ORB_LDFLAGS}" AC_MSG_CHECKING([for MICO's mandatory libraries]) LIBS="-lmico${ORB_VERSION} ${ORB_LIBS} ${EXT_ORB_LIBS}" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [ #include ], [ int argc; CORBA::ORB_init(argc, 0); ])], [ ORB_LIBS="-lmico${ORB_VERSION} ${ORB_LIBS}" ], [ AC_MSG_RESULT([no]) CXXFLAGS="${AI_CHECK_MICO_save_CXXFLAGS}" CPPFLAGS="${AI_CHECK_MICO_save_CPPFLAGS}" LDFLAGS="${AI_CHECK_MICO_save_LDFLAGS}" LIBS="${AI_CHECK_MICO_save_LIBS}" return ]) AC_MSG_RESULT([yes]) AC_MSG_CHECKING([for MICO's micocoss library]) LIBS="-lmicocoss${ORB_VERSION} ${ORB_LIBS} ${EXT_ORB_LIBS}" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [ #include #include ], [ CORBA::Object_ptr t = CORBA::Object::_nil(); CosTime::TimeService::_narrow(t); ])], [ ORB_LIBS="-lmicocoss${ORB_VERSION} ${ORB_LIBS}" AC_DEFINE([HAVE_LIBmicocoss], [1], [Define if MICO's micocoss library is detected]) HAVE_LIBmicocoss="yes" ], [ HAVE_LIBmicocoss="no" ]) AC_MSG_RESULT([$HAVE_LIBmicocoss]) ORB_LIBS="${ORB_LIBS} ${EXT_ORB_LIBS}" CXXFLAGS="${AI_CHECK_MICO_save_CXXFLAGS}" CPPFLAGS="${AI_CHECK_MICO_save_CPPFLAGS}" LDFLAGS="${AI_CHECK_MICO_save_LDFLAGS}" LIBS="${AI_CHECK_MICO_save_LIBS}" _AI_LIST_ADD_SUFFIX([${ORB_BIN_DIRS}], [${PATH_SEPARATOR}], ORB_PATH) ORB_PATH="${ORB_PATH}\$\$PATH" if test "x${AI_BUILD_SHLIBPATH_VAR}" != "x" then _AI_LIST_ADD_SUFFIX([${ORB_LIB_DIRS}], [${PATH_SEPARATOR}], ORB_LD_LIBRARY_PATH) if test "x${AI_BUILD_SHLIBPATH_VAR}" != "xPATH" then ORB_LD_LIBRARY_PATH="${ORB_LD_LIBRARY_PATH}\$\$${AI_BUILD_SHLIBPATH_VAR}" IDLC="PATH=${ORB_PATH} ${AI_BUILD_SHLIBPATH_VAR}=${ORB_LD_LIBRARY_PATH} idl" else IDLC="PATH=${ORB_LD_LIBRARY_PATH}${ORB_PATH} idl" fi else IDLC="PATH=${ORB_PATH} idl" fi _AI_LIST_ADD_PREFIX_AND_SUFFIX([${ORB_COSS_IDL_DIRS}], [-I], [ ], IDLCPPFLAGS) IDLCPPFLAGS="${AI_CHECK_MICO_save_IDLCPPFLAGS} ${IDLCPPFLAGS}" IDLCXXFLAGS="--codegen-c++ --any --c++-suffix=cpp --c++-skel --hh-suffix=hpp --poa-ties" # The double $ is required by make, but not when running the command directly with sh. IDLC_FIXED=`echo ${IDLC} | sed 's/[[$][$]]/$/g'` AC_MSG_CHECKING([whether MICO's IDL compiler supports --use-quotes]) if ${SHELL} -c "${IDLC_FIXED} --help 2>&1 | grep 'use-quotes' > /dev/null" then IDLCXXFLAGS="${IDLCXXFLAGS} --use-quotes" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi MICO="yes" AC_DEFINE([HAVE_MICO], [1], [Define if MICO is used]) ORB_DEFINES="${ORB_DEFINES} -DHAVE_MICO" ORB_TYPE="MICO" } AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AI_BUILD_SHLIBPATH]) AI_CHECK_MICO_save_IDLCPPFLAGS="${IDLCPPFLAGS}" findMico if test "x${MICO}" = "xyes" then _AI_ORB_BUILDTEST if test "x${ORB_BUILDTEST}" != "xyes" then MICO="no" fi fi ORB_DEFINES="" if test "x${MICO}" = "xyes" then AC_MSG_NOTICE([found MICO ${ORB_VERSION}]) else AC_MSG_NOTICE([MICO not found]) ORB_TYPE="" ORB_VERSION="" IDLC="" IDLCXXFLAGS="" IDLCPPFLAGS="${AI_CHECK_MICO_save_IDLCPPFLAGS}" ORB_CFLAGS="" ORB_CXXFLAGS="" ORB_CPPFLAGS="" ORB_LDFLAGS="" ORB_LIBS="" ORB_BIN_DIRS="" ORB_LIB_DIRS="" ORB_INC_DIRS="" ORB_COSS_IDL_DIRS="" fi AC_SUBST([ORB_TYPE]) AC_SUBST([ORB_VERSION]) AC_SUBST([IDLC]) AC_SUBST([IDLCXXFLAGS]) AC_SUBST([IDLCPPFLAGS]) AC_SUBST([ORB_CFLAGS]) AC_SUBST([ORB_CXXFLAGS]) AC_SUBST([ORB_CPPFLAGS]) AC_SUBST([ORB_LDFLAGS]) AC_SUBST([ORB_LIBS]) AC_SUBST([ORB_BIN_DIRS]) AC_SUBST([ORB_LIB_DIRS]) AC_SUBST([ORB_INC_DIRS]) AC_SUBST([ORB_COSS_IDL_DIRS]) AC_LANG_POP(C++) ])