diff options
Diffstat (limited to 'lib/erl_interface/configure.ac')
-rw-r--r-- | lib/erl_interface/configure.ac | 383 |
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 |