#************************************************************************** #* * #* OCaml * #* * #* Sebastien Hinderer, projet Gallium, INRIA Paris * #* * #* Copyright 2018 Institut National de Recherche en Informatique et * #* en Automatique. * #* * #* All rights reserved. This file is distributed under the terms of * #* the GNU Lesser General Public License version 2.1, with the * #* special exception on linking described in the file LICENSE. * #* * #************************************************************************** # Process this file with autoconf to produce a configure script. # Require Autoconf 2.69 for repeatability in CI AC_PREREQ([2.69]) AC_INIT([OCaml], m4_esyscmd([head -n1 VERSION | tr -d '\r\n']), [caml-list@inria.fr], [ocaml], [http://www.ocaml.org]) AC_MSG_NOTICE([Configuring OCaml version AC_PACKAGE_VERSION]) # Configuration variables ## Command-line arguments passed to configure CONFIGURE_ARGS="$*" # Command-line tools section of the Unix manual programs_man_section=1 # Library section of the Unix manual libraries_man_section=3 # Command to build executalbes # In general this command is supposed to use the CFLAGs-related variables # ($OC_CFLAGS and $CFLAGS), but at the moment they are not taken into # account on Windows, because flexlink, which is used to build # executables on this platform, can not handle them. mkexe="\$(CC) \$(OC_CFLAGS) \$(CFLAGS) \$(OC_LDFLAGS)" # Flags for building executable files with debugging symbols mkexedebugflag="-g" common_cflags="" common_cppflags="" internal_cflags="" internal_cppflags="" ocamlc_cflags="" ocamlc_cppflags="" oc_ldflags="" with_sharedlibs=true ostype="Unix" iflexdir="" SO="so" toolchain="cc" profinfo=false profinfo_width=0 extralibs= instrumented_runtime=false instrumented_runtime_ldlibs="" # Information about the package ## Source directory AC_CONFIG_SRCDIR([runtime/interp.c]) ## Directory containing auxiliary scripts used during build AC_CONFIG_AUX_DIR([build-aux]) ## Output variables AC_SUBST([CONFIGURE_ARGS]) AC_SUBST([native_compiler]) AC_SUBST([VERSION], [AC_PACKAGE_VERSION]) AC_SUBST([CC]) # Note: This is present for the flexdll bootstrap where it exposed as the old # TOOLPREF variable. It would be better if flexdll where updated to require # WINDRES instead. AC_SUBST([DIRECT_CPP]) AC_SUBST([ac_tool_prefix]) AC_SUBST([exeext]) AC_SUBST([OBJEXT]) AC_SUBST([libext]) AC_SUBST([S]) AC_SUBST([SO]) AC_SUBST([arch]) AC_SUBST([arch64]) AC_SUBST([model]) AC_SUBST([system]) AC_SUBST([systhread_support]) AC_SUBST([unix_or_win32]) AC_SUBST([unixlib]) AC_SUBST([outputexe]) AC_SUBST([outputobj]) AC_SUBST([syslib]) AC_SUBST([extralibs]) AC_SUBST([programs_man_section]) AC_SUBST([libraries_man_section]) AC_SUBST([fpic]) AC_SUBST([mkexe]) AC_SUBST([mkexedebugflag]) AC_SUBST([ccomptype]) AC_SUBST([toolchain]) AC_SUBST([oc_cflags]) AC_SUBST([oc_cppflags]) AC_SUBST([oc_ldflags]) AC_SUBST([bytecclibs]) AC_SUBST([nativecclibs]) AC_SUBST([ocamlc_cflags]) AC_SUBST([ocamlc_cppflags]) AC_SUBST([iflexdir]) AC_SUBST([long_shebang]) AC_SUBST([shebangscripts]) AC_SUBST([AR]) AC_SUBST([RANLIB]) AC_SUBST([RANLIBCMD]) AC_SUBST([mklib]) AC_SUBST([supports_shared_libraries]) AC_SUBST([natdynlink]) AC_SUBST([natdynlinkopts]) AC_SUBST([cmxs]) AC_SUBST([debug_runtime]) AC_SUBST([instrumented_runtime]) AC_SUBST([has_monotonic_clock]) AC_SUBST([otherlibraries]) AC_SUBST([cc_has_debug_prefix_map]) AC_SUBST([as_has_debug_prefix_map]) AC_SUBST([with_debugger]) # TODO: rename this variable AC_SUBST([with_camltex]) AC_SUBST([ocamldoc]) AC_SUBST([ocamltest]) AC_SUBST([pthread_link]) AC_SUBST([x_includes]) AC_SUBST([x_libraries]) AC_SUBST([ASPP]) AC_SUBST([endianness]) AC_SUBST([AS]) AC_SUBST([asm_cfi_supported]) AC_SUBST([sharedlib_cflags]) AC_SUBST([rpath]) AC_SUBST([mksharedlib]) AC_SUBST([mkmaindll]) AC_SUBST([mksharedlibrpath]) AC_SUBST([install_bytecode_programs]) AC_SUBST([install_source_artifacts]) AC_SUBST([profinfo]) AC_SUBST([profinfo_width]) AC_SUBST([frame_pointers]) AC_SUBST([flambda]) AC_SUBST([flambda_invariants]) AC_SUBST([max_testsuite_dir_retries]) AC_SUBST([windows_unicode]) AC_SUBST([flat_float_array]) AC_SUBST([function_sections]) AC_SUBST([afl]) AC_SUBST([force_safe_string]) AC_SUBST([default_safe_string]) AC_SUBST([flexdll_chain]) AC_SUBST([flexlink_flags]) AC_SUBST([PACKLD]) AC_SUBST([stdlib_manpages]) AC_SUBST([compute_deps]) AC_SUBST([naked_pointers]) AC_SUBST([naked_pointers_checker]) ## Generated files AC_CONFIG_FILES([Makefile.build_config]) AC_CONFIG_FILES([Makefile.config]) AC_CONFIG_FILES([tools/eventlog_metadata]) AC_CONFIG_HEADERS([runtime/caml/m.h]) AC_CONFIG_HEADERS([runtime/caml/s.h]) # Checks for system types AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_CANONICAL_TARGET AS_CASE([$host], [*-pc-windows], [CC=cl ccomptype=msvc S=asm SO=dll outputexe=-Fe syslib='$(1).lib'], [ccomptype=cc S=s SO=so outputexe='-o $(EMPTY)' syslib='-l$(1)']) # Environment variables that are taken into account AC_ARG_VAR([AS], [which assembler to use]) AC_ARG_VAR([ASPP], [which assembler (with preprocessor) to use]) AC_ARG_VAR([PARTIALLD], [how to build partial (relocatable) object files]) # Command-line arguments to configure AC_ARG_ENABLE([debug-runtime], [AS_HELP_STRING([--disable-debug-runtime], [do not build runtime with debugging support])]) AC_ARG_ENABLE([debugger], [AS_HELP_STRING([--enable-debugger], [build the debugger @<:@default=auto@:>@])], [], [enable_debugger=auto]) AC_ARG_ENABLE([dependency-generation], [AS_HELP_STRING([--disable-dependency-generation], [do not compute dependency information for C sources])], [], [enable_dependency_generation=auto]) AC_ARG_VAR([DLLIBS], [which libraries to use (in addition to -ldl) to load dynamic libs]) AC_ARG_ENABLE([instrumented-runtime], [AS_HELP_STRING([--enable-instrumented-runtime], [build the instrumented runtime @<:@default=auto@:>@])], [], [enable_instrumented_runtime=auto]) AC_ARG_ENABLE([vmthreads], [], [AC_MSG_ERROR([The vmthreads library is no longer available. \ It was deleted in OCaml 4.09.])], []) AC_ARG_ENABLE([systhreads], [AS_HELP_STRING([--disable-systhreads], [disable the Win32/POSIX threads library])]) AC_ARG_ENABLE([graph-lib], [], [AC_MSG_ERROR([The graphics library is no longer distributed with OCaml \ since version 4.09. It is now distributed as a separate "graphics" package: \ https://github.com/ocaml/graphics])], []) AC_ARG_ENABLE([str-lib], [AS_HELP_STRING([--disable-str-lib], [do not build the str library])]) AC_ARG_ENABLE([unix-lib], [AS_HELP_STRING([--disable-unix-lib], [do not build the unix library])]) AC_ARG_ENABLE([bigarray-lib], [AS_HELP_STRING([--disable-bigarray-lib], [do not build the legacy separate bigarray library])]) AC_ARG_ENABLE([ocamldoc], [AS_HELP_STRING([--disable-ocamldoc], [do not build the ocamldoc documentation system])], [], [ocamldoc=auto]) AC_ARG_ENABLE([ocamltest], [AS_HELP_STRING([--disable-ocamltest], [do not build the ocamltest driver])]) AC_ARG_ENABLE([frame-pointers], [AS_HELP_STRING([--enable-frame-pointers], [use frame pointers in runtime and generated code])]) AC_ARG_ENABLE([naked-pointers], [AS_HELP_STRING([--disable-naked-pointers], [do not allow naked pointers])]) AC_ARG_ENABLE([naked-pointers-checker], [AS_HELP_STRING([--enable-naked-pointers-checker], [enable the naked pointers checker])]) AC_ARG_ENABLE([cfi], [AS_HELP_STRING([--disable-cfi], [disable the CFI directives in assembly files])]) AC_ARG_ENABLE([installing-source-artifacts], [AS_HELP_STRING([--enable-installing-source-artifacts], [install *.cmt* and *.mli files])]) AC_ARG_ENABLE([installing-bytecode-programs], [AS_HELP_STRING([--enable-installing-bytecode-programs], [also install the bytecode versions of programs])]) AC_ARG_ENABLE([native-compiler], [AS_HELP_STRING([--disable-native-compiler], [do not build the native compiler])]) AC_ARG_ENABLE([flambda], [AS_HELP_STRING([--enable-flambda], [enable flambda optimizations])]) AC_ARG_ENABLE([flambda-invariants], [AS_HELP_STRING([--enable-flambda-invariants], [enable invariants checks in flambda])]) AC_ARG_WITH([target-bindir], [AS_HELP_STRING([--with-target-bindir], [location of binary programs on target system])]) AC_ARG_ENABLE([reserved-header-bits], [AS_HELP_STRING([--enable-reserved-header-bits=BITS], [reserve BITS (between 0 and 31) bits in block headers for profiling info])], [AS_CASE([$enable_reserved_header_bits], [0], [with_profinfo=false profinfo_width=0], [[[1-9]]|[[1-2]][[0-9]]|3[[0-1]]], [with_profinfo=true profinfo_width="$enable_reserved_header_bits"], [AC_MSG_ERROR([invalid argument to --enable-reserved-header-bits])])]) AC_ARG_ENABLE([stdlib-manpages], [AS_HELP_STRING([--disable-stdlib-manpages], [do not build or install the library man pages])]) AC_ARG_ENABLE([warn-error], [AS_HELP_STRING([--enable-warn-error], [treat C compiler warnings as errors])]) AC_ARG_VAR([WINDOWS_UNICODE_MODE], [how to handle Unicode under Windows: ansi, compatible]) # There are two configure-time string safety options, # --(enable|disable)-force-safe-string and # DEFAULT_STRING=safe|unsafe that # interact with a compile-time (un)safe-string option. # # If --enable-force-safe-string is set at configure time, then the compiler # will always enforce that string and bytes are distinct: the # compile-time -unsafe-string option is disabled. This lets us # assume pervasive string immutability, for code optimizations and # in the C layer. # # If --disable-force-safe-string is set at configure-time, the compiler # will use the compile-time (un)safe-string option to decide whether # string and bytes are compatible on a per-file basis. The # configuration variable DEFAULT_STRING=safe|unsafe decides which # setting will be chosen by default, if no compile-time option is # explicitly passed. # # The configure-time behavior of OCaml 4.05 and older was equivalent # to --disable-force-safe-string DEFAULT_STRING=unsafe. With OCaml 4.06 # and older was equivalent to --disable-force-safe-string DEFAULT_STRING=safe. # With OCaml 4.10 and later use --enable-force-safe-string DEFAULT_STRING=safe. # We expect the --disable-force-safe-string and DEFAULT_STRING=unsafe options # to be removed in the future. AC_ARG_ENABLE([force-safe-string], [AS_HELP_STRING([--disable-force-safe-string], [do not force strings to be safe])]) AC_ARG_VAR([DEFAULT_STRING], [whether strings should be safe (default) or unsafe]) AC_ARG_ENABLE([flat-float-array], [AS_HELP_STRING([--disable-flat-float-array], [do not use flat float arrays])]) AC_ARG_ENABLE([function-sections], [AS_HELP_STRING([--disable-function-sections], [do not emit each function in a separate section])], [], [enable_function_sections=auto]) AC_ARG_WITH([afl], [AS_HELP_STRING([--with-afl], [use the AFL fuzzer])]) AS_IF([test x"$enable_unix_lib" = "xno"], [AS_IF([test x"$enable_debugger" = "xyes"], [AC_MSG_ERROR([replay debugger requires the unix library])], [enable_debugger="no"]) AS_IF([test x"$enable_bigarray_lib" = "xyes"], [AC_MSG_ERROR([legacy bigarray library requires the unix library])])]) AS_IF([test x"$enable_unix_lib" = "xno" -o x"$enable_str_lib" = "xno"], [AS_IF([test x"$enable_ocamldoc" = "xyes"], [AC_MSG_ERROR([ocamldoc requires the unix and str libraries])], [enable_ocamldoc="no" with_camltex=""])], [with_camltex="true"]) # Initialization of libtool # Allow the MSVC linker to be found even if ld isn't installed. # User-specified LD still takes precedence. AC_CHECK_TOOLS([LD],[ld link]) # libtool expects host_os=mingw for native Windows # Also, it has been observed that, on some platforms (e.g. msvc) LT_INIT # alters the CFLAGS variable, so we save its value before calling the macro # and restore it after the call old_host_os=$host_os AS_IF([test x"$host_os" = "xwindows"],[host_os=mingw]) saved_CFLAGS="$CFLAGS" LT_INIT CFLAGS="$saved_CFLAGS" host_os=$old_host_os AS_CASE([$host], [*-pc-windows], [AC_CHECK_TOOLS( [DEP_CC], [$DEP_CC gcc cc x86_64-w64-mingw32-gcc i686-w64-mingw32-gcc], [false])], [DEP_CC="$CC"]) AS_CASE([$enable_dependency_generation], [yes], [AS_IF([test "$DEP_CC" = "false"], [AC_MSG_ERROR(m4_normalize([The MSVC ports cannot generate dependency information. Install gcc (or another CC-like compiler)]))], [compute_deps=true])], [no], [compute_deps=false], [AS_IF([test -e .git], [AS_IF([test "$DEP_CC" = "false"], [compute_deps=false], [compute_deps=true])], [compute_deps=false])]) # Extracting information from libtool's configuration AS_IF([test -n "$RANLIB" ], [RANLIBCMD="$RANLIB"], [RANLIB="$AR rs"; RANLIBCMD=""] ) AS_CASE([$host], # In config/Makefile.mingw*, we had: # TARGET=i686-w64-mingw32 and x86_64-w64-mingw32 # TOOLPREF=$(TARGET)- # ARCMD=$(TOOLPREF)ar # RANLIB=$(TOOLPREF)ranlib # RANLIBCMD=$(TOOLPREF)ranlib # However autoconf and libtool seem to use ar and ranlib # So we let them do, at the moment [*-pc-windows], [ libext=lib AR=""; RANLIB=echo; RANLIBCMD="" AS_IF([test "$host_cpu" = "x86_64" ], [machine="-machine:AMD64 "], [machine=""]) mklib="link -lib -nologo $machine /out:\$(1) \$(2)" ], [ mklib="rm -f \$(1) && ${AR} rc \$(1) \$(2) && ${RANLIB} \$(1)" ]) ## Find vendor of the C compiler OCAML_CC_VENDOR # Determine how to call the C preprocessor directly. # Most of the time, calling the C preprocessor through the C compiler is # desirable and even important. # In some cases, though, we want to use the C preprocessor only to # expand macros. In such cases, it is much more convenient to be able # to invoke it directly rather than through the C compiler, for instance # because, when invoked directly, the C preprocessor does not require # to be invoked on a file with a '.c' extension # We thus figure out how to invoke the C preprocessor directly but # let the CPP variable untouched, except for the MSVC port where we set it # manually to make sure the backward compatibility is preserved AS_CASE([$ocaml_cv_cc_vendor], [xlc-*], [CPP="$CC -E -qnoppline"], # suppress incompatible XLC line directives [msvc-*], [CPP="$CC -nologo -EP"]) # Libraries to build depending on the host AS_CASE([$host], [*-*-mingw32|*-pc-windows], [unix_or_win32="win32" unixlib="win32unix" ], [unix_or_win32="unix" unixlib="unix"]) AS_CASE([$host], [*-*-cygwin*|*-*-mingw32|*-pc-windows], [exeext=".exe"], [exeext='']) otherlibraries="dynlink" AS_IF([test x"$enable_unix_lib" != "xno"], [AS_IF([test x"$enable_bigarray_lib" != "xno"], [otherlibraries="$otherlibraries $unixlib bigarray"], [otherlibraries="$otherlibraries $unixlib"])]) AS_IF([test x"$enable_str_lib" != "xno"], [otherlibraries="$otherlibraries str"]) # Checks for system services ## Test whether #! scripts are supported ## TODO: have two values, one for host and one for target AC_SYS_INTERPRETER long_shebang=false AS_IF( [test "x$interpval" = "xyes"], [AS_CASE([$host], [*-cygwin|*-*-mingw32|*-pc-windows], [shebangscripts=false], [shebangscripts=true prev_exec_prefix="$exec_prefix" AS_IF([test "x$exec_prefix" = "xNONE"],[exec_prefix="$prefix"]) eval "expanded_bindir=\"$bindir\"" exec_prefix="$prev_exec_prefix" # Assume maximum shebang is 128 chars; less #!, /ocamlrun, an optional # 1 char suffix and the \0 leaving 115 characters AS_IF([test "${#expanded_bindir}" -gt 115],[long_shebang=true]) ] )], [shebangscripts=false] ) # Are we building a cross-compiler AS_IF( [test x"$host" = x"$target"], [cross_compiler=false], [cross_compiler=true]) # Checks for programs ## Check for the C compiler: done by libtool ## AC_PROG_CC ## Check for C99 support: done by libtool ## AC_PROG_CC_C99 ## Determine which flags to use for the C compiler AS_CASE([$ocaml_cv_cc_vendor], [xlc-*], [outputobj='-o $(EMPTY)' warn_error_flag='' cc_warnings='-qflag=i:i'], # all warnings enabled [msvc-*], [outputobj='-Fo' warn_error_flag='-WX' cc_warnings=''], [outputobj='-o $(EMPTY)' warn_error_flag='-Werror' cc_warnings='-Wall -Wdeclaration-after-statement']) AS_CASE([$enable_warn_error,AC_PACKAGE_VERSION], [yes,*|,*+dev*], [cc_warnings="$cc_warnings $warn_error_flag"]) # We select high optimization levels, provided we can turn off: # - strict type-based aliasing analysis (too risky for the OCaml runtime) # - strict no-overflow conditions on signed integer arithmetic # (the OCaml runtime assumes Java-style behavior of signed integer arith.) # Concerning optimization level, -O3 is somewhat risky, so take -O2. # Concerning language version, gnu99 is ISO C99 plus GNU extensions # that are often used in standard headers. Older GCC versions # defaults to gnu89, which is not C99. Clang defaults to gnu99 or # gnu11, which is fine. # Note: the vendor macro can not recognize MinGW because it calls the # C preprocessor directly so no compiler specific macro like __MING32__ # is defined. We thus catch MinGW first by looking at host and examine # the vendor only as a fall-back. We could put tis part of the logic # in the macro itself, too AS_CASE([$host], [*-*-mingw32], [AS_CASE([$ocaml_cv_cc_vendor], [gcc-[[01234]]-*], [AC_MSG_ERROR(m4_normalize([This version of Mingw GCC is too old. Please use GCC version 5 or above.]))], [gcc-*], [internal_cflags="-Wno-unused $cc_warnings \ -fexcess-precision=standard" # TODO: see whether the code can be fixed to avoid -Wno-unused common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields" internal_cppflags='-DUNICODE -D_UNICODE' internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"], [AC_MSG_ERROR([Unsupported C compiler for a Mingw build])])], [AS_CASE([$ocaml_cv_cc_vendor], [clang-*], [common_cflags="-O2 -fno-strict-aliasing -fwrapv"; internal_cflags="$cc_warnings -fno-common"], [gcc-[[012]]-*], # Some versions known to miscompile OCaml, e,g, 2.7.2.1, some 2.96. # Plus: C99 support unknown. [AC_MSG_ERROR(m4_normalize([This version of GCC is too old. Please use GCC version 4.2 or above.]))], [gcc-3-*|gcc-4-[[01]]], # No -fwrapv option before GCC 3.4. # Known problems with -fwrapv fixed in 4.2 only. [AC_MSG_WARN(m4_normalize([This version of GCC is rather old. Reducing optimization level."])); AC_MSG_WARN([Consider using GCC version 4.2 or above.]); common_cflags="-std=gnu99 -O"; internal_cflags="$cc_warnings"], [gcc-4-[[234]]], # No -fexcess-precision option before GCC 4.5 [common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ -fno-builtin-memcmp"; internal_cflags="$cc_warnings"], [gcc-4-*], [common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ -fno-builtin-memcmp"; internal_cflags="$cc_warnings -fexcess-precision=standard"], [gcc-*], [common_cflags="-O2 -fno-strict-aliasing -fwrapv"; internal_cflags="$cc_warnings -fno-common \ -fexcess-precision=standard"], [msvc-*], [common_cflags="-nologo -O2 -Gy- -MD $cc_warnings" common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" internal_cppflags='-DUNICODE -D_UNICODE' internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"], [xlc-*], [common_cflags="-O5 -qtune=balanced -qnoipa -qinline"; internal_cflags="$cc_warnings"], [common_cflags="-O"])]) internal_cppflags="-DCAML_NAME_SPACE $internal_cppflags" # Enable SSE2 on x86 mingw to avoid using 80-bit registers. AS_CASE([$host], [i686-*-mingw32], [internal_cflags="$internal_cflags -mfpmath=sse -msse2"]) # Use 64-bit file offset if possible # See also AC_SYS_LARGEFILE # Problem: flags are added to CC rather than CPPFLAGS AS_CASE([$host], [*-*-mingw32|*-pc-windows], [], [common_cppflags="$common_cppflags -D_FILE_OFFSET_BITS=64"]) # Adjust according to target # On Windows we do not take $enable_shared because it does not seem # to work. This should be better understood later #AS_CASE([$target], # [*-pc-windows], # [enable_shared=yes]) AS_IF([test x"$enable_shared" = "xno"],[with_sharedlibs=false]) AS_CASE([$CC,$host], [*,*-*-darwin*], [mkexe="$mkexe -Wl,-no_compact_unwind"; AC_DEFINE([HAS_ARCH_CODE32], [1])], [*,*-*-haiku*], [mathlib=""], [*,*-*-cygwin*], [AS_CASE([$target], [i686-*], [flavor=cygwin], [x86_64-*], [flavor=cygwin64], [AC_MSG_ERROR([unknown cygwin variant])]) common_cppflags="$common_cppflags -U_WIN32" AS_IF([$with_sharedlibs], [flexlink="flexlink -chain $flavor -merge-manifest -stack 16777216" flexdir=`$flexlink -where | tr -d '\015'` AS_IF([test -z "$flexdir"], [AC_MSG_WARN( [flexlink not found: native shared libraries won't be available.] ) with_sharedlibs=false], [iflexdir="-I\"$flexdir\"" mkexe="$flexlink -exe" mkexedebugflag="-link -g"] )] ) AS_IF([! $with_sharedlibs], [mkexe="$mkexe -Wl,--stack,16777216" oc_ldflags="-Wl,--stack,16777216"] ) ostype="Cygwin"], [*,*-*-mingw32], [AS_IF([$with_sharedlibs], [AS_CASE([$host], [i686-*-*], [flexdll_chain="mingw"], [x86_64-*-*], [flexdll_chain="mingw64"]) flexlink="flexlink -chain $flexdll_chain -merge-manifest -stack 16777216" flexdir=`$flexlink -where | tr -d '\015'` AS_IF([test -z "$flexdir"], [flexdir='$(ROOTDIR)/flexdll']) iflexdir="-I\"$flexdir\"" mkexedebugflag="-link -g"]) ostype="Win32" toolchain="mingw" mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' oc_ldflags='-municode' SO="dll"], [*,*-pc-windows], [toolchain=msvc ostype="Win32" mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' oc_ldflags='/ENTRY:wmainCRTStartup' AS_CASE([$host], [i686-pc-windows], [flexdll_chain=msvc], [x86_64-pc-windows], [flexdll_chain=msvc64]) AS_IF([$with_sharedlibs], [flexlink="flexlink -chain $flexdll_chain -merge-manifest -stack 16777216" flexdir=`$flexlink -where | tr -d '\015'` AS_IF([test -z "$flexdir"], [flexdir='$(ROOTDIR)/flexdll']) iflexdir="-I\"$flexdir\"" mkexedebugflag=''])], [*,x86_64-*-linux*], AC_DEFINE([HAS_ARCH_CODE32], [1]), [xlc*,powerpc-ibm-aix*], [mkexe="$mkexe " oc_ldflags="-brtl -bexpfull" AC_DEFINE([HAS_ARCH_CODE32], [1])], [gcc*,powerpc-*-linux*], [oc_ldflags="-mbss-plt"], ) ## Program to use to install files AC_PROG_INSTALL # Checks for libraries ## Mathematical library AC_CHECK_LIB([m],[cos]) AS_IF([test "x$ac_cv_lib_m_cos" = xyes ], [mathlib="-lm"], [mathlib=""]) # Checks for header files AC_CHECK_HEADER([math.h]) AC_CHECK_HEADERS([unistd.h],[AC_DEFINE([HAS_UNISTD])]) AC_CHECK_HEADER([stdint.h],[AC_DEFINE([HAS_STDINT_H])]) AC_CHECK_HEADER([dirent.h], [AC_DEFINE([HAS_DIRENT])], [], [#include ]) AC_CHECK_HEADER([sys/select.h], [AC_DEFINE([HAS_SYS_SELECT_H])], [], [#include ]) # Checks for types ## off_t AC_TYPE_OFF_T # Checks for structures # Checks for compiler characteristics AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long *) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(long long) AS_IF( [test "x$ac_cv_sizeof_long_p" = "x4" ], [bits=32; arch64=false], [test "x$ac_cv_sizeof_long_p" = "x8" ], [bits=64; arch64=true AC_DEFINE([ARCH_SIXTYFOUR], [1])], [AC_MSG_ERROR([Neither 32 nor 64 bits architecture.])] ) AS_IF([test "x$ac_cv_sizeof_int" != "x4" && test "x$ac_cv_sizeof_long" != "x4" \ && test "x$ac_cv_sizeof_short" != "x4"], [AC_MSG_ERROR([Sorry, we can't find a 32-bit integer type.])] ) AS_IF( [test "x$ac_cv_sizeof_long" != "x8" && test "x$ac_cv_sizeof_long_long" != "x8"], [AC_MSG_ERROR([Sorry, we can't find a 64-bit integer type.])] ) AC_DEFINE_UNQUOTED([SIZEOF_PTR], [$ac_cv_sizeof_long_p]) AC_DEFINE_UNQUOTED([SIZEOF_LONGLONG], [$ac_cv_sizeof_long_long]) AC_MSG_NOTICE([Target is a $bits bits architecture]) AC_C_BIGENDIAN( [ AC_DEFINE([ARCH_BIG_ENDIAN], [1]) [endianness="be"] ], [endianness="le"], [AC_MSG_ERROR([could not determine endianness.])], [AC_MSG_ERROR([unable to handle universal endianness])] ) AC_CHECK_ALIGNOF([double]) AC_CHECK_ALIGNOF([long]) AC_CHECK_ALIGNOF([long long]) AS_IF([! $arch64], [AS_CASE([$target_cpu], [i686], [], [AS_IF([test "$ac_cv_alignof_double" -gt 4], [AC_DEFINE([ARCH_ALIGN_DOUBLE], [1])]) AS_IF([test "x$ac_cv_sizeof_long" = "x8" && test "$ac_cv_alignof_long" -gt 4], [AC_DEFINE([ARCH_ALIGN_INT64], [1])], [AS_IF([test "x$ac_cv_sizeof_long_long" = "x8" && test "$ac_cv_alignof_long_long" -gt 4], [AC_DEFINE([ARCH_ALIGN_INT64], [1])])]) ])]) # Shared library support shared_libraries_supported=false sharedlib_cflags='' mksharedlib='shared-libs-not-available' rpath='' mksharedlibrpath='' natdynlinkopts="" AS_IF([test x"$enable_shared" != "xno"], [AS_CASE([$host], [*-apple-darwin*], [mksharedlib="$CC -shared -flat_namespace -undefined suppress \ -Wl,-no_compact_unwind" shared_libraries_supported=true], [*-*-mingw32], [mksharedlib='$(FLEXLINK)' mkmaindll='$(FLEXLINK) -maindll' shared_libraries_supported=$with_sharedlibs], [*-pc-windows], [mksharedlib='$(FLEXLINK)' mkmaindll='$(FLEXLINK) -maindll' shared_libraries_supported=$with_sharedlibs], [*-*-cygwin*], [mksharedlib="$flexlink" mkmaindll="$flexlink -maindll" shared_libraries_supported=true], [powerpc-ibm-aix*], [AS_CASE([$CC], [xlc*], [mksharedlib="$CC -qmkshrobj -G" shared_libraries_supported=true])], [[*-*-linux*|*-*-freebsd[3-9]*|*-*-freebsd[1-9][0-9]*\ |*-*-openbsd*|*-*-netbsd*|*-*-dragonfly*|*-*-gnu*|*-*-haiku*]], [sharedlib_cflags="-fPIC" AS_CASE([$CC,$host], [gcc*,powerpc-*-linux*], [mksharedlib="$CC -shared -mbss-plt"], [mksharedlib="$CC -shared"]) oc_ldflags="$oc_ldflags -Wl,-E" rpath="-Wl,-rpath," mksharedlibrpath="-Wl,-rpath," natdynlinkopts="-Wl,-E" shared_libraries_supported=true])]) AS_IF([test -z "$mkmaindll"], [mkmaindll=$mksharedlib]) # Configure native dynlink natdynlink=false AS_IF([test x"$enable_shared" != "xno"], [AS_CASE(["$host"], [*-*-cygwin*], [natdynlink=true], [*-*-mingw32], [natdynlink=true], [*-pc-windows], [natdynlink=true], [[i[3456]86-*-linux*]], [natdynlink=true], [[i[3456]86-*-gnu*]], [natdynlink=true], [[x86_64-*-linux*]], [natdynlink=true], [arm64-*-darwin*], [natdynlink=true], [aarch64-*-darwin*], [natdynlink=true], [x86_64-*-darwin*], [natdynlink=true], [s390x*-*-linux*], [natdynlink=true], [powerpc*-*-linux*], [natdynlink=true], [i686-*-kfreebsd*], [natdynlink=true], [x86_64-*-kfreebsd*], [natdynlink=true], [x86_64-*-dragonfly*], [natdynlink=true], [[i[3456]86-*-freebsd*]], [natdynlink=true], [x86_64-*-freebsd*], [natdynlink=true], [[i[3456]86-*-openbsd*]], [natdynlink=true], [x86_64-*-openbsd*], [natdynlink=true], [[i[3456]86-*-netbsd*]], [natdynlink=true], [x86_64-*-netbsd*], [natdynlink=true], [i386-*-gnu0.3], [natdynlink=true], [[i[3456]86-*-haiku*]], [natdynlink=true], [arm*-*-linux*], [natdynlink=true], [arm*-*-freebsd*], [natdynlink=true], [earm*-*-netbsd*], [natdynlink=true], [aarch64-*-linux*], [natdynlink=true], [aarch64-*-freebsd*], [natdynlink=true], [riscv*-*-linux*], [natdynlink=true])]) # Try to work around the Skylake/Kaby Lake processor bug. AS_CASE(["$CC,$host"], [*gcc*,x86_64-*|*gcc*,i686-*], [OCAML_CC_HAS_FNO_TREE_VRP AS_IF([$cc_has_fno_tree_vrp], [internal_cflags="$internal_cflags -fno-tree-vrp"])]) OCAML_CC_SUPPORTS_ALIGNED ## Check whether __attribute__((optimize("tree-vectorize")))) is supported OCAML_CC_SUPPORTS_TREE_VECTORIZE # Configure the native-code compiler arch=none model=default system=unknown AS_CASE([$host], [[i[3456]86-*-linux*]], [arch=i386; system=linux_elf], [[i[3456]86-*-*bsd*]], [arch=i386; system=bsd_elf], [[i[3456]86-*-haiku*]], [arch=i386; system=beos], [[i[3456]86-*-cygwin]], [arch=i386; system=cygwin], [[i[3456]86-*-gnu*]], [arch=i386; system=gnu], [[i[3456]86-*-mingw32]], [arch=i386; system=mingw], [i686-pc-windows], [arch=i386; system=win32], [x86_64-pc-windows], [arch=amd64; system=win64], [[powerpc64le*-*-linux*]], [arch=power; model=ppc64le; system=elf], [[powerpc*-*-linux*]], [arch=power; AS_IF([$arch64],[model=ppc64],[model=ppc]); system=elf], [[s390x*-*-linux*]], [arch=s390x; model=z10; system=elf], [armv6*-*-linux-gnueabihf], [arch=arm; model=armv6; system=linux_eabihf], [armv7*-*-linux-gnueabihf], [arch=arm; model=armv7; system=linux_eabihf], [armv8*-*-linux-gnueabihf], [arch=arm; model=armv8; system=linux_eabihf], [armv8*-*-linux-gnueabi], [arch=arm; model=armv8; system=linux_eabi], [armv7*-*-linux-gnueabi], [arch=arm; model=armv7; system=linux_eabi], [armv6t2*-*-linux-gnueabi], [arch=arm; model=armv6t2; system=linux_eabi], [armv6*-*-linux-gnueabi], [arch=arm; model=armv6; system=linux_eabi], [armv6*-*-freebsd*], [arch=arm; model=armv6; system=freebsd], [earmv6*-*-netbsd*], [arch=arm; model=armv6; system=netbsd], [earmv7*-*-netbsd*], [arch=arm; model=armv7; system=netbsd], [armv5te*-*-linux-gnueabi], [arch=arm; model=armv5te; system=linux_eabi], [armv5*-*-linux-gnueabi], [arch=arm; model=armv5; system=linux_eabi], [arm*-*-linux-gnueabihf], [arch=arm; system=linux_eabihf], [arm*-*-linux-gnueabi], [arch=arm; system=linux_eabi], [arm*-*-openbsd*], [arch=arm; system=bsd], [zaurus*-*-openbsd*], [arch=arm; system=bsd], [x86_64-*-linux*], [arch=amd64; system=linux], [x86_64-*-gnu*], [arch=amd64; system=gnu], [x86_64-*-dragonfly*], [arch=amd64; system=dragonfly], [x86_64-*-freebsd*], [arch=amd64; system=freebsd], [x86_64-*-netbsd*], [arch=amd64; system=netbsd], [x86_64-*-openbsd*], [arch=amd64; system=openbsd], [arm64-*-darwin*], [arch=arm64; system=macosx], [aarch64-*-darwin*], [arch=arm64; system=macosx], [x86_64-*-darwin*], [arch=amd64; system=macosx], [x86_64-*-mingw32], [arch=amd64; system=mingw64], [aarch64-*-linux*], [arch=arm64; system=linux], [aarch64-*-freebsd*], [arch=arm64; system=freebsd], [x86_64-*-cygwin*], [arch=amd64; system=cygwin], [riscv64-*-linux*], [arch=riscv; model=riscv64; system=linux] ) AS_IF([test x"$enable_native_compiler" = "xno"], [arch=none; model=default; system=unknown; native_compiler=false AC_MSG_NOTICE([the native compiler is disabled])], [native_compiler=true]) AS_IF([! $native_compiler], [natdynlink=false]) AS_IF([$natdynlink], [cmxs="cmxs"], [cmxs="cmx"]) AC_DEFINE_UNQUOTED([OCAML_OS_TYPE], ["$ostype"]) AC_CHECK_TOOL([DIRECT_LD],[ld]) AS_IF([test -z "$PARTIALLD"], [AS_CASE(["$arch,$CC,$system,$model"], [amd64,gcc*,macosx,*], [PACKLD_FLAGS=' -arch x86_64'], [amd64,gcc*,solaris,*], [PACKLD_FLAGS=' -m elf_x86_64'], [power,gcc*,elf,ppc], [PACKLD_FLAGS=' -m elf32ppclinux'], [power,gcc*,elf,ppc64], [PACKLD_FLAGS=' -m elf64ppc'], [power,gcc*,elf,ppc64le], [PACKLD_FLAGS=' -m elf64lppc'], [PACKLD_FLAGS='']) # The string for PACKLD must be capable of being concatenated with the # output filename. Don't assume that all C compilers understand GNU -ofoo # form, so ensure that the definition includes a space at the end (which is # achieved using the $(EMPTY) expansion trick). AS_IF([test x"$CC" = "xcl"], # For the Microsoft C compiler there must be no space at the end of the # string. [PACKLD="link -lib -nologo $machine -out:"], [PACKLD="$DIRECT_LD -r$PACKLD_FLAGS -o \$(EMPTY)"])], [PACKLD="$PARTIALLD -o \$(EMPTY)"]) # Disable PIE at link time when ocamlopt does not produce position-independent # code and the system produces PIE executables by default and demands PIC # object files to do so. # This issue does not affect amd64 (x86_64) and s390x (Z systems), # since ocamlopt produces PIC object files by default. # Currently the problem is known for Alpine Linux on platforms other # than amd64 and s390x (issue #7562), and probably affects all Linux # distributions that use the musl standard library and dynamic loader. # Other systems have PIE by default but can cope with non-PIC object files, # e.g. Ubuntu >= 17.10 for i386, which uses the glibc dynamic loader. AS_CASE([$arch], [amd64|s390x|none], # ocamlopt generates PIC code or doesn't generate code at all [], [AS_CASE([$host], [*-linux-musl], # Alpine and other musl-based Linux distributions [common_cflags="-no-pie $common_cflags"], [])]) # Assembler AS_IF([test -n "$host_alias"], [toolpref="${host_alias}-"], [toolpref=""]) # We first compute default values for as and aspp # If values have been given by the user then they take precedence over # those just computed # One may want to check whether the user provided values first # and only compute values if none has been provided AS_CASE(["$arch,$system"], [i386,win32], [default_as="ml -nologo -coff -Cp -c -Fo"], [amd64,win64], [default_as="ml64 -nologo -Cp -c -Fo"], [amd64,macosx], [AS_CASE([$ocaml_cv_cc_vendor], [clang-*], [default_as='clang -arch x86_64 -Wno-trigraphs -c' default_aspp='clang -arch x86_64 -Wno-trigraphs -c'], [default_as="${toolpref}as -arch x86_64" default_aspp="${toolpref}gcc -arch x86_64 -c"])], [amd64,solaris], [default_as="${toolpref}as --64" default_aspp="${toolpref}gcc -m64 -c"], [i386,solaris], [default_as="${toolpref}as" default_aspp="${toolpref}gcc -c"], [power,elf], [AS_CASE([$model], [ppc64le], [default_as="${toolpref}as -a64 -mpower8" default_aspp="${toolpref}gcc -m64 -mcpu=powerpc64le -c"], [ppc64], [default_as="${toolpref}as -a64 -mppc64" default_aspp="${toolpref}gcc -m64 -c"], [ppc], [default_as="${toolpref}as -mppc" default_aspp="${toolpref}gcc -m32 -c"])], [s390x,elf], [default_as="${toolpref}as -m 64 -march=$model" default_aspp="${toolpref}gcc -c -Wa,-march=$model"], [*,freebsd], [default_as="${toolpref}cc -c -Wno-trigraphs" default_aspp="${toolpref}cc -c -Wno-trigraphs"], [*,dragonfly], [default_as="${toolpref}as" default_aspp="${toolpref}cc -c"], [amd64,*|arm,*|arm64,*|i386,*|riscv,*], [AS_CASE([$ocaml_cv_cc_vendor], [clang-*], [default_as="${toolpref}clang -c -Wno-trigraphs" default_aspp="${toolpref}clang -c -Wno-trigraphs"], [default_as="${toolpref}as" default_aspp="${toolpref}gcc -c"])]) AS_IF([test "$with_pic"], [fpic=true AC_DEFINE([CAML_WITH_FPIC]) internal_cflags="$internal_cflags $sharedlib_cflags" default_aspp="$default_aspp $sharedlib_cflags"], [fpic=false]) AS_IF([test -z "$AS"], [AS="$default_as"]) AS_IF([test -z "$ASPP"], [ASPP="$default_aspp"]) # Checks for library functions ## Check the semantics of signal handlers OCAML_SIGNAL_HANDLERS_SEMANTICS ## Check for C99 float ops # Note: this was disabled on Windows but the autoconf-generated script # does find the function it is looking for. # however the fma test does not pass so we disable the feature # for the moment, to be backward-compatible AS_CASE([$host], [*-*-mingw32|*-pc-windows], [], [has_c99_float_ops=true AC_CHECK_FUNC([expm1], [], [has_c99_float_ops=false]) AS_IF([$has_c99_float_ops], [AC_CHECK_FUNC([log1p], [], [has_c99_float_ops=false])]) AS_IF([$has_c99_float_ops], [AC_CHECK_FUNC([hypot], [], [has_c99_float_ops=false])]) AS_IF([$has_c99_float_ops], [AC_CHECK_FUNC([fma], [ AS_CASE([$target],[x86_64-*-cygwin],[],[AC_DEFINE([HAS_WORKING_FMA])])], [has_c99_float_ops=false])]) AS_IF([$has_c99_float_ops], [AC_CHECK_FUNC([copysign], [AC_DEFINE([HAS_C99_FLOAT_OPS])])])]) ## getrusage AC_CHECK_FUNC([getrusage], [AC_DEFINE([HAS_GETRUSAGE])]) ## times AC_CHECK_FUNC([times], [AC_DEFINE([HAS_TIMES])]) ## secure_getenv and __secure_getenv saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS" AC_CHECK_FUNC([secure_getenv], [AC_DEFINE([HAS_SECURE_GETENV])], [AC_CHECK_FUNC([__secure_getenv], [AC_DEFINE([HAS___SECURE_GETENV])])]) CPPFLAGS="$saved_CPPFLAGS" ## issetugid AC_CHECK_FUNC([issetugid], [AC_DEFINE([HAS_ISSETUGID])]) ## Checking for monotonic clock source ## On Windows MSVC, QueryPerformanceCounter and QueryPerformanceFrequency ## are always available. ## On Unix platforms, we check for the appropriate POSIX feature-test macros. ## On MacOS clock_gettime's CLOCK_MONOTONIC flag is not actually monotonic. ## mach_timebase_info and mach_absolute_time are used instead. AS_CASE([$host], [*-*-windows], [has_monotonic_clock=true], [*-apple-darwin*], [ AC_CHECK_FUNCS([mach_timebase_info mach_absolute_time], [ has_monotonic_clock=true AC_DEFINE([HAS_MACH_ABSOLUTE_TIME]) ], [has_monotonic_clock=false])], [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include #include int main(void) { #if !(defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK) \ && _POSIX_MONOTONIC_CLOCK != (-1)) #error "no monotonic clock source" #endif return 0; } ]])], [ has_monotonic_clock=true AC_DEFINE([HAS_POSIX_MONOTONIC_CLOCK]) ], [has_monotonic_clock=false]) ] ) # The instrumented runtime is built by default # if the proper clock source is found. # If asked via --enable-instrumented-runtime, configuration fails if the proper # clock source is missing. AS_IF([test "x$enable_instrumented_runtime" != "xno" ], [ AS_CASE([$host], [*-*-windows], [instrumented_runtime=true], [*-apple-darwin*], [ AS_CASE([$enable_instrumented_runtime,$has_monotonic_clock], [*,true], [instrumented_runtime=true], [yes,false], [ AC_MSG_ERROR([Instrumented runtime support requested \ but no proper monotonic clock source was found.]) ], [auto,false], [instrumented_runtime=false] )], [AC_SEARCH_LIBS([clock_gettime], [rt], [has_clock_gettime=true], [has_clock_gettime=false]) AS_CASE( [$enable_instrumented_runtime,$has_clock_gettime,$has_monotonic_clock], [auto,false,*], [instrumented_runtime=false], [auto,*,false], [instrumented_runtime=false], [*,true,true], [ instrumented_runtime=true AS_IF([test "x$ac_cv_search_clock_gettime" = "xnone required"], [instrumented_runtime_ldlibs=""], [instrumented_runtime_ldlibs=$ac_cv_search_clock_gettime] ) ], [yes,false,*], [ AC_MSG_ERROR([Instrumented runtime support requested \ but clock_gettime is missing.]) ], [yes,*,false], [ AC_MSG_ERROR([Instrumented runtime support requested \ but no proper monotonic clock source was found.]) ] )] )] ) ## Sockets ## TODO: check whether the different libraries are really useful sockets=false AS_CASE([$host], [*-*-mingw32|*-pc-windows], [cclibs="$cclibs -lws2_32" sockets=true], [*-*-haiku], [cclibs="$cclibs -lnetwork" sockets=true], [ AC_CHECK_FUNC([socket]) AC_CHECK_FUNC([socketpair]) AC_CHECK_FUNC([bind]) AC_CHECK_FUNC([listen]) AC_CHECK_FUNC([accept]) AC_CHECK_FUNC([connect]) sockets=true ] ) AS_IF([$sockets], [AC_DEFINE([HAS_SOCKETS])]) ## socklen_t in sys/socket.h AC_CHECK_TYPE( [socklen_t], [AC_DEFINE([HAS_SOCKLEN_T])], [], [#include ]) AC_CHECK_FUNC([inet_aton], [AC_DEFINE([HAS_INET_ATON])]) ## IPv6 support ipv6=true AC_CHECK_TYPE( [struct sockaddr_in6], [], [ipv6=false], [ #include #include #include ] ) AS_IF([$ipv6], [AC_CHECK_FUNC([getaddrinfo], [], [ipv6=false])]) AS_IF([$ipv6], [AC_CHECK_FUNC([getnameinfo], [], [ipv6=false])]) AS_IF([$ipv6], [AC_CHECK_FUNC([inet_pton], [], [ipv6=false])]) AS_IF([$ipv6], [AC_CHECK_FUNC([inet_ntop], [AC_DEFINE([HAS_IPV6])])]) AC_CHECK_FUNC([rewinddir], [AC_DEFINE([HAS_REWINDDIR])]) AC_CHECK_FUNC([lockf], [AC_DEFINE([HAS_LOCKF])]) AC_CHECK_FUNC([mkfifo], [AC_DEFINE([HAS_MKFIFO])]) AC_CHECK_FUNC([getcwd], [AC_DEFINE([HAS_GETCWD])]) AC_CHECK_DECL([system], [AC_DEFINE([HAS_SYSTEM])], [], [[#include ]]) ## utime ## Note: this was defined in config/s-nt.h but the autoconf macros do not # seem to detect it properly on Windows so we hardcode the definition # of HAS_UTIME on Windows but this will probably need to be clarified AS_CASE([$host], [*-*-mingw32|*-pc-windows], [AC_DEFINE([HAS_UTIME])], [AC_CHECK_HEADER([sys/types.h], [AC_CHECK_HEADER([utime.h], [AC_CHECK_FUNC([utime], [AC_DEFINE([HAS_UTIME])])])])]) AC_CHECK_FUNC([utimes], [AC_DEFINE([HAS_UTIMES])]) AC_CHECK_FUNC([fchmod], [AC_CHECK_FUNC([fchown], [AC_DEFINE([HAS_FCHMOD])])]) AC_CHECK_FUNC([truncate], [AC_CHECK_FUNC([ftruncate], [AC_DEFINE([HAS_TRUNCATE])])]) ## select AC_CHECK_FUNC([select], [AC_CHECK_TYPE([fd_set], [AC_DEFINE([HAS_SELECT]) select=true], [select=false], [ #include #include ])]) AC_CHECK_FUNC([nanosleep], [AC_DEFINE([HAS_NANOSLEEP])]) AC_CHECK_FUNC([symlink], [AC_CHECK_FUNC([readlink], [AC_CHECK_FUNC([lstat], [AC_DEFINE([HAS_SYMLINK])])])]) # wait AC_CHECK_FUNC( [waitpid], [ wait=true AC_DEFINE([HAS_WAITPID]) ], [wait=false]) AC_CHECK_FUNC( [wait4], [ has_wait=true AC_DEFINE([HAS_WAIT4]) ]) ## getgroups AC_CHECK_FUNC([getgroups], [AC_DEFINE([HAS_GETGROUPS])]) ## setgroups AC_CHECK_FUNC([setgroups], [AC_DEFINE([HAS_SETGROUPS])]) ## initgroups AC_CHECK_FUNC([initgroups], [AC_DEFINE([HAS_INITGROUPS])]) ## termios AC_CHECK_HEADER([termios.h], [AC_CHECK_FUNC([tcgetattr], [AC_CHECK_FUNC([tcsetattr], [AC_CHECK_FUNC([tcsendbreak], [AC_CHECK_FUNC([tcflush], [AC_CHECK_FUNC([tcflow], [AC_DEFINE([HAS_TERMIOS])])])])])])]) ## setitimer AC_CHECK_FUNC([setitimer], [ setitimer=true AC_DEFINE([HAS_SETITIMER]) ], [setitimer=false]) ## gethostname # Note: detection fails on Windows so hardcoding the result # (should be debugged later) AS_CASE([$host], [*-*-mingw32|*-pc-windows], [AC_DEFINE([HAS_GETHOSTNAME])], [AC_CHECK_FUNC([gethostname], [AC_DEFINE([HAS_GETHOSTNAME])])]) ## uname AC_CHECK_HEADER([sys/utsname.h], [AC_CHECK_FUNC([uname], [AC_DEFINE([HAS_UNAME])])]) ## gettimeofday AC_CHECK_FUNC([gettimeofday], [ gettimeofday=true AC_DEFINE([HAS_GETTIMEOFDAY]) ], [gettimeofday=false]) ## mktime AC_CHECK_FUNC([mktime], [AC_DEFINE([HAS_MKTIME])]) ## setsid AS_CASE([$host], [*-cygwin|*-*-mingw32|*-pc-windows], [], [AC_CHECK_FUNC([setsid], [AC_DEFINE([HAS_SETSID])])]) ## putenv AC_CHECK_FUNC([putenv], [AC_DEFINE([HAS_PUTENV])]) ## setenv and unsetenv AC_CHECK_FUNC([setenv], [AC_CHECK_FUNC([unsetenv], [AC_DEFINE([HAS_SETENV_UNSETENV])])]) ## newlocale() and # Note: the detection fails on msvc so we hardcode the result # (should be debugged later) AS_CASE([$host], [*-pc-windows], [AC_DEFINE([HAS_LOCALE_H])], [AC_CHECK_HEADER([locale.h], [AC_CHECK_FUNC([newlocale], [AC_CHECK_FUNC([freelocale], [AC_CHECK_FUNC([uselocale], [AC_DEFINE([HAS_LOCALE_H])])])])])]) AC_CHECK_HEADER([xlocale.h], [AC_CHECK_FUNC([newlocale], [AC_CHECK_FUNC([freelocale], [AC_CHECK_FUNC([uselocale], [AC_DEFINE([HAS_XLOCALE_H])])])])]) ## strtod_l # Note: not detected on MSVC so hardcoding the result # (should be debugged later) AS_CASE([$host], [*-pc-windows], [AC_DEFINE([HAS_STRTOD_L])], [AC_CHECK_FUNC([strtod_l], [AC_DEFINE([HAS_STRTOD_L])])]) ## shared library support AS_IF([$shared_libraries_supported], [AS_CASE([$host], [*-*-mingw32|*-pc-windows], [supports_shared_libraries=$shared_libraries_supported; DLLIBS=""], [AC_CHECK_FUNC([dlopen], [supports_shared_libraries=true DLLIBS=""], [AC_CHECK_LIB([dl], [dlopen], [supports_shared_libraries=true DLLIBS="-ldl $DLLIBS"], [supports_shared_libraries=false])])])], [supports_shared_libraries=false]) AS_IF([$supports_shared_libraries], [AC_MSG_NOTICE([Dynamic loading of shared libraries is supported.]) AC_DEFINE([SUPPORT_DYNAMIC_LINKING])], [AC_MSG_NOTICE([Dynamic loading of shared libraries is not supported.])]) ## mmap AC_CHECK_HEADER([sys/mman.h], [AC_CHECK_FUNC([mmap], [AC_CHECK_FUNC([munmap], [AC_DEFINE([HAS_MMAP])])])]) ## pwrite AC_CHECK_FUNC([pwrite], [AC_DEFINE([HAS_PWRITE])]) ## -fdebug-prefix-map support by the C compiler AS_CASE([$CC,$host], [*,*-*-mingw32], [cc_has_debug_prefix_map=false], [*,*-pc-windows], [cc_has_debug_prefix_map=false], [xlc*,powerpc-ibm-aix*], [cc_has_debug_prefix_map=false], [OCAML_CC_HAS_DEBUG_PREFIX_MAP]) ## Does stat support nanosecond precision AC_CHECK_MEMBER([struct stat.st_atim.tv_nsec], [stat_has_ns_precision=true AC_DEFINE([HAS_NANOSECOND_STAT], [1])], [], [ AC_INCLUDES_DEFAULT #include ]) AS_IF([! $stat_has_ns_precision], [AC_CHECK_MEMBER([struct stat.st_atimespec.tv_nsec], [stat_has_ns_precision=true AC_DEFINE([HAS_NANOSECOND_STAT], [2])], [], [ AC_INCLUDES_DEFAULT #include ])]) AS_IF([! $stat_has_ns_precision], [AC_CHECK_MEMBER([struct stat.st_atimensec], [stat_has_ns_precision=true AC_DEFINE([HAS_NANOSECOND_STAT], [3])], [], [ AC_INCLUDES_DEFAULT #include ])]) AS_IF([$stat_has_ns_precision], [AC_MSG_NOTICE([stat supports nanosecond precision])], [AC_MSG_NOTICE([stat does not support nanosecond precision])]) # Number of arguments of gethostbyname_r AX_FUNC_WHICH_GETHOSTBYNAME_R AS_CASE([$ac_cv_func_which_gethostbyname_r], [six], [AC_DEFINE([HAS_GETHOSTBYNAME_R],[6])], [five], [AC_DEFINE([HAS_GETHOSTBYNAME_R],[5])], [three], [AC_MSG_WARN([OCaml does not support this variant])]) # Number of arguments of gethostbyaddr_r AX_FUNC_WHICH_GETHOSTBYADDR_R AS_CASE([$ac_cv_func_which_gethostbyaddr_r], [eight], [AC_DEFINE([HAS_GETHOSTBYADDR_R],[8])], [seven], [AC_DEFINE([HAS_GETHOSTBYADDR_R],[7])]) ## mkstemp AC_CHECK_FUNC([mkstemp], [AC_DEFINE([HAS_MKSTEMP])]) ## nice AC_CHECK_FUNC([nice], [AC_DEFINE([HAS_NICE])]) ## dup3 AC_CHECK_FUNC([dup3], [AC_DEFINE([HAS_DUP3])]) ## pipe2 AC_CHECK_FUNC([pipe2], [AC_DEFINE([HAS_PIPE2])]) ## accept4 AC_CHECK_FUNC([accept4], [AC_DEFINE([HAS_ACCEPT4])]) ## getauxval AC_CHECK_FUNC([getauxval], [AC_DEFINE([HAS_GETAUXVAL])]) ## shmat AC_CHECK_HEADER([sys/shm.h], [ AC_DEFINE([HAS_SYS_SHM_H]) AC_CHECK_FUNC([shmat], [AC_DEFINE([HAS_SHMAT])]) ]) ## execvpe AC_CHECK_FUNC([execvpe], [AC_DEFINE([HAS_EXECVPE])]) ## posix_spawn AC_CHECK_HEADER([spawn.h], [AC_CHECK_FUNC([posix_spawn], [AC_CHECK_FUNC([posix_spawnp], [AC_DEFINE([HAS_POSIX_SPAWN])])])]) ## ffs or _BitScanForward AC_CHECK_FUNC([ffs], [AC_DEFINE([HAS_FFS])]) AC_CHECK_FUNC([_BitScanForward], [AC_DEFINE([HAS_BITSCANFORWARD])]) ## Determine whether the debugger should/can be built AS_CASE([$enable_debugger], [no], [with_debugger="" AC_MSG_NOTICE([replay debugger disabled])], [AS_IF([$sockets], [with_debugger="ocamldebugger" AC_MSG_NOTICE([replay debugger supported])], [with_debugger="" AC_MSG_NOTICE([replay debugger not supported])]) ]) ## Should the runtime with debugging support be built AS_CASE([$enable_debug_runtime], [no], [debug_runtime=false], [debug_runtime=true]) ## Determine if system stack overflows can be detected AC_MSG_CHECKING([whether stack overflows can be detected]) AS_CASE([$arch,$system], [i386,linux_elf|amd64,linux|amd64,macosx \ |amd64,openbsd|i386,bsd_elf], [AC_DEFINE([HAS_STACK_OVERFLOW_DETECTION]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) ## Determine if the POSIX threads library is supported AS_IF([test x"$enable_systhreads" = "xno"], [systhread_support=false AC_MSG_NOTICE([the Win32/POSIX threads library is disabled])], [AS_CASE([$host], [*-*-mingw32|*-pc-windows], [systhread_support=true otherlibraries="$otherlibraries systhreads" AC_MSG_NOTICE([the Win32 threads library is supported])], [AX_PTHREAD( [systhread_support=true otherlibraries="$otherlibraries systhreads" AS_CASE([$host], [*-*-solaris*], [pthread_link="-lpthread -lposix4"], [*-*-haiku*], [pthread_link=""], [*-*-android*], [pthread_link=""], [pthread_link="-lpthread"]) common_cppflags="$common_cppflags -D_REENTRANT" AC_MSG_NOTICE([the POSIX threads library is supported]) saved_CFLAGS="$CFLAGS" saved_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$LIBS $pthread_link" AC_CHECK_FUNC([sigwait], [AC_DEFINE([HAS_SIGWAIT])]) LIBS="$saved_LIBS" CFLAGS="$saved_CFLAGS"], [AS_IF([test x"$enable_systhreads" = "xyes"], [AC_MSG_ERROR([the POSIX thread library is not available])], [systhread_support=false AC_MSG_NOTICE([the POSIX threads library is not supported])])])])]) ## Does the assembler support debug prefix map and CFI directives as_has_debug_prefix_map=false asm_cfi_supported=false AS_IF([$native_compiler], [AS_CASE([$host], [*-*-mingw32|*-pc-windows], [], [OCAML_AS_HAS_DEBUG_PREFIX_MAP OCAML_AS_HAS_CFI_DIRECTIVES])]) ## Frame pointers AS_IF([test x"$enable_frame_pointers" = "xyes"], [AS_CASE(["$host,$CC"], [x86_64-*-linux*,gcc*|x86_64-*-linux*,clang*], [common_cflags="$common_cflags -g -fno-omit-frame-pointer" frame_pointers=true AC_DEFINE([WITH_FRAME_POINTERS]) AC_MSG_NOTICE([using frame pointers])], [AC_MSG_ERROR([frame pointers not supported on this platform])] )], [AC_MSG_NOTICE([not using frame pointers]) frame_pointers=false]) ## No naked pointers AS_IF([test x"$enable_naked_pointers" = "xno" ], [naked_pointers=false AC_DEFINE([NO_NAKED_POINTERS])], [naked_pointers=true]) AS_IF([test x"$enable_naked_pointers_checker" = "xyes" ], [AS_IF([test x"$enable_naked_pointers" = "xno" ], [AC_MSG_ERROR(m4_normalize([ --enable-naked-pointers-checker and --disable-naked-pointers are incompatible]))]) AS_CASE(["$arch","$system"], [amd64,linux|amd64,macosx \ |amd64,openbsd|amd64,win64 \ |amd64,freebsd], [naked_pointers_checker=true AC_DEFINE([NAKED_POINTERS_CHECKER])], [*], [AC_MSG_ERROR([naked pointers checker not supported on this platform])] )], [naked_pointers_checker=false]) ## Check for mmap support for huge pages and contiguous heap OCAML_MMAP_SUPPORTS_HUGE_PAGES AC_DEFINE_UNQUOTED([PROFINFO_WIDTH], [$profinfo_width]) AS_IF([$profinfo], [AC_DEFINE([WITH_PROFINFO])]) AS_IF([test x"$enable_installing_bytecode_programs" = "xno"], [install_bytecode_programs=false], [install_bytecode_programs=true]) AS_IF([test x"$enable_installing_source_artifacts" = "xno"], [install_source_artifacts=false], [install_source_artifacts=true]) AS_IF([test x"$enable_ocamldoc" = "xno"], [ocamldoc=""], [ocamldoc=ocamldoc]) AS_CASE([$enable_ocamltest,AC_PACKAGE_VERSION], [yes,*|,*+dev*],[ocamltest='ocamltest'], [ocamltest='']) AS_IF([test x"$enable_flambda" = "xyes"], [flambda=true AS_IF([test x"$enable_flambda_invariants" = "xyes"], [flambda_invariants=true], [flambda_invariants=false])], [flambda=false flambda_invariants=false]) AS_IF([test x"$enable_flat_float_array" = "xno"], [flat_float_array=false], [AC_DEFINE([FLAT_FLOAT_ARRAY]) flat_float_array=true]) AS_IF([test x"$enable_function_sections" = "xno"], [function_sections=false], [AS_CASE([$arch], [amd64|i386|arm64], # not supported on arm32, see issue #9124. [AS_CASE([$target], [*-cygwin*|*-mingw*|*-windows|*-apple-darwin*], [function_sections=false; AC_MSG_NOTICE([No support for function sections on $target.])], [*], [AS_CASE([$ocaml_cv_cc_vendor], [gcc-[0123]-*|gcc-4-[01234567]], [function_sections=false; AC_MSG_NOTICE([Function sections are not supported in GCC prior to version 4.8.])], [clang-[012]-*|clang-3-[01234]], [function_sections=false; AC_MSG_NOTICE([Function sections are not supported in Clang prior to version 3.5.])], [gcc-*|clang-*], [function_sections=true; internal_cflags="$internal_cflags -ffunction-sections"; AC_DEFINE([FUNCTION_SECTIONS])], [*], [function_sections=false; AC_MSG_NOTICE([Function sections are not supported by $ocaml_cv_cc_vendor.])])])], [function_sections=false]); AS_IF([test x"$function_sections" = "xfalse"], [AS_IF([test x"$enable_function_sections" = "xyes"], [AC_MSG_ERROR([Function sections are not supported.])], [AC_MSG_NOTICE([Disabling function sections.])])], [])]) AS_IF([test x"$with_afl" = "xyes"], [afl=true], [afl=false]) AS_IF([test x"$enable_force_safe_string" = "xno"], [force_safe_string=false], [AC_DEFINE([CAML_SAFE_STRING]) force_safe_string=true]) AS_IF([test x"$DEFAULT_STRING" = "xunsafe"], [default_safe_string=false], [default_safe_string=true]) oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" ocamlc_cflags="$common_cflags $sharedlib_cflags \$(CFLAGS)" ocamlc_cppflags="$common_cppflags \$(CPPFLAGS)" cclibs="$cclibs $mathlib" AS_CASE([$host], [*-*-mingw32], [bytecclibs="-lws2_32 -lversion" nativecclibs="-lws2_32 -lversion"], [*-pc-windows], [bytecclibs="advapi32.lib ws2_32.lib version.lib" nativecclibs="advapi32.lib ws2_32.lib version.lib"], [bytecclibs="$cclibs $DLLIBS $pthread_link $instrumented_runtime_ldlibs" nativecclibs="$cclibs $DLLIBS"]) AS_IF([test x"$libdir" = x'${exec_prefix}/lib'], [libdir="$libdir"/ocaml]) AS_IF([test x"$mandir" = x'${datarootdir}/man'], [mandir='${prefix}/man']) AS_CASE([$host], [*-*-mingw32|*-pc-windows], [max_testsuite_dir_retries=1 AS_CASE([$WINDOWS_UNICODE_MODE], [ansi], [windows_unicode=0], [compatible|""], [windows_unicode=1], [AC_MSG_ERROR([unexpected windows unicode mode])])], [max_testsuite_dir_retries=0 windows_unicode=0]) # Define flexlink chain and flags correctly for the different Windows ports AS_CASE([$host], [i686-w64-mingw32], [flexdll_chain='mingw' flexlink_flags="-chain $flexdll_chain -stack 16777216"], [x86_64-w64-mingw32], [flexdll_chain='mingw64' flexlink_flags="-chain $flexdll_chain -stack 33554432"], [i686-pc-windows], [flexdll_chain='msvc' flexlink_flags="-merge-manifest -stack 16777216"], [x86_64-pc-windows], [flexdll_chain='msvc64' flexlink_flags="-x64 -merge-manifest -stack 33554432"]) # Define default prefix correctly for the different Windows ports AS_IF([test x"$prefix" = "xNONE"], [AS_CASE([$host], [i686-w64-mingw32], [prefix='C:/ocamlmgw'], [x86_64-w64-mingw32], [prefix='C:/ocamlmgw64'], [i686-pc-windows], [prefix='C:/ocamlms'], [x86_64-pc-windows], [prefix='C:/ocamlms64'])], [AS_IF([test x"$unix_or_win32" = "xwin32" \ && test "$host_vendor-$host_os" != "$build_vendor-$build_os" ], [AS_CASE([$build], [*-pc-cygwin], [prefix=`cygpath -m "$prefix"`])])]) # Define a few macros that were defined in config/m-nt.h # but whose value is not guessed properly by configure # (all this should be understood and fixed) AS_CASE([$host], [*-*-mingw32|*-pc-windows], [AC_DEFINE([HAS_BROKEN_PRINTF]) AC_DEFINE([HAS_STRERROR]) AC_DEFINE([HAS_IPV6]) AC_DEFINE([HAS_NICE])]) AS_IF([test x"$enable_stdlib_manpages" != "xno"], [stdlib_manpages=true],[stdlib_manpages=false]) AC_OUTPUT