summaryrefslogtreecommitdiff
path: root/lib/erl_interface/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'lib/erl_interface/configure.ac')
-rw-r--r--lib/erl_interface/configure.ac383
1 files changed, 383 insertions, 0 deletions
diff --git a/lib/erl_interface/configure.ac b/lib/erl_interface/configure.ac
new file mode 100644
index 0000000000..e929073d88
--- /dev/null
+++ b/lib/erl_interface/configure.ac
@@ -0,0 +1,383 @@
+# -*- Autoconf -*-
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2000-2020. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# %CopyrightEnd%
+#
+# Process this file with autoconf to produce a configure script.
+# The starting point for this file was the output from 'autoscan'.
+
+# Strange, VxWorks HAVE_SENS not set here, see "ei_resolve.h"
+
+# Find the erl_interface version number and set m4 macro to it.
+# We do this because AC_INIT can't handle shell variables. Still broken.
+dnl m4_define(EI_VERSION,`grep EI_VSN ../vsn.mk | sed 's/^.*=[ ]*//'`)
+dnl m4_define(EI_VERSION,regexp(m4_include(VERSION),[version \([-.0-9A-Za-z]+\)],[\1]))
+
+AC_INIT
+AC_CONFIG_SRCDIR([include/ei.h])
+AC_PREREQ([2.71])
+
+m4_include([otp.m4])
+
+dnl How to set srcdir absolute is taken from the GNU Emacs distribution
+#### Make srcdir absolute, if it isn't already. It's important to
+#### avoid running the path through pwd unnecessary, since pwd can
+#### give you automounter prefixes, which can go away.
+case "${srcdir}" in
+ /* ) ;;
+ . )
+ ## We may be able to use the $PWD environment variable to make this
+ ## absolute. But sometimes PWD is inaccurate.
+ ## Make sure CDPATH doesn't affect cd (in case PWD is relative).
+ CDPATH=
+ if test "${PWD}" != "" && test "`(cd ${PWD} ; sh -c pwd)`" = "`pwd`" ;
+ then
+ srcdir="$PWD"
+ else
+ srcdir="`(cd ${srcdir}; pwd)`"
+ fi
+ ;;
+ * ) srcdir="`(cd ${srcdir}; pwd)`" ;;
+esac
+
+AC_CONFIG_AUX_DIR([${ERL_TOP}/make/autoconf])
+
+ERL_CANONICAL_SYSTEM_TYPE
+
+TARGET=$host
+AC_SUBST(TARGET)
+
+AC_CONFIG_HEADERS([src/$host/config.h:config.h.in])
+
+dnl ----------------------------------------------------------------------
+dnl Optional features
+dnl ----------------------------------------------------------------------
+
+# Use --disable-threads to force building single threaded libs even
+# if pthreads exists (for test purposes).
+AC_ARG_ENABLE(threads,
+[ --disable-threads use to only build single threaded libs],
+[ case "$enableval" in
+ no) threads_disabled=yes ;;
+ *) threads_disabled=no ;;
+ esac ],
+[ threads_disabled=maybe ])
+
+AC_ARG_ENABLE(mask-real-errno,
+[ --disable-mask-real-errno do not mask real 'errno'],
+[ case "$enableval" in
+ no) mask_real_errno=no ;;
+ *) mask_real_errno=yes ;;
+ esac ],
+[ mask_real_errno=yes ])
+
+
+dnl ----------------------------------------------------------------------
+dnl Checks for programs
+dnl ----------------------------------------------------------------------
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_EGREP
+dnl AC_PROG_LIBTOOL
+AC_PROG_RANLIB
+AC_CHECK_PROGS(LD, ld.sh)
+AC_CHECK_TOOL(LD, ld, '$(CC)')
+AC_SUBST(LD)
+
+AC_CHECK_SIZEOF(short)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(void *)
+AC_CHECK_SIZEOF(long long)
+
+if test $mask_real_errno = yes; then
+ AC_DEFINE(EI_HIDE_REAL_ERRNO, 1, [Define if 'errno' should not be exposed as is in 'erl_errno'])
+fi
+
+dnl We set EI_64BIT mode when long is 8 bytes, this makes things
+dnl work on windows and unix correctly
+if test $ac_cv_sizeof_long = 8; then
+ CFLAGS="$CFLAGS -DEI_64BIT"
+fi
+
+LM_HARDWARE_ARCH
+
+AC_MSG_CHECKING(for unaligned word access)
+case "$ARCH" in
+ x86|amd64)
+ AC_MSG_RESULT(yes: x86 or amd64)
+ AC_DEFINE(HAVE_UNALIGNED_WORD_ACCESS, 1, [Define if hw supports unaligned word access])
+ ;;
+ *)
+ AC_MSG_RESULT(no)
+ ;;
+esac
+
+AC_CHECK_TOOL(AR, ar, false)
+if test "$AR" = false; then
+ AC_MSG_ERROR([No 'ar' command found in PATH])
+fi
+
+dnl
+dnl We can live with Solaris /usr/ucb/install
+dnl
+case $host in
+ *-*-solaris*|free_source)
+ if test -x /usr/ucb/install; then
+ INSTALL="/usr/ucb/install -c"
+ fi
+ ;;
+ *)
+ ;;
+esac
+
+AC_PROG_INSTALL
+LM_PROG_INSTALL_DIR
+AC_SUBST(INSTALL_DIR)
+
+case $host_os in
+ darwin*)
+ dnl Need to preserve modification time on archives;
+ dnl otherwise, ranlib has to be run on archives
+ dnl again after installation.
+ INSTALL_DATA="$INSTALL_DATA -p";;
+ *)
+ ;;
+esac
+
+# Checks for libraries.
+AC_CHECK_LIB([nsl], [gethostbyname])
+AC_CHECK_LIB([socket], [getpeername])
+
+# Checks for header files.
+AC_CHECK_INCLUDES_DEFAULT
+
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h malloc.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/param.h sys/socket.h sys/select.h sys/time.h unistd.h sys/types.h sys/uio.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+# fixme AC_C_CONST & AC_C_VOLATILE needed for Windows?
+dnl AC_C_CONST
+dnl AC_C_VOLATILE
+AC_TYPE_UID_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_CHECK_HEADERS_ONCE([sys/time.h])
+
+AC_MSG_CHECKING([for socklen_t usability])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <sys/socket.h>]], [[socklen_t mylen;]])],[AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOCKLEN_T, [], [Define if you have the `socklen_t' type])],[AC_MSG_RESULT(no)])
+
+# Checks for library functions.
+AC_FUNC_ALLOCA
+dnl AC_FUNC_FORK
+# FIXME check that this isn't set in normal cases
+AC_PROG_GCC_TRADITIONAL
+# Check if malloc(0) is ok
+dnl AC_FUNC_MALLOC
+dnl AC_FUNC_REALLOC
+AC_FUNC_MEMCMP
+dnl AC_FUNC_SELECT_ARGTYPES
+
+dnl AC_FUNC_STRERROR_R
+dnl AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([dup2 gethostbyaddr gethostbyname \
+ gethostbyaddr_r \
+ gethostbyname_r gethostname writev \
+ gethrtime gettimeofday inet_ntoa memchr memmove memset select \
+ socket strchr strerror strrchr strstr uname sysconf])
+AC_CHECK_FUNC(res_gethostbyname, [],
+ AC_CHECK_LIB(resolv, res_gethostbyname)
+)
+AC_CHECK_FUNC(clock_gettime, [],
+ AC_CHECK_LIB(rt, clock_gettime)
+)
+
+# ---------------------------------------------------------------------------
+# We don't link against libgmp except for "make check"
+# but linking will also tell us that it is >= 4.1
+# ---------------------------------------------------------------------------
+
+AC_ARG_WITH(gmp,
+[ --with-gmp=PATH specify location of GNU MP include and lib
+ --with-gmp use GNU MP (will search for it)])
+
+# We don't just want any GNU MP version, we want 4.1 or later
+# that contain the import/export functions we need.
+
+AS_IF([test "x$with_gmp" = "xyes"],
+ [
+ for dir in /usr /usr/pkg /usr/local /usr/local/gmp /usr/lib/gmp /usr/gmp; do
+ AC_CHECK_HEADER($dir/include/gmp.h, ac_cv_gmp=yes, ac_cv_gmp=no)
+ if test $ac_cv_gmp = yes ; then
+ CFLAGS="$CFLAGS -I$dir/include -L$dir/lib"
+ AC_DEFINE(HAVE_GMP_H, [], [Define if you have "gmp.h"])
+ break
+ fi
+ done
+ if test $ac_cv_gmp = no ; then
+ AC_MSG_ERROR([No GNU MP installation found])
+ fi
+ AC_CHECK_LIB(gmp, __gmpz_export)
+ # FIXME return ERROR if no lib
+elif test "x$with_gmp" != "xno" -a -n "$with_gmp" ;then
+ # Option given with PATH to package
+ AC_MSG_CHECKING(for GNU MP)
+ if test ! -d "$with_gmp" ; then
+ AC_MSG_ERROR(Invalid path to option --with-gmp=PATH)
+ fi
+ AC_MSG_RESULT(yes)
+ CFLAGS="$CFLAGS -I$with_gmp/include -L$with_gmp/lib"
+ AC_DEFINE(HAVE_GMP_H, [], [Define if you have "gmp.h"])
+ AC_CHECK_LIB(gmp, __gmpz_export)
+ # FIXME return ERROR if no lib
+ ])
+
+LM_WINDOWS_ENVIRONMENT
+
+
+dnl
+dnl Threads
+dnl
+THR_LIBS=
+THR_DEFS=
+AC_SUBST(THR_LIBS)
+AC_SUBST(THR_DEFS)
+AC_SUBST(EI_THREADS)
+
+AS_CASE(["$threads_disabled"],
+
+ [no|maybe],
+ [
+ LM_CHECK_THR_LIB
+ ETHR_CHK_GCC_ATOMIC_OPS([])
+
+ case "$THR_LIB_NAME" in
+ "")
+ EI_THREADS="false"
+ # Fail if --enable-threads given and no threads found
+ if test "x$threads_disabled" = "xno"; then
+ AC_MSG_ERROR([No threads support found])
+ fi
+ ;;
+ win32_threads)
+ EI_THREADS="true"
+ THR_DEFS="$THR_DEFS -D_REENTRANT -D_WIN32_WINNT=0x0600 -DWINVER=0x0600"
+ ;;
+ pthread)
+ EI_THREADS="true"
+ ;;
+ *)
+ EI_THREADS="true"
+ AC_MSG_WARN([Unexpected thread library: $THR_LIB_NAME])
+ ;;
+ esac
+ ],
+
+ [yes],
+ [
+ # Threads disabled
+ EI_THREADS="false"
+ ])
+
+# ---------------------------------------------------------------------------
+# Warning flags to the C compiler
+# ---------------------------------------------------------------------------
+AC_SUBST(WFLAGS)
+
+AS_IF([test "x$GCC" = xyes],
+ [
+ # Treat certain GCC warnings as errors
+ LM_TRY_ENABLE_CFLAG([-Werror=return-type], [WERRORFLAGS])
+ WFLAGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
+ # check which GCC version
+ GCC_VERSION=`$CC -v 2>&1 | sed -n 's/gcc version //p'`
+ # GCC 3.3 and later supports C99 strict aliasing
+ # until all source is compliant with strict aliasing we disable it
+ case "$GCC_VERSION" in
+ 1*) ;;
+ 2*) ;;
+ 3.0*) ;;
+ 3.1*) ;;
+ 3.2*) ;;
+ *)
+ WFLAGS="$WFLAGS -fno-strict-aliasing";;
+ esac
+ CFLAGS="$WERRORFLAGS $CFLAGS"
+
+ # Use -fno-common for gcc, that is link error if multiple definitions of
+ # global variables are encountered. This is ISO C compliant.
+ # Until version 10, gcc has had -fcommon as default, which allows and merges
+ # such dubious duplicates.
+ LM_TRY_ENABLE_CFLAG([-fno-common], [CFLAGS])
+ ],
+ [
+ WFLAGS=""
+ WERRORFLAGS=""
+ ])
+
+# ---------------------------------------------------------------------------
+# FIXME We want to use libtool but until then....
+# ---------------------------------------------------------------------------
+
+AC_SUBST(LIB_CFLAGS)
+
+if test "X$host" = "Xwin32"; then
+ LIB_CFLAGS="$CFLAGS"
+else
+ if test "x$GCC" = xyes; then
+ # Remove all PIE stuff
+ CFLAGS=`echo $CFLAGS | sed 's/-f\(no-\)\?PIE//g'`
+ LDFLAGS=`echo $LDFLAGS | sed 's/-\(no-\)\?pie//g'`
+
+ LIB_CFLAGS="$CFLAGS -fPIC"
+ else
+ LIB_CFLAGS="$CFLAGS"
+ fi
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Enable -fsanitize= flags.
+dnl ----------------------------------------------------------------------
+
+m4_define(DEFAULT_SANITIZERS, [address,undefined])
+AC_ARG_ENABLE(
+ sanitizers,
+ AS_HELP_STRING(
+ [--enable-sanitizers@<:@=comma-separated list of sanitizers@:>@],
+ [Default=DEFAULT_SANITIZERS]),
+[
+case "$enableval" in
+ no) sanitizers= ;;
+ yes) sanitizers="-fsanitize=DEFAULT_SANITIZERS" ;;
+ *) sanitizers="-fsanitize=$enableval" ;;
+esac
+CFLAGS="$CFLAGS $sanitizers"
+LDFLAGS="$LDFLAGS $sanitizers"
+])
+
+# ---------------------------------------------------------------------------
+# XXX
+# ---------------------------------------------------------------------------
+
+
+AC_CONFIG_FILES([src/$host/Makefile:src/Makefile.in
+ src/$host/eidefs.mk:src/eidefs.mk.in
+ ])
+AC_OUTPUT