# -*- shell-script -*-
#
# Copyright (c) 2004-2009 The Trustees of Indiana University and Indiana
#                         University Research and Technology
#                         Corporation.  All rights reserved.
# Copyright (c) 2004-2010 The University of Tennessee and The University
#                         of Tennessee Research Foundation.  All rights
#                         reserved.
# Copyright (c) 2004-2007 High Performance Computing Center Stuttgart,
#                         University of Stuttgart.  All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
#                         All rights reserved.
# Copyright (c) 2006-2022 Cisco Systems, Inc.  All rights reserved
# Copyright (c) 2006-2008 Sun Microsystems, Inc.  All rights reserved.
# Copyright (c) 2006-2017 Los Alamos National Security, LLC.  All rights
#                         reserved.
# Copyright (c) 2009      Oak Ridge National Labs.  All rights reserved.
# Copyright (c) 2011-2013 NVIDIA Corporation.  All rights reserved.
# Copyright (c) 2012      Oracle and/or its affiliates.  All rights reserved.
# Copyright (c) 2013      Mellanox Technologies, Inc.
#                         All rights reserved.
# Copyright (c) 2014-2022 Intel, Inc.  All rights reserved.
# Copyright (c) 2016-2022 IBM Corporation.  All rights reserved.
# Copyright (c) 2016-2018 Research Organization for Information Science
#                         and Technology (RIST). All rights reserved.
# Copyright (c) 2021-2024 Nanook Consulting  All rights reserved.
# Copyright (c) 2021      Amazon.com, Inc. or its affiliates.
#                         All Rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#


############################################################################
# Initialization, version number, and other random setup/init stuff
############################################################################

# Load in everything found by autogen.pl
m4_include([config/autogen_found_items.m4])

# We don't have the version number to put in here yet, and we can't
# call PMIX_GET_VERSION (etc.) before AC_INIT.  So use the shell
# version.

AC_INIT([pmix],[m4_normalize(esyscmd([config/pmix_get_version.sh VERSION --tarball]))],[https://github.com/openpmix/openpmix/issues],[pmix])
AC_PREREQ([2.69])
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_DIRS([./config config/oac])

AC_PROG_SED

# autotools expects to perform tests without interference
# from user-provided CFLAGS, particularly -Werror flags.
# Search for them here and cache any we find
PMIX_CFLAGS_cache=
PMIX_CFLAGS_pass=
for val in $CFLAGS; do
    if echo "$val" | grep -q -e "-W"; then
        PMIX_CFLAGS_cache="$PMIX_CFLAGS_cache $val";
    else
        PMIX_CFLAGS_pass="$PMIX_CFLAGS_pass $val";
    fi
done
CFLAGS=$PMIX_CFLAGS_pass

PMIX_CAPTURE_CONFIGURE_CLI([PMIX_CONFIGURE_CLI])

# Get our platform support file.  This has to be done very, very early
# because it twiddles random bits of autoconf
PMIX_LOAD_PLATFORM

PMIX_TOP_BUILDDIR="`pwd`"
AC_SUBST(PMIX_TOP_BUILDDIR)
top_buildir=`pwd`
cd "$srcdir"
PMIX_TOP_SRCDIR="`pwd`"
top_srcdir=$PMIX_TOP_SRCDIR
AC_SUBST(PMIX_TOP_SRCDIR)
cd "$PMIX_TOP_BUILDDIR"

AC_MSG_NOTICE([builddir: $PMIX_TOP_BUILDDIR])
AC_MSG_NOTICE([srcdir: $PMIX_TOP_SRCDIR])
if test "$PMIX_TOP_BUILDDIR" != "$PMIX_TOP_SRCDIR"; then
    AC_MSG_NOTICE([Detected VPATH build])
fi

# setup configure options (e.g., show_title and friends)
PMIX_CONFIGURE_SETUP

pmix_show_title "Configuring PMIx"

# This must be before AM_INIT_AUTOMAKE
AC_CANONICAL_TARGET

# Init automake
AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects no-define 1.13.4 tar-pax])

# SILENT_RULES is new in AM 1.11, but we require 1.13.4 or higher via
# autogen.  Limited testing shows that calling SILENT_RULES directly
# works in more cases than adding "silent-rules" to INIT_AUTOMAKE
# (even though they're supposed to be identical).  Shrug.
AM_SILENT_RULES([yes])

# set the language
AC_LANG([C])
# find NM
AC_PROG_GREP
LT_PATH_NM

# AC_USE_SYSTEM_EXTENSIONS will modify CFLAGS if nothing was in there
# beforehand.  We don't want that.  So if there was nothing in
# CFLAGS, put nothing back in there.
PMIX_VAR_SCOPE_PUSH([CFLAGS_save])
CFLAGS_save=$CFLAGS
AC_USE_SYSTEM_EXTENSIONS
AS_IF([test -z "$CFLAGS_save"], [CFLAGS=])
PMIX_VAR_SCOPE_POP

# Sanity checks
AC_DEFUN([PMIX_CHECK_DIR_FOR_SPACES],[
    dir="$1"
    article="$2"
    label="$3"

    AC_MSG_CHECKING([directory of $label])
    AC_MSG_RESULT([$dir])
    AS_IF([test -n "`echo $dir | grep ' '`"],
          [AC_MSG_WARN([This version of OpenPMIx does not support $article $label])
           AC_MSG_WARN([with a path that contains spaces])
           AC_MSG_ERROR([Cannot continue.])])
])

PMIX_VAR_SCOPE_PUSH(pmix_checkdir)
pmix_checkdir=`pwd`
PMIX_CHECK_DIR_FOR_SPACES([$pmix_checkdir], [a], [build tree])
PMIX_CHECK_DIR_FOR_SPACES([$prefix], [a], [prefix])
PMIX_CHECK_DIR_FOR_SPACES([$srcdir], [a], [source tree])
PMIX_VAR_SCOPE_POP

