Skip to content

Fix internal/external hwloc and libevent #5533

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 73 additions & 42 deletions opal/mca/event/libevent2022/configure.m4
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,18 @@
#
AC_DEFUN([MCA_opal_event_libevent2022_PRIORITY], [80])

#
# Force this component to compile in static-only mode
#
dnl
dnl Force this component to compile in static-only mode
dnl
AC_DEFUN([MCA_opal_event_libevent2022_COMPILE_MODE], [
AC_MSG_CHECKING([for MCA component $2:$3 compile mode])
$4="static"
AC_MSG_RESULT([$$4])
])

AC_DEFUN([MCA_opal_event_libevent2022_POST_CONFIG], [
AM_CONDITIONAL(OPAL_EVENT_HAVE_THREAD_SUPPORT, test "$enable_event_thread_support" = "yes")
AM_CONDITIONAL(OPAL_EVENT_HAVE_THREAD_SUPPORT,
[test "$enable_event_thread_support" = "yes"])
AS_IF([test "$1" = "1"],
[ # Build libevent/include/event2/event-config.h. If we
# don't do it here, then libevent's Makefile.am will build
Expand All @@ -34,8 +35,8 @@ AC_DEFUN([MCA_opal_event_libevent2022_POST_CONFIG], [
# copied from libevent's Makefile.am.

AC_CONFIG_COMMANDS([opal/mca/event/libevent2022/libevent/include/event2/event-config.h],
[libevent_basedir="opal/mca/event/libevent2022"
libevent_file="$libevent_basedir/libevent/include/event2/event-config.h"
[opal_event_libevent2022_basedir="opal/mca/event/libevent2022"
libevent_file="$opal_event_libevent2022_basedir/libevent/include/event2/event-config.h"
rm -f "$libevent_file.new"
cat > "$libevent_file.new" <<EOF
/* event2/event-config.h
Expand All @@ -55,7 +56,7 @@ EOF

sed -e 's/#define /#define _EVENT_/' \
-e 's/#undef /#undef _EVENT_/' \
-e 's/#ifndef /#ifndef _EVENT_/' < "$libevent_basedir/libevent/config.h" >> "$libevent_file.new"
-e 's/#ifndef /#ifndef _EVENT_/' < "$opal_event_libevent2022_basedir/libevent/config.h" >> "$libevent_file.new"
echo "#endif" >> "$libevent_file.new"

# Only make a new .h libevent_file if the
Expand All @@ -74,37 +75,59 @@ EOF

# Add some stuff to CPPFLAGS so that the rest of the source
# tree can be built
libevent_file=$libevent_basedir/libevent
libevent_file=$opal_event_libevent2022_basedir/libevent
CPPFLAGS="-I$OPAL_TOP_SRCDIR/$libevent_file -I$OPAL_TOP_SRCDIR/$libevent_file/include $CPPFLAGS"
AS_IF([test "$OPAL_TOP_BUILDDIR" != "$OPAL_TOP_SRCDIR"],
[CPPFLAGS="-I$OPAL_TOP_BUILDDIR/$libevent_file/include $CPPFLAGS"])
unset libevent_file
])
])

# MCA_event_libevent2022_CONFIG([action-if-can-compile],
# [action-if-cant-compile])
# ------------------------------------------------
dnl MCA_event_libevent2022_CONFIG([action-if-can-compile],
dnl [action-if-cant-compile])
dnl ------------------------------------------------
AC_DEFUN([MCA_opal_event_libevent2022_CONFIG],[
AC_CONFIG_FILES([opal/mca/event/libevent2022/Makefile])
opal_event_libevent2022_basedir="opal/mca/event/libevent2022"

# We know that the external event component will be configured
# before this one because of its priority. This component is only
# needed if the external component was not successful in selecting
# itself.
AC_MSG_CHECKING([if event external component succeeded])
AS_IF([test "$opal_event_external_support" = "yes"],
[AC_MSG_RESULT([yes])
AC_MSG_NOTICE([event:external succeeded, so this component will be skipped])
$2],
AC_MSG_NOTICE([event:external succeeded, so this component will be configured, but then will be skipped])
MCA_opal_event_libevent2022_FAKE_CONFIG($2)],
[AC_MSG_RESULT([no])
AC_MSG_NOTICE([event:external failed, so this component will be used])
MCA_opal_event_libevent2022_BACKEND_CONFIG($1, $2)])
MCA_opal_event_libevent2022_REAL_CONFIG($1, $2)])
])

AC_DEFUN([MCA_opal_event_libevent2022_BACKEND_CONFIG],[
OPAL_VAR_SCOPE_PUSH([CFLAGS_save CPPFLAGS_save libevent_file event_args libevent_happy])
dnl
dnl This macro is invoked when event:external is going to be used (and
dnl this component is *not* going to be used).
dnl
dnl $1: action if this component can compile
dnl (we still invoke $1 so that "make distclean" and friends will work)
dnl
AC_DEFUN([MCA_opal_event_libevent2022_FAKE_CONFIG],[
MCA_opal_event_libevent2022_SUB_CONFIGURE([], [], [])
AC_MSG_NOTICE([remember: event:external will be used; this component was configured, but will be skipped])
$1
])

AC_CONFIG_FILES([opal/mca/event/libevent2022/Makefile])
libevent_basedir="opal/mca/event/libevent2022"
dnl
dnl This macro has a bunch of side effects. It is only meant to be
dnl invoked when this component is going to be used (i.e., when
dnl event:external is *not* going to be used). If this macro is invoked
dnl when event:external is used, Terrible Things will happen.
dnl
dnl $1: action if this component can compile
dnl $2: action if this component cannot compile
dnl
AC_DEFUN([MCA_opal_event_libevent2022_REAL_CONFIG],[
OPAL_VAR_SCOPE_PUSH([CFLAGS_save CPPFLAGS_save libevent_file event_args libevent_happy])

CFLAGS_save="$CFLAGS"
CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS"
Expand Down Expand Up @@ -174,14 +197,14 @@ AC_DEFUN([MCA_opal_event_libevent2022_BACKEND_CONFIG],[

AC_MSG_RESULT([$event_args])

# Invoke the embedded configure script.
# We define "random" to be "opal_random" so that Libevent will not
# use random(3) internally (and potentially unexpectedly perturb
# values returned by rand(3) to the application).

CPPFLAGS="$CPPFLAGS -Drandom=opal_random"
OPAL_CONFIG_SUBDIR([$libevent_basedir/libevent],
[$event_args $opal_subdir_args 'CPPFLAGS=$CPPFLAGS'],
[libevent_happy="yes"], [libevent_happy="no"])
MCA_opal_event_libevent2022_SUB_CONFIGURE([$event_args],
[libevent_happy="yes"],
[libevent_happy="no"])
if test "$libevent_happy" = "no"; then
AC_MSG_WARN([Event library failed to configure])
AC_MSG_ERROR([Cannot continue])
Expand All @@ -199,26 +222,34 @@ AC_DEFUN([MCA_opal_event_libevent2022_BACKEND_CONFIG],[
# the value in the generated libevent/config.h (NOT
# libevent/include/event2/event-config.h!). Otherwise, set it to
# 0.
libevent_file=$libevent_basedir/libevent/config.h

# If we are not building the internal libevent, then indicate that
# this component should not be built. NOTE: we still did all the
# above configury so that all the proper GNU Autotools
# infrastructure is setup properly (e.g., w.r.t. SUBDIRS=libevent in
# this directory's Makefile.am, we still need the Autotools "make
# distclean" infrastructure to work properly).

AS_IF([test "$with_libevent" != "internal" && test -n "$with_libevent" && test "$with_libevent" != "yes"],
[AC_MSG_WARN([using an external libevent; disqualifying this component])
libevent_happy=no],

[AS_IF([test "$libevent_happy" = "yes" && test -r $libevent_file],
[OPAL_HAVE_WORKING_EVENTOPS=`grep HAVE_WORKING_EVENTOPS $libevent_file | awk '{print [$]3 }'`
$1],
[$2
OPAL_HAVE_WORKING_EVENTOPS=0])
]
)
libevent_file=$opal_event_libevent2022_basedir/libevent/config.h

AS_IF([test "$libevent_happy" = "yes" && test -r $libevent_file],
[OPAL_HAVE_WORKING_EVENTOPS=`grep HAVE_WORKING_EVENTOPS $libevent_file | awk '{print [$]3 }'`
$1],
[$2
OPAL_HAVE_WORKING_EVENTOPS=0])

OPAL_VAR_SCOPE_POP
])

dnl Call configure in the embedded libevent.
dnl
dnl We still do this so that all the proper GNU Autotools
dnl infrastructure is setup properly (e.g., w.r.t. SUBDIRS=libevent in
dnl this directorys Makefile.am, we still need the Autotools "make
dnl distclean" infrastructure to work properly).
dnl
dnl $1: extra configure arguments
dnl $2: action on success
dnl $3: action on failure
dnl
AC_DEFUN([MCA_opal_event_libevent2022_SUB_CONFIGURE],[
# We define "random" to be "opal_random" so that Libevent will not
# use random(3) internally (and potentially unexpectedly perturb
# values returned by rand(3) to the application).

OPAL_CONFIG_SUBDIR([$opal_event_libevent2022_basedir/libevent],
[$1 $opal_subdir_args 'CPPFLAGS=$CPPFLAGS'],
[$2], [$3])
])
36 changes: 18 additions & 18 deletions opal/mca/hwloc/hwloc201/configure.m4
Original file line number Diff line number Diff line change
Expand Up @@ -69,27 +69,23 @@ AC_DEFUN([MCA_opal_hwloc_hwloc201_POST_CONFIG],[
# MCA_hwloc_hwloc201_CONFIG([action-if-found], [action-if-not-found])
# --------------------------------------------------------------------
AC_DEFUN([MCA_opal_hwloc_hwloc201_CONFIG],[
# Hwloc needs to know if we have Verbs support
AC_REQUIRE([OPAL_CHECK_VERBS_DIR])

AC_CONFIG_FILES([opal/mca/hwloc/hwloc201/Makefile])

OPAL_VAR_SCOPE_PUSH([HWLOC_VERSION opal_hwloc_hwloc201_save_CPPFLAGS opal_hwloc_hwloc201_save_LDFLAGS opal_hwloc_hwloc201_save_LIBS opal_hwloc_hwloc201_save_cairo opal_hwloc_hwloc201_save_xml opal_hwloc_hwloc201_save_mode opal_hwloc_hwloc201_basedir opal_hwloc_hwloc201_file opal_hwloc_hwloc201_save_cflags CPPFLAGS_save LIBS_save opal_hwloc_external])

# We know that the external hwloc component will be configured
# before this one because of its priority. This component is only
# needed if the external component was not successful in selecting
# itself.
# itself. Print out a message explaining this.
AC_MSG_CHECKING([if hwloc external component succeeded])
AS_IF([test "$opal_hwloc_external_support" = "yes"],
[AC_MSG_RESULT([yes])
AC_MSG_NOTICE([hwloc:external succeeded, so this component will be skipped])
$2],
AC_MSG_NOTICE([hwloc:external succeeded, so this component will be configured, but then will be skipped])],
[AC_MSG_RESULT([no])
AC_MSG_NOTICE([hwloc:external failed, so this component will be used])
MCA_opal_hwloc_hwloc201_BACKEND_CONFIG($1, $2)])
])

AC_DEFUN([MCA_opal_hwloc_hwloc201_BACKEND_CONFIG],[
# Hwloc needs to know if we have Verbs support
AC_REQUIRE([OPAL_CHECK_VERBS_DIR])

AC_CONFIG_FILES([opal/mca/hwloc/hwloc201/Makefile])

OPAL_VAR_SCOPE_PUSH([HWLOC_VERSION opal_hwloc_hwloc201_save_CPPFLAGS opal_hwloc_hwloc201_save_LDFLAGS opal_hwloc_hwloc201_save_LIBS opal_hwloc_hwloc201_save_cairo opal_hwloc_hwloc201_save_xml opal_hwloc_hwloc201_save_mode opal_hwloc_hwloc201_basedir opal_hwloc_hwloc201_file opal_hwloc_hwloc201_save_cflags CPPFLAGS_save LIBS_save opal_hwloc_external])
AC_MSG_NOTICE([hwloc:external failed, so this component will be used])])

# default to this component not providing support
opal_hwloc_hwloc201_basedir=opal/mca/hwloc/hwloc201
Expand All @@ -99,8 +95,6 @@ AC_DEFUN([MCA_opal_hwloc_hwloc201_BACKEND_CONFIG],[
opal_hwloc_hwloc201_save_LDFLAGS=$LDFLAGS
opal_hwloc_hwloc201_save_LIBS=$LIBS

HWLOC_SET_SYMBOL_PREFIX([opal_hwloc201_])

# save XML or graphical options
opal_hwloc_hwloc201_save_cairo=$enable_cairo
opal_hwloc_hwloc201_save_xml=$enable_xml
Expand Down Expand Up @@ -143,6 +137,12 @@ AC_DEFUN([MCA_opal_hwloc_hwloc201_BACKEND_CONFIG],[
AS_IF([test -n "$opal_datatype_cuda_CPPFLAGS"],
[CPPFLAGS="$CPPFLAGS $opal_datatype_cuda_CPPFLAGS"])

# Only set the symbol prefix if this component is being used
# (i.e., if the external component is not being used).
AS_IF([test "$opal_hwloc_external_support" = "no"],
[HWLOC_SET_SYMBOL_PREFIX([opal_hwloc201_])])

# Do the bulk of the hwloc core setup
HWLOC_SETUP_CORE([opal/mca/hwloc/hwloc201/hwloc],
[AC_MSG_CHECKING([whether hwloc configure succeeded])
AC_MSG_RESULT([yes])
Expand Down Expand Up @@ -202,8 +202,8 @@ AC_DEFUN([MCA_opal_hwloc_hwloc201_BACKEND_CONFIG],[
# infrastructure is setup properly (e.g., w.r.t. SUBDIRS=hwloc in
# this directory's Makefile.am, we still need the Autotools "make
# distclean" infrastructure to work properly).
AS_IF([test "$opal_hwloc_external" = "yes"],
[AC_MSG_WARN([using an external hwloc; disqualifying this component])
AS_IF([test "$opal_hwloc_external_support" = "yes"],
[AC_MSG_NOTICE([using an external hwloc; disqualifying this component])
opal_hwloc_hwloc201_support=no],
[AC_DEFINE([HAVE_DECL_HWLOC_OBJ_OSDEV_COPROC], [1])
AC_DEFINE([HAVE_HWLOC_TOPOLOGY_DUP], [1])])
Expand Down