Elinks currently only support GB2312 as Chinese encoding, but GBK and
[elinks.git] / config / m4 / features.m4
blob8fd4f20bc92b99426ac6b622da57514d9ff6175f
1 dnl ===================================================================
2 dnl Macros for various checks
3 dnl ===================================================================
5 dnl TODO: Make EL_CONFIG* macros assume CONFIG_* defines so it is possible
6 dnl to write EL_CONFIG_DEPENDS(SCRIPTING, [GUILE LUA PERL], [...])
8 dnl EL_CONFIG(define, what)
9 AC_DEFUN([EL_CONFIG], [
10           $1=yes
11           ABOUT_$1="$2"
12           AC_DEFINE($1, 1, [Define if you want: $2 support])])
14 dnl EL_LOG_CONFIG(define, description, value)
15 dnl The first parameter (define) will not be expanded by m4,
16 dnl and it must be a valid name for a shell variable.
17 AC_DEFUN([EL_LOG_CONFIG],
19         about="$2"
20         value="$3"
21         [msgdots2="`echo $about | sed 's/[0-9]/./g'`"]
22         [msgdots1="`echo $msgdots2 | sed 's/[a-z]/./g'`"]
23         [msgdots0="`echo $msgdots1 | sed 's/[A-Z]/./g'`"]
24         [msgdots="`echo $msgdots0 | sed 's/[-_ ()]/./g'`"]
25         DOTS="................................"
26         dots=`echo $DOTS | sed "s/$msgdots//"`
28         # $msgdots too big?
29         if test "$dots" = "$DOTS"; then
30                 dots=""
31         fi
33         if test -z "$value"; then
34                 value="$[$1]"
35         fi
37         echo "$about $dots $value" >> features.log
38         AC_SUBST([$1])
41 dnl EL_CONFIG_DEPENDS(define, CONFIG_* dependencies, what)
42 AC_DEFUN([EL_CONFIG_DEPENDS],
44         $1=no
45         el_value=
47         for dependency in $2; do
48                 # Hope this is portable?!? --jonas
49                 eval el_config_value=$`echo $dependency`
51                 if test "$el_config_value" = yes; then
52                         el_about_dep=$`echo ABOUT_$dependency`
53                         eval depvalue=$el_about_dep
55                         if test -z "$el_value"; then
56                                 el_value="$depvalue"
57                         else
58                                 el_value="$el_value, $depvalue"
59                         fi
60                         $1=yes
61                 fi
62         done
64         if test "[$]$1" = yes; then
65                 EL_CONFIG($1, [$3])
66         fi
67         EL_LOG_CONFIG([$1], [$3], [$el_value])
70 dnl EL_ARG_ENABLE(define, name, conf-help, arg-help)
71 AC_DEFUN([EL_ARG_ENABLE],
73         AC_ARG_ENABLE($2, [$4],
74         [
75                 if test "$enableval" != no; then enableval="yes"; fi
76                 $1="$enableval";
77         ])
79         if test "x[$]$1" = xyes; then
80                 EL_CONFIG($1, [$3])
81         else
82                 $1=no
83         fi
84         EL_LOG_CONFIG([$1], [$3], [])
87 dnl EL_ARG_DEPEND(define, name, depend, conf-help, arg-help)
88 AC_DEFUN([EL_ARG_DEPEND],
90         AC_ARG_ENABLE($2, [$5],
91         [
92                 if test "$enableval" != no; then enableval="yes"; fi
93                 $1="$enableval"
94         ])
96         ENABLE_$1="[$]$1";
97         if test "x[$]$1" = xyes; then
98                 # require all dependencies to be met
99                 for dependency in $3; do
100                         el_name=`echo "$dependency" | sed 's/:.*//'`;
101                         el_arg=`echo "$dependency" | sed 's/.*://'`;
102                         # Hope this is portable?!? --jonas
103                         eval el_value=$`echo $el_name`;
105                         if test "x$el_value" != "x$el_arg"; then
106                                 ENABLE_$1=no;
107                                 break;
108                         fi
109                 done
111                 if test "[$]ENABLE_$1" = yes; then
112                         EL_CONFIG($1, [$4])
113                 else
114                         $1=no;
115                 fi
116         else
117                 $1=no;
118         fi
119         EL_LOG_CONFIG([$1], [$4], [])
122 dnl EL_DEFINE(define, what)
123 AC_DEFUN([EL_DEFINE], [AC_DEFINE($1, 1, [Define if you have $2])])
125 dnl EL_CHECK_CODE(type, define, includes, code)
126 AC_DEFUN([EL_CHECK_CODE],
128         $2=yes;
129         AC_MSG_CHECKING([for $1])
130         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$3]], [[$4]])],[EL_DEFINE($2, [$1])],[$2=no])
131         AC_MSG_RESULT([$]$2)
134 dnl EL_CHECK_TYPE(type, default)
135 AC_DEFUN([EL_CHECK_TYPE],
137         EL_CHECK_TYPE_LOCAL=yes;
138         AC_MSG_CHECKING([for $1])
139         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
140 #include <sys/types.h>
141         ]], [[int a = sizeof($1);]])],[EL_CHECK_TYPE_LOCAL=yes],[EL_CHECK_TYPE_LOCAL=no])
142         AC_MSG_RESULT([$]EL_CHECK_TYPE_LOCAL)
143         if test "x[$]EL_CHECK_TYPE_LOCAL" != "xyes"; then
144                 AC_DEFINE($1, $2, [Define to $2 if <sys/types.h> doesn't define.])
145         fi
148 dnl EL_CHECK_SYS_TYPE(type, define, includes)
149 AC_DEFUN([EL_CHECK_SYS_TYPE],
151         EL_CHECK_CODE([$1], [$2], [
152 #include <sys/types.h>
154         ], [int a = sizeof($1);])
157 dnl EL_CHECK_NET_TYPE(type, define, include)
158 AC_DEFUN([EL_CHECK_NET_TYPE],
160         EL_CHECK_SYS_TYPE([$1], [$2], [
161 #include<sys/socket.h>
163         ])
166 dnl EL_CHECK_INT_TYPE(type, define)
167 AC_DEFUN([EL_CHECK_INT_TYPE],
169         EL_CHECK_SYS_TYPE([$1], [$2], [
170 #ifdef HAVE_STDINT_H
171 #include <stdint.h>
172 #endif
173 #ifdef HAVE_INTTYPES_H
174 #include <inttypes.h>
175 #endif
176         ])
180 dnl Save and restore the current build flags
182 AC_DEFUN([EL_SAVE_FLAGS],
184         CFLAGS_X="$CFLAGS";
185         CPPFLAGS_X="$CPPFLAGS";
186         LDFLAGS_X="$LDFLAGS";
187         LIBS_X="$LIBS";
190 AC_DEFUN([EL_RESTORE_FLAGS],
192         CFLAGS="$CFLAGS_X";
193         CPPFLAGS="$CPPFLAGS_X";
194         LDFLAGS="$LDFLAGS_X";
195         LIBS="$LIBS_X";