# -*- Autoconf -*- # %CopyrightBegin% # # Copyright Ericsson AB 2000-2018. 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() 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([$srcdir/src/auxdir]) if test "X$host" != "Xfree_source" -a "X$host" != "Xwin32"; then AC_CANONICAL_HOST else host_os=win32 fi TARGET=$host AC_SUBST(TARGET) AC_CONFIG_HEADER([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 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_HEADER_STDC 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_HEADER_TIME AC_MSG_CHECKING([for socklen_t usability]) AC_TRY_COMPILE([#include #include ], [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_TYPE_SIGNAL 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. if test "x$with_gmp" = "xyes" ;then 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 fi LM_WINDOWS_ENVIRONMENT dnl dnl Threads dnl THR_LIBS= THR_DEFS= AC_SUBST(THR_LIBS) AC_SUBST(THR_DEFS) AC_SUBST(EI_THREADS) case "$threads_disabled" in 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_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" ;; esac # --------------------------------------------------------------------------- # Warning flags to the C compiler # --------------------------------------------------------------------------- AC_SUBST(WFLAGS) if test "x$GCC" = xyes; then # 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" else WFLAGS="" WERRORFLAGS="" fi # --------------------------------------------------------------------------- # 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 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_OUTPUT( src/$host/Makefile:src/Makefile.in src/$host/eidefs.mk:src/eidefs.mk.in )