##*****************************************************************************
#  $Id$
##*****************************************************************************
#  AUTHOR:
#    Morris Jette <jette1@llnl.gov>
#
#  SYNOPSIS:
#    X_AC_AFFINITY
#
#  DESCRIPTION:
#    Test for various task affinity functions and set the definitions.
#
#  WARNINGS:
#    This macro must be placed after AC_PROG_CC or equivalent.
##*****************************************************************************

AC_DEFUN([X_AC_AFFINITY], [

# Test if sched_setaffinity function exists and argument count (it can vary)
  AC_CHECK_FUNCS(sched_setaffinity, [have_sched_setaffinity=yes])

  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE
    #include <sched.h>]], [[cpu_set_t mask;
    sched_getaffinity(0, sizeof(cpu_set_t), &mask);]])],[AC_DEFINE(SCHED_GETAFFINITY_THREE_ARGS, 1,
             [Define to 1 if sched_getaffinity takes three arguments.])],[])

  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE
    #include <sched.h>]], [[cpu_set_t mask;
    sched_getaffinity(0, &mask);]])],[AC_DEFINE(SCHED_GETAFFINITY_TWO_ARGS, 1,
             [Define to 1 if sched_getaffinity takes two arguments.])],[])

#
# Test for NUMA memory afffinity functions and set the definitions
#
  AC_CHECK_LIB([numa],
        [numa_available],
        [ac_have_numa=yes; NUMA_LIBS="-lnuma"])

  AC_SUBST(NUMA_LIBS)
  AM_CONDITIONAL(HAVE_NUMA, test "x$ac_have_numa" = "xyes")
  if test "x$ac_have_numa" = "xyes"; then
    AC_DEFINE(HAVE_NUMA, 1, [define if numa library installed])
    CFLAGS="-DNUMA_VERSION1_COMPATIBILITY $CFLAGS"
  else
    AC_MSG_WARN([Unable to locate NUMA memory affinity functions])
  fi

#
# Test for cpuset directory
#
  cpuset_default_dir="/dev/cpuset"
  AC_ARG_WITH([cpusetdir],
              AS_HELP_STRING(--with-cpusetdir=PATH,specify path to cpuset directory default is /dev/cpuset),
              [try_path=$withval])
  for cpuset_dir in $try_path "" $cpuset_default_dir; do
    if test -d "$cpuset_dir" ; then
      AC_DEFINE_UNQUOTED(CPUSET_DIR, "$cpuset_dir", [Define location of cpuset directory])
      have_sched_setaffinity=yes
      break
    fi
  done

#
# Set HAVE_SCHED_SETAFFINITY if any task affinity supported
AM_CONDITIONAL(HAVE_SCHED_SETAFFINITY, test "x$have_sched_setaffinity" = "xyes")
])