####################################################################
# Setup the configure header files
####################################################################

AH_TOP([/* -*- c -*-
 *
 * Copyright (c) 2004-2005 The Trustees of Indiana University.
 *                         All rights reserved.
 * Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
 *                         All rights reserved.
 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
 *                         University of Stuttgart.  All rights reserved.
 * Copyright (c) 2004-2005 The Regents of the University of California.
 *                         All rights reserved.
 * Copyright (c) 2013-2015 Intel, Inc. All rights reserved
 * Copyright (c) 2016      IBM Corporation.  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 PMIX_CONFIG_H
#define PMIX_CONFIG_H

#include "src/include/pmix_config_top.h"

])
AH_BOTTOM([
#include "src/include/pmix_config_bottom.h"
#endif /* PMIX_CONFIG_H */
])

############################################################################
# Setup Libtool
############################################################################

# 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])

#
# Enable static so that we have the --with tests done up here and can
# check for OS.  Save the values of $enable_static and $enable_shared
# before setting the defaults, because if the user specified
# --[en|dis]able-[static|shared] on the command line, they'll already
# be set.  In this way, we can tell if the user requested something or
# if the default was set here.
#

pmix_enable_shared="$enable_shared"
pmix_enable_static="$enable_static"
AS_IF([test ! -z "$enable_static" && test "$enable_static" = "yes"],
      [CFLAGS="$CFLAGS -fPIC"])

AC_ENABLE_SHARED([])
AC_DISABLE_STATIC([])
PMIX_SETUP_WRAPPER_INIT

# 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])

#
# Is this a developer copy?
#

if test -e $PMIX_TOP_SRCDIR/.git; then
    PMIX_DEVEL=1
else
    PMIX_DEVEL=0
fi
# check for Flex
AC_PROG_LEX(noyywrap)
if test "x$LEX" != xflex && test ! -e $PMIX_TOP_SRCDIR/src/util/keyval/keyval_lex.c; then
    AC_MSG_WARN([*** Could not find Flex on your system.])
    AC_MSG_WARN([*** Flex is required for developer builds of PMIx.])
    AC_MSG_WARN([*** Other versions of Lex are not supported.])
    AC_MSG_WARN([*** NOTE: If you are building from an official tarball])
    AC_MSG_WARN([*** (not the ones made by GitHub!) downloaded from the])
    AC_MSG_WARN([*** OpenPMIx web site, you do not need Flex.])
    AC_MSG_ERROR([Cannot continue])
fi

############################################################################
# Configuration options
############################################################################

# Define PMIx configure arguments
PMIX_DEFINE_ARGS
# Define some basic useful values
PMIX_BASIC_SETUP

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

LT_INIT()
LT_LANG([C])

############################################################################
# Setup the core
############################################################################

# Setup the pmix core
PMIX_SETUP_CORE()

# Run the AM_CONDITIONALs
PMIX_DO_AM_CONDITIONALS

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

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

# restore any user-provided Werror flags
AS_IF([test ! -z "$PMIX_CFLAGS_cache"], [CFLAGS="$CFLAGS $PMIX_CFLAGS_cache"])

# setup "picky" compiler options if enabled
PMIX_SETUP_PICKY_COMPILERS

#
# Delayed the substitution of CFLAGS and CXXFLAGS until now because
# they may have been modified throughout the course of this script.
#

AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)

pmix_show_title "Final compiler flags"

AC_MSG_CHECKING([final CPPFLAGS])
AC_MSG_RESULT([$CPPFLAGS])

AC_MSG_CHECKING([final CFLAGS])
AC_MSG_RESULT([$CFLAGS])

AC_MSG_CHECKING([final LDFLAGS])
AC_MSG_RESULT([$LDFLAGS])

AC_MSG_CHECKING([final LIBS])
AC_MSG_RESULT([$LIBS])

####################################################################
# -Werror for CI scripts
####################################################################

AC_ARG_ENABLE(werror,
    AS_HELP_STRING([--enable-werror],
                   [Treat compiler warnings as errors]),
[
    CFLAGS="$CFLAGS -Werror"
])

####################################################################
# no-undefined needed on some platform for shared lib
####################################################################

AC_MSG_CHECKING([if libtool needs -no-undefined flag to build shared libraries])
case "`uname`" in
  CYGWIN*|MINGW*|AIX*)
    ## Add in the -no-undefined flag to LDFLAGS for libtool.
    AC_MSG_RESULT([yes])
    LDFLAGS="$LDFLAGS -no-undefined"
    ;;
  *)
    ## Don't add in anything.
    AC_MSG_RESULT([no])
    ;;
esac

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

# PMIX_VERSION was setup by PMIX_SETUP_CORE above.

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

. $srcdir/VERSION
AC_SUBST([libpmix_so_version])
AC_SUBST([libpmi_so_version])
AC_SUBST([libpmi2_so_version])

AC_CONFIG_FILES(pmix_config_prefix[contrib/Makefile]
                pmix_config_prefix[examples/Makefile]
                pmix_config_prefix[test/Makefile]
                pmix_config_prefix[test/test_v2/Makefile]
                pmix_config_prefix[test/python/Makefile]
                pmix_config_prefix[test/simple/Makefile]
                pmix_config_prefix[test/sshot/Makefile]
                pmix_config_prefix[test/util/Makefile]
                pmix_config_prefix[docs/Makefile]
                pmix_config_prefix[maint/pmix.pc])

pmix_show_title "Configuration complete"

AC_OUTPUT

PMIX_SUMMARY_PRINT
