# -*- shell-script -*-
#
# Copyright © 2009      CNRS
# Copyright © 2009-2018 Inria.  All rights reserved.
# Copyright © 2009, 2011-2012      Université Bordeaux
# Copyright © 2009-2014 Cisco Systems, Inc.  All rights reserved.
#
# See COPYING in top-level directory.
#
# Additional copyrights may follow
#
# $HEADER$
#

####################################################################
# Autoconf, Automake, and Libtool bootstrapping
####################################################################

AC_INIT([hwloc],
        [m4_normalize(esyscmd([config/hwloc_get_version.sh VERSION --version]))],
        [http://github.com/open-mpi/hwloc/issues], [hwloc])
AC_PREREQ(2.63)
AC_CONFIG_AUX_DIR(./config)
# Note that this directory must *exactly* match what was specified via
# -I in ACLOCAL_AMFLAGS in the top-level Makefile.am.
AC_CONFIG_MACRO_DIR(./config)

cat <<EOF

###
### Configuring hwloc distribution tarball
### Startup tests
###
EOF

# This must be before AM_INIT_AUTOMAKE
AC_CANONICAL_TARGET

# Init automake
AM_INIT_AUTOMAKE([1.11 dist-bzip2 subdir-objects foreign tar-ustar parallel-tests -Wall -Werror])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

# We want new Libtool.  None of that old stuff.  Pfft.
m4_ifdef([LT_PREREQ], [],
	 [m4_fatal([libtool version 2.2.6 or higher is required], [63])])
LT_PREREQ([2.2.6])

AC_LANG([C])
AC_USE_SYSTEM_EXTENSIONS

####################################################################
# Setup the configure-results header file
####################################################################

AH_TOP([/* -*- c -*-
 *
 * Copyright © 2009, 2011, 2012 CNRS, inria., Université Bordeaux  All rights reserved.
 * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
 * $COPYRIGHT$
 *
 * Additional copyrights may follow
 *
 * $HEADER$
 *
 * This file is automatically generated by configure.  Edits will be lost
 * the next time you run configure!
 */

#ifndef HWLOC_CONFIGURE_H
#define HWLOC_CONFIGURE_H
])
AH_BOTTOM([
#endif /* HWLOC_CONFIGURE_H */
])

####################################################################
# Setup C compiler
####################################################################

CFLAGS_save="$CFLAGS"
AC_PROG_CC
AC_PROG_CXX
AM_PROG_CC_C_O
CFLAGS="$CFLAGS_save"
# This did not exist pre AM 1.11.x (where x is somewhere >0 and <3),
# but it is necessary in AM 1.12.x.
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])

AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
AS_IF([test -z "$CC_FOR_BUILD"],[
    AC_SUBST([CC_FOR_BUILD], [$CC])
])

####################################################################
# CLI arguments
####################################################################

# Define hwloc's configure arguments
HWLOC_DEFINE_ARGS

# If debug mode, add -g
AS_IF([test "$hwloc_debug" = "1"],
      [CFLAGS="$CFLAGS -g"])

# If the user didn't specifically ask for embedding mode, default to
# standalone mode
AS_IF([test "$enable_embedded_mode" != "yes"],
      [AS_IF([test ! -d "$srcdir/doc"],
             [AC_MSG_WARN([The hwloc source tree looks incomplete for a standalone])
              AC_MSG_WARN([build.  Perhaps this hwloc tree is intended for an embedded])
              AC_MSG_WARN([build?  Try using the --enable-embedded-mode switch.])
              AC_MSG_ERROR([Cannot build standalone hwloc])],
             [HWLOC_BUILD_STANDALONE])])

####################################################################
# Setup for the hwloc API
####################################################################

# Setup the hwloc core
HWLOC_SETUP_CORE([], [], [AC_MSG_ERROR([Cannot build hwloc core])], [1])

# Setup hwloc's docs, utils, and tests
AS_IF([test "$hwloc_mode" = "standalone"],
      [HWLOC_SETUP_DOCS
       HWLOC_SETUP_UTILS
       HWLOC_SETUP_TESTS])

cat <<EOF

###
### Performing final hwloc configuration
###
EOF

# Run the AM_CONDITIONALs
HWLOC_DO_AM_CONDITIONALS

####################################################################
# Version information
####################################################################

# HWLOC_VERSION was setup by HWLOC_SETUP_CORE above.

