1AC_DEFUN([CHECK_ERLANG], [
2#
3# Erlang checks for mod_erlang_event
4#
5AC_ARG_WITH(
6	[erlang],
7	[AS_HELP_STRING([--with-erlang], [Use system provided version of erlang (default: try)])],
8	[with_erlang="$withval"],
9	[with_erlang="try"]
10)
11
12AM_CONDITIONAL([HAVE_ERLANG],[false])
13if test "$with_erlang" != "no"
14then
15	save_CFLAGS="$CFLAGS"
16	save_LIBS="$LIBS"
17
18	if test "$with_erlang" != "yes" -a "$with_erlang" != "try" ; then
19		AC_MSG_CHECKING([for erlang])
20		if test ! -x "$with_erlang" ; then
21			AC_MSG_ERROR([Specified erlang does not exist or is not executable: $with_erlang])
22		fi
23		AC_MSG_RESULT([$with_erlang])
24		AC_SUBST([ERLANG], ["$with_erlang"])
25	else
26		AC_PATH_PROG([ERLANG], ["erl"], ["no"], ["$PATH:/usr/bin:/usr/local/bin"])
27	fi
28
29	if test "$ERLANG" != "no" ; then
30		AC_MSG_CHECKING([erlang version])
31		ERLANG_VER="`$ERLANG -version 2>&1 | cut -d' ' -f6`"
32
33		if test -z "$ERLANG_VER" ; then
34			AC_MSG_ERROR([Unable to detect erlang version])
35		fi
36		AC_MSG_RESULT([$ERLANG_VER])
37
38		ERLANG_LIBDIR=`$ERLANG -noshell -eval 'io:format("~n~s/lib~n", [[code:lib_dir("erl_interface")]]).' -s erlang halt | tail -n 1`
39		AC_MSG_CHECKING([erlang libdir])
40		if test -z "`echo $ERLANG_LIBDIR`" ; then
41			AC_MSG_ERROR([failed])
42		else
43			ERLANG_LDFLAGS="-L$ERLANG_LIBDIR $ERLANG_LDFLAGS"
44			LIBS="-L$ERLANG_LIBDIR $LIBS"
45		fi
46		AC_MSG_RESULT([$ERLANG_LIBDIR])
47
48		ERLANG_INCDIR=`$ERLANG -noshell -eval 'io:format("~n~s/include~n", [[code:lib_dir("erl_interface")]]).' -s erlang halt | tail -n 1`
49		AC_MSG_CHECKING([erlang incdir])
50		if test -z "`echo $ERLANG_INCDIR`" ; then
51			AC_MSG_ERROR([failed])
52		else
53			ERLANG_CFLAGS="-I$ERLANG_INCDIR $ERLANG_CFLAGS"
54			CFLAGS="-I$ERLANG_INCDIR $CFLAGS"
55		fi
56		AC_MSG_RESULT([$ERLANG_INCDIR])
57
58		AC_CHECK_HEADERS([ei.h], [has_ei_h="yes"], [has_ei_h="no"])
59
60		ERLANG_LIB="ei"
61
62		# check liei
63		AC_CHECK_LIB([$ERLANG_LIB], [ei_encode_version], [has_libei="yes"], [has_libei="no"])
64		# maybe someday ei will actually expose this?
65		AC_CHECK_LIB([$ERLANG_LIB], [ei_link_unlink], [ERLANG_CFLAGS="$ERLANG_CFLAGS -DEI_LINK_UNLINK"])
66
67		if test "$has_libei" = "no" ; then
68			AS_IF([test "$with_erlang" = "try"],
69			 	[AC_MSG_WARN([$ERLANG_LIB is unusable])],
70				[AC_MSG_ERROR([$ERLANG_LIB is unusable])]
71			)
72		elif test "$has_ei_h" = "no"; then
73			AS_IF([test "$with_erlang" = "try"],
74				[AC_MSG_WARN([ei.h is unusable - are the erlang development headers installed?])],
75				[AC_MSG_ERROR([ei.h is unusable - are the erlang development headers installed?])]
76			)
77		else
78		    ERLANG_MAJOR="`echo "$ERLANG_VER" | sed 's/\([[^.]][[^.]]*\).*/\1/'`"
79            ERLANG_MINOR="`echo "$ERLANG_VER" | sed 's/[[^.]][[^.]]*.\([[^.]][[^.]]*\).*/\1/'`"
80			ERLANG_LDFLAGS="$ERLANG_LDFLAGS -lei"
81			AC_MSG_NOTICE([Your erlang seems OK, do not forget to enable mod_erlang_event in modules.conf])
82			AC_SUBST([ERLANG_CFLAGS],  [$ERLANG_CFLAGS])
83			AC_SUBST([ERLANG_LDFLAGS], [$ERLANG_LDFLAGS])
84            AC_SUBST([ERLANG_VERSION], [$ERLANG_VER])
85            AC_SUBST([ERLANG_MAJOR], [$ERLANG_MAJOR])
86            AC_SUBST([ERLANG_MINOR], [$ERLANG_MINOR])
87			AM_CONDITIONAL([HAVE_ERLANG],[true])
88		fi
89
90		LIBS="$save_LIBS"
91		CFLAGS="$save_CFLAGS"
92
93	else
94		AS_IF([test "$with_erlang" = "try"],
95			[AC_MSG_WARN([Could not find erlang, mod_erlang_event will not build, use --with-erlang to specify the location])],
96			[AC_MSG_ERROR([Could not find erlang, use --with-erlang to specify the location])]
97		)
98	fi
99else
100	AC_MSG_WARN([erlang support disabled, building mod_erlang_event will fail!])
101fi
102
103])
104