# This file is part of Autoconf. -*- Autoconf -*- # Erlang/OTP language support. # Copyright (C) 2006, 2008-2012 Free Software Foundation, Inc. # This file is part of Autoconf. This program is free # software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Under Section 7 of GPL version 3, you are granted additional # permissions described in the Autoconf Configure Script Exception, # version 3.0, as published by the Free Software Foundation. # # You should have received a copy of the GNU General Public License # and a copy of the Autoconf Configure Script Exception along with # this program; see the files COPYINGv3 and COPYING.EXCEPTION # respectively. If not, see . # Written by Romain Lenglet. # Table of Contents: # # 0. Utility macros # # 1. Language selection # and routines to produce programs in a given language. # # 2. Producing programs in a given language. # # 3. Looking for a compiler # And possibly the associated preprocessor. ## ------------------- ## ## 0. Utility macros. ## ## ------------------- ## # AC_ERLANG_PATH_ERLC([VALUE-IF-NOT-FOUND], [PATH]) # ------------------------------------------------- AC_DEFUN([AC_ERLANG_PATH_ERLC], [AC_ARG_VAR([ERLC], [Erlang/OTP compiler command [autodetected]])dnl if test -n "$ERLC"; then AC_MSG_CHECKING([for erlc]) AC_MSG_RESULT([$ERLC]) else AC_PATH_TOOL(ERLC, erlc, [$1], [$2]) fi AC_ARG_VAR([ERLCFLAGS], [Erlang/OTP compiler flags [none]])dnl ]) # AC_ERLANG_NEED_ERLC([PATH]) # --------------------------- AC_DEFUN([AC_ERLANG_NEED_ERLC], [AC_ERLANG_PATH_ERLC([not found], [$1]) if test "$ERLC" = "not found"; then AC_MSG_ERROR([Erlang/OTP compiler (erlc) not found but required]) fi ]) # AC_ERLANG_PATH_ERL([VALUE-IF-NOT-FOUND], [PATH]) # ------------------------------------------------ AC_DEFUN([AC_ERLANG_PATH_ERL], [AC_ARG_VAR([ERL], [Erlang/OTP interpreter command [autodetected]])dnl if test -n "$ERL"; then AC_MSG_CHECKING([for erl]) AC_MSG_RESULT([$ERL]) else AC_PATH_TOOL(ERL, erl, [$1], [$2])[]dnl fi ]) # AC_ERLANG_NEED_ERL([PATH]) # -------------------------- AC_DEFUN([AC_ERLANG_NEED_ERL], [AC_ERLANG_PATH_ERL([not found], [$1]) if test "$ERL" = "not found"; then AC_MSG_ERROR([Erlang/OTP interpreter (erl) not found but required]) fi ]) ## ----------------------- ## ## 1. Language selection. ## ## ----------------------- ## # AC_LANG(Erlang) # --------------- AC_LANG_DEFINE([Erlang], [erl], [ERL], [ERLC], [], [ac_ext=erl ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD' ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD && echo "[#]!/bin/sh" > conftest$ac_exeext && AS_ECHO(["\"$ERL\" -run conftest start -run init stop -noshell"]) >> conftest$ac_exeext && chmod +x conftest$ac_exeext' ]) # AC_LANG_ERLANG # -------------- AU_DEFUN([AC_LANG_ERLANG], [AC_LANG(Erlang)]) ## ----------------------- ## ## 2. Producing programs. ## ## ----------------------- ## # AC_LANG_PROGRAM(Erlang)([PROLOGUE], [BODY]) # ------------------------------------------- m4_define([AC_LANG_PROGRAM(Erlang)], [[-module(conftest). -export([start/0]).]] [$1 start() -> $2 . ]) # _AC_LANG_NULL_PROGRAM(Erlang) # ----------------------------- # Produce source that does nothing. m4_define([_AC_LANG_NULL_PROGRAM(Erlang)], [AC_LANG_PROGRAM([], [halt(0)])]) # _AC_LANG_IO_PROGRAM(Erlang) # --------------------------- # Produce source that performs I/O. m4_define([_AC_LANG_IO_PROGRAM(Erlang)], [AC_LANG_PROGRAM([], [dnl ReturnValue = case file:write_file("conftest.out", "") of {error, _} -> 1; ok -> 0 end, halt(ReturnValue)])]) ## -------------------------------------------- ## ## 3. Looking for Compilers and Preprocessors. ## ## -------------------------------------------- ## # AC_LANG_PREPROC(Erlang) # ----------------------- # Find the Erlang preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able. AC_DEFUN([AC_LANG_PREPROC(Erlang)], [m4_warn([syntax], [$0: No preprocessor defined for ]_AC_LANG)]) # AC_LANG_COMPILER(Erlang) # ------------------------ # Find the Erlang compiler. Must be AC_DEFUN'd to be AC_REQUIRE'able. AC_DEFUN([AC_LANG_COMPILER(Erlang)], [AC_REQUIRE([AC_ERLANG_PATH_ERLC])]) # AC_ERLANG_CHECK_LIB(LIBRARY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ---------------------------------------------------------------------- # Macro for checking if an Erlang library is installed, and to # determine its version. AC_DEFUN([AC_ERLANG_CHECK_LIB], [AC_REQUIRE([AC_ERLANG_PATH_ERLC])[]dnl AC_REQUIRE([AC_ERLANG_PATH_ERL])[]dnl AC_CACHE_CHECK([for Erlang/OTP '$1' library subdirectory], [ac_cv_erlang_lib_dir_$1], [AC_LANG_PUSH(Erlang)[]dnl AC_RUN_IFELSE( [AC_LANG_PROGRAM([], [dnl ReturnValue = case code:lib_dir("[$1]") of {error, bad_name} -> file:write_file("conftest.out", "not found\n"), 1; LibDir -> file:write_file("conftest.out", LibDir), 0 end, halt(ReturnValue)])], [ac_cv_erlang_lib_dir_$1=`cat conftest.out` rm -f conftest.out], [if test ! -f conftest.out; then AC_MSG_FAILURE([test Erlang program execution failed]) else ac_cv_erlang_lib_dir_$1="not found" rm -f conftest.out fi]) AC_LANG_POP(Erlang)[]dnl ]) AC_CACHE_CHECK([for Erlang/OTP '$1' library version], [ac_cv_erlang_lib_ver_$1], [AS_IF([test "$ac_cv_erlang_lib_dir_$1" = "not found"], [ac_cv_erlang_lib_ver_$1="not found"], [ac_cv_erlang_lib_ver_$1=`AS_ECHO(["$ac_cv_erlang_lib_dir_$1"]) | sed -n -e 's,^.*-\([[^/-]]*\)$,\1,p'`])[]dnl ]) AC_SUBST([ERLANG_LIB_DIR_$1], [$ac_cv_erlang_lib_dir_$1]) AC_SUBST([ERLANG_LIB_VER_$1], [$ac_cv_erlang_lib_ver_$1]) AS_IF([test "$ac_cv_erlang_lib_dir_$1" = "not found"], [$3], [$2]) ])# AC_ERLANG_CHECK_LIB # AC_ERLANG_SUBST_ROOT_DIR # ------------------------ # Determines the Erlang/OTP root directory. AC_DEFUN([AC_ERLANG_SUBST_ROOT_DIR], [AC_REQUIRE([AC_ERLANG_NEED_ERLC])[]dnl AC_REQUIRE([AC_ERLANG_NEED_ERL])[]dnl AC_CACHE_CHECK([for Erlang/OTP root directory], [ac_cv_erlang_root_dir], [AC_LANG_PUSH(Erlang)[]dnl AC_RUN_IFELSE( [AC_LANG_PROGRAM([], [dnl RootDir = code:root_dir(), file:write_file("conftest.out", RootDir), ReturnValue = 0, halt(ReturnValue)])], [ac_cv_erlang_root_dir=`cat conftest.out` rm -f conftest.out], [rm -f conftest.out AC_MSG_FAILURE([test Erlang program execution failed])]) AC_LANG_POP(Erlang)[]dnl ]) AC_SUBST([ERLANG_ROOT_DIR], [$ac_cv_erlang_root_dir]) ])# AC_ERLANG_SUBST_ROOT_DIR # AC_ERLANG_SUBST_LIB_DIR # ----------------------- AC_DEFUN([AC_ERLANG_SUBST_LIB_DIR], [AC_REQUIRE([AC_ERLANG_NEED_ERLC])[]dnl AC_REQUIRE([AC_ERLANG_NEED_ERL])[]dnl AC_CACHE_CHECK([for Erlang/OTP library base directory], [ac_cv_erlang_lib_dir], [AC_LANG_PUSH(Erlang)[]dnl AC_RUN_IFELSE( [AC_LANG_PROGRAM([], [dnl LibDir = code:lib_dir(), file:write_file("conftest.out", LibDir), ReturnValue = 0, halt(ReturnValue)])], [ac_cv_erlang_lib_dir=`cat conftest.out` rm -f conftest.out], [rm -f conftest.out AC_MSG_FAILURE([test Erlang program execution failed])]) AC_LANG_POP(Erlang)[]dnl ]) AC_SUBST([ERLANG_LIB_DIR], [$ac_cv_erlang_lib_dir]) ])# AC_ERLANG_SUBST_LIB_DIR # AC_ERLANG_SUBST_INSTALL_LIB_DIR # ------------------------------- # Directories for installing Erlang/OTP packages are separated from the # directories determined by running the Erlang/OTP installation that is used # for building. AC_DEFUN([AC_ERLANG_SUBST_INSTALL_LIB_DIR], [AC_MSG_CHECKING([for Erlang/OTP library installation base directory]) AC_ARG_VAR([ERLANG_INSTALL_LIB_DIR], [Erlang/OTP library installation base directory [LIBDIR/erlang/lib]]) if test -n "$ERLANG_INSTALL_LIB_DIR"; then AC_MSG_RESULT([$ERLANG_INSTALL_LIB_DIR]) else AC_SUBST([ERLANG_INSTALL_LIB_DIR], ['${libdir}/erlang/lib']) AC_MSG_RESULT([$libdir/erlang/lib]) fi ])# AC_ERLANG_SUBST_INSTALL_LIB_DIR # AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR(PACKAGE_TARNAME, PACKAGE_VERSION) # -------------------------------------------------------------------- AC_DEFUN([AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR], [AC_REQUIRE([AC_ERLANG_SUBST_INSTALL_LIB_DIR])[]dnl AC_MSG_CHECKING([for Erlang/OTP '$1' library installation subdirectory]) AC_ARG_VAR([ERLANG_INSTALL_LIB_DIR_$1], [Erlang/OTP '$1' library installation subdirectory [ERLANG_INSTALL_LIB_DIR/$1-$2]]) if test -n "$ERLANG_INSTALL_LIB_DIR_$1"; then AC_MSG_RESULT([$ERLANG_INSTALL_LIB_DIR_$1]) else AC_SUBST([ERLANG_INSTALL_LIB_DIR_$1], ['${ERLANG_INSTALL_LIB_DIR}/$1-$2']) AC_MSG_RESULT([$ERLANG_INSTALL_LIB_DIR/$1-$2]) fi ])# AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR # AC_ERLANG_SUBST_ERTS_VER # ------------------------ # Determines the Erlang runtime system version. AC_DEFUN([AC_ERLANG_SUBST_ERTS_VER], [AC_REQUIRE([AC_ERLANG_NEED_ERLC])[]dnl AC_REQUIRE([AC_ERLANG_NEED_ERL])[]dnl AC_CACHE_CHECK([for Erlang/OTP ERTS version], [ac_cv_erlang_erts_ver], [AC_LANG_PUSH([Erlang])[]dnl AC_RUN_IFELSE( [AC_LANG_PROGRAM([], [dnl Version = erlang:system_info(version), file:write_file("conftest.out", Version), ReturnValue = 0, halt(ReturnValue)])], [ac_cv_erlang_erts_ver=`cat conftest.out` rm -f conftest.out], [rm -f conftest.out AC_MSG_FAILURE([test Erlang program execution failed])]) AC_LANG_POP([Erlang])[]dnl ]) AC_SUBST([ERLANG_ERTS_VER], [$ac_cv_erlang_erts_ver]) ])# AC_ERLANG_SUBST_ERTS_VER