# Make configure depend on the VERSION file, since it's used in AC_INIT
AC_SUBST([CONFIGURE_DEPENDENCIES], ['$(top_srcdir)/VERSION'])

# Override/fixup the version numbers set by AC_INIT, since on
# developer builds, there's no good way to know what the version is
# before running configure :(.  We only use the base version number
# for the version set in AC_INIT.  This will always match reality
# because we add the VERSION file (the only way to change the
# major.minor.release{greek}) into the configure dependencies.

PACKAGE_VERSION="$HWLOC_VERSION"
PACKAGE_STRING="${PACKAGE_NAME} ${PACKAGE_VERSION}"
VERSION="${PACKAGE_VERSION}"

# For standalone configurations, we also include a .so version number.

. $srcdir/VERSION
AC_SUBST([libhwloc_so_version])

####################################################################
# Final output
####################################################################

# Set the final flags
CFLAGS="$HWLOC_EMBEDDED_CFLAGS $CFLAGS"
CPPFLAGS="$HWLOC_EMBEDDED_CPPFLAGS $CPPFLAGS"
LIBS="$HWLOC_EMBEDDED_LIBS $LIBS"

# Setup libtool, but disable C++, F77, Java and Windows Resource
# Compiler support -- we don't need that stuff.
AM_ENABLE_SHARED
AM_DISABLE_STATIC
AM_PROG_LIBTOOL([dlopen win32-dll])
LT_LANG([C])

# Party on
AC_OUTPUT

# Warn if we didn't have pkg-config
if test "x$PKG_CONFIG" = x; then
  cat << EOF

************************************************************************
Could not detect/enable some features such as libxml2 and Cairo support
because pkg-config isn't available.
************************************************************************
EOF
fi

# Show which optional support we'll be building
hwloc_xml_status=basic
AS_IF([test "$hwloc_libxml2_happy" = "yes"], [hwloc_xml_status=full])
hwloc_cairo_status=$hwloc_cairo_happy
AS_IF([test "$enable_embedded_mode" = "yes"], [hwloc_cairo_status="no (disabled in embedded mode)"])

# Prepare the I/O summary
hwloc_probeio_list=
if test "x$hwloc_pci_happy" = "xyes" -o "x$hwloc_linuxpci_happy" = "xyes"; then
  test "x$hwloc_pci_happy" = "xyes" && hwloc_probepci_list="$hwloc_pci_lib"
  test "x$hwloc_pci_happy$hwloc_linuxpci_happy" = "xyesyes" && hwloc_probepci_list="${hwloc_probepci_list}+"
  test "x$hwloc_linuxpci_happy" = "xyes" && hwloc_probepci_list="${hwloc_probepci_list}linux"
  hwloc_probeio_list="$hwloc_probeio_list PCI($hwloc_probepci_list)"
fi
test "x$hwloc_opencl_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list OpenCL"
test "x$hwloc_have_cudart" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list CUDA"
test "x$hwloc_nvml_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list NVML"
test "x$hwloc_gl_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list GL"
# if anything but PCI, that anything will be useless
test "x$hwloc_pci_happy" != "xyes" && test "x$hwloc_linuxpci_happy" != "xyes" \
 && test "x$hwloc_probeio_list" != "x" && hwloc_probeio_list="$hwloc_probeio_list (cannot work without PCI)"
# if nothing, say "no"
test "x$hwloc_probeio_list" = "x" && hwloc_probeio_list=" no"

# Beginning of generic support
cat <<EOF

-----------------------------------------------------------------------------
Hwloc optional build support status (more details can be found above):

Probe / display I/O devices:$hwloc_probeio_list
Graphical output (Cairo):    $hwloc_cairo_status
XML input / output:          $hwloc_xml_status
EOF

# Linux specific support
AS_IF([test "$hwloc_linux" = "yes"], [cat <<EOF
libnuma memory support:      $hwloc_linux_libnuma_happy
EOF])

# Plugin support
hwloc_plugin_summary=$hwloc_have_plugins
test "x$hwloc_plugin_components" != "x" && hwloc_plugin_summary="yes ("`echo $hwloc_plugin_components`")" # echo removes the starting space
cat <<EOF
Plugin support:              $hwloc_plugin_summary
EOF

# End of generic support
cat <<EOF
-----------------------------------------------------------------------------

EOF
