VPATH stuff works
[gnupg.git] / aclocal.m4
1 dnl aclocal.m4  for g10
2
3 AC_PREREQ(2.5)
4
5 dnl --------------------------------------------------
6 dnl NLS stuff taken from gettext-0.10 (wk 28.01.98)
7 dnl --------------------------------------------------
8 AC_DEFUN(md_TYPE_PTRDIFF_T,
9   [AC_CACHE_CHECK([for ptrdiff_t], ac_cv_type_ptrdiff_t,
10      [AC_TRY_COMPILE(stddef.h, [ptrdiff_t p], ac_cv_type_ptrdiff_t=yes,
11                      ac_cv_type_ptrdiff_t=no)])
12    if test $ac_cv_type_ptrdiff_t = yes; then
13      AC_DEFINE(HAVE_PTRDIFF_T)
14    fi
15 ])
16
17 AC_DEFUN(md_PATH_PROG,
18   [AC_PATH_PROG($1,$2,$3)dnl
19    if echo $$1 | grep openwin > /dev/null; then
20      echo "WARNING: Do not use OpenWin's $2.  (Better remove it.) >&AC_FD_MSG"
21      ac_cv_path_$1=$2
22      $1=$2
23    fi
24 ])
25
26
27 dnl --------------------------------------------------------- ##
28 dnl Use AC_PROG_INSTALL, supplementing it with INSTALL_SCRIPT ##
29 dnl substitution.                                             ##
30 dnl --------------------------------------------------------- ##
31
32 AC_DEFUN(fp_PROG_INSTALL,
33 [AC_PROG_INSTALL
34 test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL} -m 755'
35 AC_SUBST(INSTALL_SCRIPT)dnl
36 ])
37
38 dnl Check NLS options
39
40 AC_DEFUN(ud_LC_MESSAGES,
41   [if test $ac_cv_header_locale_h = yes; then
42     AC_CACHE_CHECK([for LC_MESSAGES], ud_cv_val_LC_MESSAGES,
43       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
44        ud_cv_val_LC_MESSAGES=yes, ud_cv_val_LC_MESSAGES=no)])
45     if test $ud_cv_val_LC_MESSAGES = yes; then
46       AC_DEFINE(HAVE_LC_MESSAGES)
47     fi
48   fi])
49
50 AC_DEFUN(ud_WITH_NLS,
51   [AC_MSG_CHECKING([whether NLS is requested])
52     dnl Default is enabled NLS
53     AC_ARG_ENABLE(nls,
54       [  --disable-nls           do not use Native Language Support],
55       nls_cv_use_nls=$enableval, nls_cv_use_nls=yes)
56     AC_MSG_RESULT($nls_cv_use_nls)
57
58     dnl If we use NLS figure out what method
59     if test "$nls_cv_use_nls" = "yes"; then
60       AC_DEFINE(ENABLE_NLS)
61       AC_MSG_CHECKING([for explicitly using GNU gettext])
62       AC_ARG_WITH(gnu-gettext,
63         [  --with-gnu-gettext      use the GNU gettext library],
64         nls_cv_force_use_gnu_gettext=$withval,
65         nls_cv_force_use_gnu_gettext=no)
66       AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
67
68       if test "$nls_cv_force_use_gnu_gettext" = "yes"; then
69         nls_cv_use_gnu_gettext=yes
70       else
71         dnl User does not insist on using GNU NLS library.  Figure out what
72         dnl to use.  If gettext or catgets are available (in this order) we
73         dnl use this.  Else we have to fall back to GNU NLS library.
74         AC_CHECK_LIB(intl, main)
75         AC_CHECK_LIB(i, main)
76         CATOBJEXT=NONE
77         AC_CHECK_FUNC(gettext,
78           [AC_DEFINE(HAVE_GETTEXT)
79            md_PATH_PROG(MSGFMT, msgfmt, no)dnl
80            if test "$MSGFMT" != "no"; then
81              AC_CHECK_FUNCS(dcgettext)
82              md_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
83              md_PATH_PROG(XGETTEXT, xgettext, xgettext)
84              CATOBJEXT=.mo
85              INSTOBJEXT=.mo
86              DATADIRNAME=lib
87            fi])
88
89         if test "$CATOBJEXT" = "NONE"; then
90           dnl No gettext in C library.  Try catgets next.
91           AC_CHECK_FUNC(catgets,
92             [AC_DEFINE(HAVE_CATGETS)
93              INTLOBJS="\$(CATOBJS)"
94              AC_PATH_PROG(GENCAT, gencat, no)dnl
95              if test "$GENCAT" != "no"; then
96                AC_PATH_PROGS(GMSGFMT, [gmsgfmt msgfmt], msgfmt)
97                md_PATH_PROG(XGETTEXT, xgettext, xgettext)
98                CATOBJEXT=.cat
99                INSTOBJEXT=.cat
100                DATADIRNAME=lib
101                INTLDEPS="../intl/libintl.a"
102                INTLLIBS=$INTLDEPS
103                LIBS=`echo $LIBS | sed -e 's/-lintl//'`
104                nls_cv_header_intl=intl/libintl.h
105                nls_cv_header_libgt=intl/libgettext.h
106              fi])
107         fi
108
109         if test "$CATOBJEXT" = "NONE"; then
110           dnl Neither gettext nor catgets in included in the C library.
111           dnl Fall back on GNU gettext library.
112           nls_cv_use_gnu_gettext=yes
113         fi
114       fi
115
116       if test "$nls_cv_use_gnu_gettext" = "yes"; then
117         dnl Mark actions used to generate GNU NLS library.
118         INTLOBJS="\$(GETTOBJS)"
119         md_PATH_PROG(MSGFMT, msgfmt, msgfmt)
120         md_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
121         md_PATH_PROG(XGETTEXT, xgettext, xgettext)
122         AC_SUBST(MSGFMT)
123         CATOBJEXT=.gmo
124         INSTOBJEXT=.mo
125         DATADIRNAME=share
126         INTLDEPS="../intl/libintl.a"
127         INTLLIBS=$INTLDEPS
128         LIBS=`echo $LIBS | sed -e 's/-lintl//'`
129         nls_cv_header_intl=intl/libintl.h
130         nls_cv_header_libgt=intl/libgettext.h
131       fi
132
133       # We need to process the intl/ and po/ directory.
134       INTLSUB=intl
135       POSUB=po
136     else
137       DATADIRNAME=share
138       nls_cv_header_intl=intl/libintl.h
139       nls_cv_header_libgt=intl/libgettext.h
140     fi
141
142     dnl These rules are solely for the distribution goal.  While doing this
143     dnl we only have to keep exactly one list of the available catalogs
144     dnl in configure.in.
145     for lang in $ALL_LINGUAS; do
146       GMOFILES="$GMOFILES $lang.gmo"
147       POFILES="$POFILES $lang.po"
148     done
149
150     dnl Make all variables we use known to autoconf.
151     AC_SUBST(CATALOGS)
152     AC_SUBST(CATOBJEXT)
153     AC_SUBST(DATADIRNAME)
154     AC_SUBST(GMOFILES)
155     AC_SUBST(INSTOBJEXT)
156     AC_SUBST(INTLDEPS)
157     AC_SUBST(INTLLIBS)
158     AC_SUBST(INTLOBJS)
159     AC_SUBST(INTLSUB)
160     AC_SUBST(POFILES)
161     AC_SUBST(POSUB)
162   ])
163
164 AC_DEFUN(ud_GNU_GETTEXT,
165   [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
166    AC_REQUIRE([AC_PROG_CC])dnl
167    AC_REQUIRE([AC_PROG_RANLIB])dnl
168    AC_REQUIRE([AC_HEADER_STDC])dnl
169    AC_REQUIRE([AC_C_CONST])dnl
170    AC_REQUIRE([AC_C_INLINE])dnl
171    AC_REQUIRE([AC_TYPE_OFF_T])dnl
172    AC_REQUIRE([AC_TYPE_SIZE_T])dnl
173    AC_REQUIRE([AC_FUNC_ALLOCA])dnl
174    AC_REQUIRE([AC_FUNC_MMAP])dnl
175
176    AC_CHECK_HEADERS([limits.h locale.h nl_types.h malloc.h string.h unistd.h values.h])
177    AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp])
178
179    if test "${ac_cv_func_stpcpy+set}" != "set"; then
180      AC_CHECK_FUNCS(stpcpy)
181    fi
182    if test "${ac_cv_func_stpcpy}" = "yes"; then
183      AC_DEFINE(HAVE_STPCPY)
184    fi
185
186    ud_LC_MESSAGES
187    ud_WITH_NLS
188
189    if test "x$CATOBJEXT" != "x"; then
190      if test "x$ALL_LINGUAS" = "x"; then
191        LINGUAS=
192      else
193        AC_MSG_CHECKING(for catalogs to be installed)
194        NEW_LINGUAS=
195        for lang in ${LINGUAS=$ALL_LINGUAS}; do
196          case "$ALL_LINGUAS" in
197           *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
198          esac
199        done
200        LINGUAS=$NEW_LINGUAS
201        AC_MSG_RESULT($LINGUAS)
202      fi
203
204      dnl Construct list of names of catalog files to be constructed.
205      if test -n "$LINGUAS"; then
206        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
207      fi
208    fi
209
210    dnl Determine which catalog format we have (if any is needed)
211    dnl For now we know about two different formats:
212    dnl   Linux and the normal X/Open format
213    test -d intl || mkdir intl
214    if test "$CATOBJEXT" = ".cat"; then
215      AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
216
217      dnl Transform the SED scripts while copying because some dumb SEDs
218      dnl cannot handle comments.
219      sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
220    fi
221    dnl po2tbl.sed is always needed.
222    sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
223      $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
224
225    dnl Generate list of files to be processed by xgettext which will
226    dnl be included in po/Makefile.
227    test -d po || mkdir po
228    if test "x$srcdir" != "x."; then
229      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
230        posrcprefix="$srcdir/"
231      else
232        posrcprefix="../$srcdir/"
233      fi
234    else
235      posrcprefix="../"
236    fi
237    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
238         < $srcdir/po/POTFILES.in > po/POTFILES
239   ])
240
241
242
243 dnl ----------------------------------------------------
244 dnl ------------- macros for g10 -----------------------
245 dnl ----------------------------------------------------
246
247
248 dnl WK_MSG_PRINT(STRING)
249 dnl print a message
250 dnl
251 define(WK_MSG_PRINT,
252   [ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG
253   ])
254
255
256 dnl WK_CHECK_TYPEDEF(TYPE, HAVE_NAME)
257 dnl Check wether a typedef exists and create a #define $2 if it exists
258 dnl
259 AC_DEFUN(WK_CHECK_TYPEDEF,
260   [ AC_MSG_CHECKING(for $1 typedef)
261     AC_CACHE_VAL(wk_cv_typedef_$1,
262     [AC_TRY_COMPILE([#include <stdlib.h>
263     #include <sys/types.h>], [
264     #undef $1
265     int a = sizeof($1);
266     ], wk_cv_typedef_$1=yes, wk_cv_typedef_$1=no )])
267     AC_MSG_RESULT($wk_cv_typedef_$1)
268     if test "$wk_cv_typedef_$1" = yes; then
269         AC_DEFINE($2)
270     fi
271   ])
272
273
274 dnl WK_LINK_FILES( SRC, DEST )
275 dnl same as AC_LINK_FILES, but collet the files to link in
276 dnl some special variables and do the link macro
277 dnl when WK_DO_LINK_FILES is called
278 dnl This is a workaround for AC_LINK_FILES, because it does not work
279 dnl correct when using a caching scheme
280 dnl
281 define(WK_LINK_FILES,
282   [ if test "x$wk_link_files_src" = "x"; then
283         wk_link_files_src="$1"
284         wk_link_files_dst="$2"
285     else
286         wk_link_files_src="$wk_link_files_src $1"
287         wk_link_files_dst="$wk_link_files_dst $2"
288     fi
289   ])
290 define(WK_DO_LINK_FILES,
291   [ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst )
292   ])
293
294
295 dnl WK_CHECK_ENDIAN
296 dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
297 dnl
298 define(WK_CHECK_ENDIAN,
299   [ if test "$cross_compiling" = yes; then
300         AC_MSG_WARN(cross compiling; assuming little endianess)
301     fi
302     AC_MSG_CHECKING(endianess)
303     AC_CACHE_VAL(wk_cv_c_endian,
304       [ wk_cv_c_endian=unknown
305         # See if sys/param.h defines the BYTE_ORDER macro.
306         AC_TRY_COMPILE([#include <sys/types.h>
307         #include <sys/param.h>], [
308         #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
309          bogus endian macros
310         #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
311         AC_TRY_COMPILE([#include <sys/types.h>
312         #include <sys/param.h>], [
313         #if BYTE_ORDER != BIG_ENDIAN
314          not big endian
315         #endif], wk_cv_c_endian=big, wk_cv_c_endian=big)])
316         if test "$wk_cv_c_endian" = unknown; then
317             AC_TRY_RUN([main () {
318               /* Are we little or big endian?  From Harbison&Steele.  */
319               union
320               {
321                 long l;
322                 char c[sizeof (long)];
323               } u;
324               u.l = 1;
325               exit (u.c[sizeof (long) - 1] == 1);
326               }],
327               wk_cv_c_endian=little,
328               wk_cv_c_endian=big,
329               wk_cv_c_endian=little
330             )
331         fi
332       ])
333     AC_MSG_RESULT([$wk_cv_c_endian])
334     if test "$wk_cv_c_endian" = little; then
335       AC_DEFINE(LITTLE_ENDIAN_HOST)
336     else
337       AC_DEFINE(BIG_ENDIAN_HOST)
338     fi
339   ])
340
341 dnl WK_CHECK_CACHE
342 dnl
343 define(WK_CHECK_CACHE,
344   [ AC_MSG_CHECKING(cached information)
345     wk_hostcheck="$target"
346     AC_CACHE_VAL(wk_cv_hostcheck, [ wk_cv_hostcheck="$wk_hostcheck" ])
347     if test "$wk_cv_hostcheck" != "$wk_hostcheck"; then
348         AC_MSG_RESULT(changed)
349         AC_MSG_WARN(config.cache exists!)
350         AC_MSG_ERROR(you must do 'make distclean' first to compile for
351                  different target or different parameters.)
352     else
353         AC_MSG_RESULT(ok)
354     fi
355   ])
356
357