diff --git a/opal/mca/event/configure.m4 b/opal/mca/event/configure.m4 index 407b7a52a2b..5fde182b4cf 100644 --- a/opal/mca/event/configure.m4 +++ b/opal/mca/event/configure.m4 @@ -18,11 +18,42 @@ dnl opal/mca/event/event.h. dnl We only want one winning component (vs. STOP_AT_FIRST_PRIORITY, dnl which will allow all components of the same priority who succeed to dnl win) + m4_define(MCA_opal_event_CONFIGURE_MODE, STOP_AT_FIRST) +dnl +dnl Setup --with-libevent and --with-libevent-libdir +dnl +AC_DEFUN([MCA_opal_event_SETUP],[ + AC_ARG_WITH([libevent], + [AC_HELP_STRING([--with-libevent=DIR], + [Search for libevent headers and libraries in DIR. Should only be used if an external copy of libevent is being used.])]) + + # Bozo check + AS_IF([test "$with_libevent" = "no"], + [AC_MSG_WARN([It is not possible to configure Open MPI --without-libevent]) + AC_MSG_ERROR([Cannot continue])]) + AS_IF([test "$with_libevent" = "yes"], + [with_libevent=]) + + AC_ARG_WITH([libevent-libdir], + [AC_HELP_STRING([--with-libevent-libdir=DIR], + [Search for libevent libraries in DIR. Should only be used if an external copy of libevent is being used.])]) + + # Make sure the user didn't specify --with-libevent=internal and + # --with-libevent-libdir=whatever (because you can only specify + # --with-libevent-libdir when external libevent is being used). + AS_IF([test "$with_libevent" = "internal" && test -n "$with_libevent_libdir"], + [AC_MSG_WARN([Both --with-libevent=internal and --with-libevent-libdir=DIR]) + AC_MSG_WARN([were specified, which does not make sense.]) + AC_MSG_ERROR([Cannot continue])]) +]) + AC_DEFUN([MCA_opal_event_CONFIG],[ opal_event_base_include= + MCA_opal_event_SETUP + # configure all the components MCA_CONFIGURE_FRAMEWORK($1, $2, 1) diff --git a/opal/mca/event/external/configure.m4 b/opal/mca/event/external/configure.m4 index 498af38b405..4322349d0c0 100644 --- a/opal/mca/event/external/configure.m4 +++ b/opal/mca/event/external/configure.m4 @@ -1,8 +1,8 @@ # -*- shell-script -*- # -# Copyright (c) 2009-2013 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2009-2018 Cisco Systems, Inc. All rights reserved # Copyright (c) 2013 Los Alamos National Security, LLC. All rights reserved. -# Copyright (c) 2015-2017 Research Organization for Information Science +# Copyright (c) 2015-2018 Research Organization for Information Science # and Technology (RIST). All rights reserved. # # Copyright (c) 2017 Intel, Inc. All rights reserved. @@ -56,72 +56,57 @@ AC_DEFUN([MCA_opal_event_external_POST_CONFIG],[ AC_DEFUN([MCA_opal_event_external_CONFIG],[ AC_CONFIG_FILES([opal/mca/event/external/Makefile]) - OPAL_VAR_SCOPE_PUSH([opal_event_external_CPPFLAGS_save opal_event_external_CFLAGS_save opal_event_external_LDFLAGS_save opal_event_external_LIBS_save]) - - AC_ARG_WITH([libevent], - [AC_HELP_STRING([--with-libevent=DIR], - [Search for libevent headers and libraries in DIR. Should only be used if an external copy of libevent is being used.])]) - - # Bozo check - AS_IF([test "$with_libevent" = "no"], - [AC_MSG_WARN([It is not possible to configure Open MPI --without-libevent]) - AC_MSG_ERROR([Cannot continue])]) - - AC_ARG_WITH([libevent-libdir], - [AC_HELP_STRING([--with-libevent-libdir=DIR], - [Search for libevent libraries in DIR. Should only be used if an external copy of libevent is being used.])]) - - # Make sure the user didn't specify --with-libevent=internal and - # --with-libevent-libdir=whatever (because you can only specify - # --with-libevent-libdir when external libevent is being used). - AS_IF([test "$with_libevent" = "internal" && test -n "$with_libevent_libdir"], - [AC_MSG_WARN([Both --with-libevent=internal and --with-libevent-libdir=DIR]) - AC_MSG_WARN([were specified, which does not make sense.]) - AC_MSG_ERROR([Cannot continue])]) - - # Do we want this external component? (slightly redundant logic, - # but hopefully slightly more clear...) - opal_event_external_want=no - AS_IF([test "$with_libevent" = "external"], [opal_event_external_want=yes]) - AS_IF([test -n "$with_libevent_libdir"], [opal_event_external_want=yes]) - AS_IF([test -n "$with_libevent" && test "$with_libevent" != "no" && test "$with_libevent" != "internal"], [opal_event_external_want=yes]) - - # If we want external support, try it - AS_IF([test "$opal_event_external_want" = "yes"], - [ # Error out if the specified dir does not exist - OPAL_CHECK_WITHDIR([libevent-libdir], [$with_libevent_libdir], - [libevent.*]) - - AC_MSG_CHECKING([for external libevent in]) - AS_IF([test "$with_libevent" != "external" && test "$with_libevent" != "yes"], - [opal_event_dir=$with_libevent - AC_MSG_RESULT([$opal_event_dir]) - OPAL_CHECK_WITHDIR([libevent], [$opal_event_dir], - [include/event.h]) - AS_IF([test -z "$with_libevent_libdir" || test "$with_libevent_libdir" = "yes"], - [AC_MSG_CHECKING([for $with_libevent/lib64]) - AS_IF([test -d "$with_libevent/lib64"], - [opal_event_libdir_found=yes - AC_MSG_RESULT([found])], - [opal_event_libdir_found=no - AC_MSG_RESULT([not found])]) - AS_IF([test "$opal_event_libdir_found" = "yes"], - [opal_event_libdir="$with_libevent/lib64"], - [AC_MSG_CHECKING([for $with_libevent/lib]) - AS_IF([test -d "$with_libevent/lib"], - [AC_MSG_RESULT([found]) - opal_event_libdir="$with_libevent/lib"], - [AC_MSG_RESULT([not found]) - AC_MSG_WARN([Library directories were not found:]) - AC_MSG_WARN([ $with_libevent/lib64]) - AC_MSG_WARN([ $with_libevent/lib]) - AC_MSG_WARN([Please use --with-libevent-libdir to identify it.]) - AC_MSG_ERROR([Cannot continue])])])])], - [AC_MSG_RESULT([(default search paths)])]) - AS_IF([test ! -z "$with_libevent_libdir" && test "$with_libevent_libdir" != "yes"], - [opal_event_libdir="$with_libevent_libdir"]) - - opal_event_external_CPPFLAGS_save=$CPPFLAGS + OPAL_VAR_SCOPE_PUSH([opal_event_external_CPPFLAGS_save opal_event_external_CFLAGS_save opal_event_external_LDFLAGS_save opal_event_external_LIBS_save opal_event_dir opal_event_external_support]) + + # Make some processing below easier ($with_libevent==yes and + # $with_libevent==no has already been filtered out). + AS_IF([test "$with_libevent" = "external"], + [with_libevent=]) + + # Once we get to this point, $with_libevent is either: blank, a + # directory location, or "internal". + + # Check the value of $with_libevent_libdir. This macro safely + # handles "yes", "no", blank, and directory name values. + OPAL_CHECK_WITHDIR([libevent-libdir], [$with_libevent_libdir], + [libevent.*]) + + # Did the user want us to check for libevent in a specific location? + AC_MSG_CHECKING([for external libevent in]) + AS_IF([test -n "$with_libevent" && \ + test "$with_libevent" != "external" && \ + test "$with_libevent" != "internal" && \ + test "$with_libevent" != "yes" && \ + test "$with_libevent" != "no"], + [opal_event_dir=$with_libevent + AC_MSG_RESULT([$opal_event_dir]) + OPAL_CHECK_WITHDIR([libevent], [$opal_event_dir], + [include/event.h]) + AS_IF([test -z "$with_libevent_libdir" || test "$with_libevent_libdir" = "yes"], + [AC_MSG_CHECKING([for $with_libevent/lib64]) + AS_IF([test -d "$with_libevent/lib64"], + [opal_event_libdir_found=yes + AC_MSG_RESULT([found])], + [opal_event_libdir_found=no + AC_MSG_RESULT([not found])]) + AS_IF([test "$opal_event_libdir_found" = "yes"], + [opal_event_libdir="$with_libevent/lib64"], + [AC_MSG_CHECKING([for $with_libevent/lib]) + AS_IF([test -d "$with_libevent/lib"], + [AC_MSG_RESULT([found]) + opal_event_libdir="$with_libevent/lib"], + [AC_MSG_RESULT([not found]) + AC_MSG_WARN([Library directories were not found:]) + AC_MSG_WARN([ $with_libevent/lib64]) + AC_MSG_WARN([ $with_libevent/lib]) + AC_MSG_WARN([Please use --with-libevent-libdir to identify it.]) + AC_MSG_ERROR([Cannot continue])])])])], + [AC_MSG_RESULT([(default search paths)])]) + AS_IF([test ! -z "$with_libevent_libdir" && test "$with_libevent_libdir" != "yes"], + [opal_event_libdir="$with_libevent_libdir"]) + + AS_IF([test "$with_libevent" != "internal"], + [opal_event_external_CPPFLAGS_save=$CPPFLAGS opal_event_external_CFLAGS_save=$CFLAGS opal_event_external_LDFLAGS_save=$LDFLAGS opal_event_external_LIBS_save=$LIBS @@ -136,24 +121,41 @@ AC_DEFUN([MCA_opal_event_external_CONFIG],[ [opal_event_external_support=yes], [opal_event_external_support=no]) - # Ensure that this libevent has the symbol - # "evthread_set_lock_callbacks", which will only exist if - # libevent was configured with thread support. - LIBS="$opal_event_external_LDFLAGS $LIBS" - AC_CHECK_LIB([event], [evthread_set_lock_callbacks], - [], - [AC_MSG_WARN([External libevent does not have thread support]) - AC_MSG_WARN([Open MPI requires libevent to be compiled with]) - AC_MSG_WARN([thread support enabled]) - AC_MSG_ERROR([Cannot continue])]) - - AC_CHECK_LIB([event_pthreads], [evthread_use_pthreads], - [], - [AC_MSG_WARN([External libevent does not have thread support]) - AC_MSG_WARN([Open MPI requires libevent to be compiled with]) - AC_MSG_WARN([thread support enabled]) - AC_MSG_ERROR([Cannot continue])]) - + AS_IF([test "$opal_event_external_support" = "yes"], + [# Ensure that this libevent has the symbol + # "evthread_set_lock_callbacks", which will only exist if + # libevent was configured with thread support. + LIBS="$opal_event_external_LDFLAGS $LIBS" + AC_CHECK_LIB([event], [evthread_set_lock_callbacks], + [], + [AC_MSG_WARN([External libevent does not have thread support]) + AC_MSG_WARN([Open MPI requires libevent to be compiled with]) + AC_MSG_WARN([thread support enabled]) + opal_event_external_support=no])]) + + AS_IF([test "$opal_event_external_support" = "yes"], + [AC_CHECK_LIB([event_pthreads], [evthread_use_pthreads], + [], + [AC_MSG_WARN([External libevent does not have thread support]) + AC_MSG_WARN([Open MPI requires libevent to be compiled with]) + AC_MSG_WARN([thread support enabled]) + opal_event_external_support=no])]) + + AS_IF([test "$opal_event_external_support" = "yes" && + test -z "$with_libevent"], + [AC_MSG_CHECKING([if external libevent version is 2.0.21 or greater]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ +#if _EVENT_NUMERIC_VERSION < 0x02001500 +#error "libevent API version is less than 0x02001500" +#endif + ]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([external libevent version is less than internal version (2.0.21)]) + AC_MSG_WARN([using internal libevent]) + opal_hwloc_external_support=no])]) CPPFLAGS=$opal_event_external_CPPFLAGS_save CFLAGS=$opal_event_external_CFLAGS_save LDFLAGS=$opal_event_external_LDFLAGS_save @@ -171,12 +173,13 @@ AC_DEFUN([MCA_opal_event_external_CONFIG],[ # building with developer headers so that our headers can # be found. event_external_WRAPPER_EXTRA_LDFLAGS=$opal_event_external_LDFLAGS - event_external_WRAPPER_EXTRA_LIBS=$opal_event_external_LIBS - ]) + event_external_WRAPPER_EXTRA_LIBS=$opal_event_external_LIBS]) + +################################################################## # Done! AS_IF([test "$opal_event_external_support" = "yes"], - [ # If we configured successfully, set + [# If we configured successfully, set # OPAL_HAVE_WORKING_EVENTOPS to 1 (it's a calculated value # in the embedded Open MPI libevent, so we can only assume # what it is in the installed libevent :-\ ). @@ -184,6 +187,9 @@ AC_DEFUN([MCA_opal_event_external_CONFIG],[ OPAL_HAVE_WORKING_EVENTOPS=1 $1], [OPAL_HAVE_WORKING_EVENTOPS=0 + AS_IF([test "$with_libevent" != internal && test -n "$with_libevent"], + [AC_MSG_WARN([external libevent requested but cannot be built]) + AC_MSG_ERROR([Cannot continue.])]) $2]) OPAL_VAR_SCOPE_POP