Search engine: fix return number of found bytes
[midnight-commander.git] / acinclude.m4
blob6b9072b58a74ef0bc70e8ec1735f826e8d173327
1 dnl MC_UNDELFS_CHECKS
2 dnl    Check for ext2fs undel support.
3 dnl    Set shell variable ext2fs_undel to "yes" if we have it,
4 dnl    "no" otherwise.  May define USE_EXT2FSLIB for cpp.
5 dnl    Will set EXT2FS_UNDEL_LIBS to required libraries.
7 AC_DEFUN([MC_UNDELFS_CHECKS], [
8   ext2fs_undel=no
9   EXT2FS_UNDEL_LIBS=
10   AC_CHECK_HEADERS([ext2fs/ext2_fs.h linux/ext2_fs.h], [ext2_fs_h=yes; break])
11   if test x$ext2_fs_h = xyes; then
12     AC_CHECK_HEADERS([ext2fs/ext2fs.h], [ext2fs_ext2fs_h=yes], ,
13                      [
14 #include <stdio.h>
15 #ifdef HAVE_EXT2FS_EXT2_FS_H
16 #include <ext2fs/ext2_fs.h>
17 #else
18 #undef umode_t
19 #include <linux/ext2_fs.h>
20 #endif
21                      ])
22     if test x$ext2fs_ext2fs_h = xyes; then
23       AC_DEFINE(USE_EXT2FSLIB, 1,
24                 [Define to enable undelete support on ext2])
25       ext2fs_undel=yes
26       EXT2FS_UNDEL_LIBS="-lext2fs -lcom_err"
27       AC_CHECK_TYPE(ext2_ino_t, ,
28                     [AC_DEFINE(ext2_ino_t, ino_t,
29                                [Define to ino_t if undefined.])],
30                     [
31 #include <errno.h>
32 #include <stdio.h>
33 #include <fcntl.h>
34 #include <stdlib.h>
35 #ifdef HAVE_EXT2FS_EXT2_FS_H
36 #include <ext2fs/ext2_fs.h>
37 #else
38 #undef umode_t
39 #include <linux/ext2_fs.h>
40 #endif
41 #include <ext2fs/ext2fs.h>
42                     ])
43     fi
44   fi
49 dnl MC_EXTFS_CHECKS
50 dnl    Check for tools used in extfs scripts.
51 AC_DEFUN([MC_EXTFS_CHECKS], [
52     AC_PATH_PROG([ZIP], [zip], [/usr/bin/zip])
53     AC_PATH_PROG([UNZIP], [unzip], [/usr/bin/unzip])
54     AC_CACHE_CHECK([for zipinfo code in unzip], [mc_cv_have_zipinfo],
55         [mc_cv_have_zipinfo=no
56         if $UNZIP -Z </dev/null >/dev/null 2>&1; then
57             mc_cv_have_zipinfo=yes
58         fi])
59     if test "x$mc_cv_have_zipinfo" = xyes; then
60         HAVE_ZIPINFO=1
61     else
62         HAVE_ZIPINFO=0
63     fi
64     AC_SUBST([HAVE_ZIPINFO])
65     AC_PATH_PROG([PERL], [perl], [/usr/bin/perl])
70 dnl MC_MCSERVER_CHECKS
71 dnl    Check how mcserver should check passwords.
72 dnl    Possible methods are PAM, pwdauth and crypt.
73 dnl    The later works with both /etc/shadow and /etc/passwd.
74 dnl    If PAM is found, other methods are not checked.
76 AC_DEFUN([MC_MCSERVER_CHECKS], [
78     dnl Check if PAM can be used for mcserv
79     AC_CHECK_LIB(dl, dlopen, [LIB_DL="-ldl"])
80     AC_CHECK_LIB(pam, pam_start, [
81         AC_DEFINE(HAVE_PAM, 1,
82                   [Define if PAM (Pluggable Authentication Modules) is available])
83         MCSERVLIBS="-lpam $LIB_DL"
84         mcserv_pam=yes], [], [$LIB_DL])
86     dnl Check for crypt() - needed for both /etc/shadow and /etc/passwd.
87     if test -z "$mcserv_pam"; then
89         dnl Check for pwdauth() - used on SunOS.
90         AC_CHECK_FUNCS([pwdauth])
92         dnl Check for crypt()
93         AC_CHECK_HEADERS([crypt.h], [crypt_header=yes])
94         if test -n "$crypt_header"; then
95             save_LIBS="$LIBS"
96             LIBS=
97             AC_SEARCH_LIBS(crypt, [crypt crypt_i], [mcserv_auth=crypt])
98             MCSERVLIBS="$LIBS"
99             LIBS="$save_LIBS"
100             if test -n "$mcserv_auth"; then
101                 AC_DEFINE(HAVE_CRYPT, 1,
102                           [Define to use crypt function in mcserv])
104                 dnl Check for shadow passwords
105                 AC_CHECK_HEADERS([shadow.h shadow/shadow.h],
106                                  [shadow_header=yes; break])
107                 if test -n "$shadow_header"; then
108                     save_LIBS="$LIBS"
109                     LIBS="$MCSERVLIBS"
110                     AC_SEARCH_LIBS(getspnam, [shadow], [mcserv_auth=shadow])
111                     MCSERVLIBS="$LIBS"
112                     LIBS="$save_LIBS"
113                     if test -n "$mcserv_auth"; then
114                         AC_DEFINE(HAVE_SHADOW, 1,
115                                   [Define to use shadow passwords for mcserv])
116                     fi
117                 fi
118             fi
119         fi
120     fi
122     AC_SUBST(MCSERVLIBS)
127 dnl MC_VFS_CHECKS
128 dnl   Check for various functions needed by libvfs.
129 dnl   This has various effects:
130 dnl     Sets MC_VFS_LIBS to libraries required
131 dnl     Sets vfs_flags to "pretty" list of vfs implementations we include.
132 dnl     Sets shell variable use_vfs to yes (default, --with-vfs) or
133 dnl        "no" (--without-vfs).
135 dnl Private define
136 AC_DEFUN([MC_WITH_VFS],[
137   MC_EXTFS_CHECKS
139   vfs_flags="cpiofs, extfs, tarfs"
140   use_net_code=false
142   AC_ARG_ENABLE([netcode],
143                 [  --enable-netcode         Support for networking [[yes]]])
145   if test "x$enable_netcode" != xno; then
146     dnl FIXME: network checks should probably be in their own macro.
147     AC_SEARCH_LIBS(socket, [xnet bsd socket inet], [have_socket=yes])
148     if test x$have_socket = xyes; then
149       AC_SEARCH_LIBS(gethostbyname, [bsd socket inet netinet])
150       AC_CHECK_MEMBERS([struct linger.l_linger], , , [
151 #include <sys/types.h>
152 #include <sys/socket.h>
153                        ])
154       AC_CHECK_FUNCS(pmap_set, , [
155          AC_CHECK_LIB(rpc, pmap_set, [
156            LIBS="-lrpc $LIBS"
157           AC_DEFINE(HAVE_PMAP_SET)
158           ])])
159       AC_CHECK_FUNCS(pmap_getport pmap_getmaps rresvport)
160       dnl add for source routing support setsockopt
161       AC_CHECK_HEADERS(rpc/pmap_clnt.h, , , [
162 #include <sys/types.h>
163 #include <sys/socket.h>
164 #include <netinet/in.h>
165 #include <rpc/rpc.h>
166 #include <rpc/pmap_prot.h>
167                                             ])
168       dnl
169       dnl mcfs support
170       dnl
171       AC_ARG_WITH(mcfs,
172         [  --with-mcfs              Support mc-specific networking file system [[no]]],
173         [if test "x$withval" != "xno"; then
174             AC_DEFINE(WITH_MCFS, 1, [Define to enable mc-specific networking file system])
175             vfs_flags="$vfs_flags, mcfs"
176             use_mcfs=yes
177             MC_MCSERVER_CHECKS
178         fi]
179       )
180       vfs_flags="$vfs_flags, ftpfs, fish"
181       use_net_code=true
182     fi
183   fi
185   dnl
186   dnl Samba support
187   dnl
188   use_smbfs=
189   AC_ARG_WITH(samba,
190           [  --with-samba             Support smb virtual file system [[no]]],
191           [if test "x$withval" != "xno"; then
192                   AC_DEFINE(WITH_SMBFS, 1, [Define to enable VFS over SMB])
193                   vfs_flags="$vfs_flags, smbfs"
194                   use_smbfs=yes
195           fi
196   ])
198   if test -n "$use_smbfs"; then
199   #################################################
200   # set Samba configuration directory location
201   configdir="/etc"
202   AC_ARG_WITH(configdir,
203   [  --with-configdir=DIR     Where the Samba configuration files are [[/etc]]],
204   [ case "$withval" in
205     yes|no)
206     #
207     # Just in case anybody does it
208     #
209         AC_MSG_WARN([--with-configdir called without argument - will use default])
210     ;;
211     * )
212         configdir="$withval"
213     ;;
214   esac]
215   )
216   AC_SUBST(configdir)
218   AC_ARG_WITH(codepagedir,
219     [  --with-codepagedir=DIR   Where the Samba codepage files are],
220     [ case "$withval" in
221       yes|no)
222       #
223       # Just in case anybody does it
224       #
225         AC_MSG_WARN([--with-codepagedir called without argument - will use default])
226       ;;
227     esac]
228   )
229   fi
231   dnl
232   dnl Ext2fs undelete support
233   dnl
234   AC_ARG_WITH(ext2undel,
235     [  --with-ext2undel         Compile with ext2 undelete code [[yes if found]]],
236     [if test x$withval != xno; then
237       if test x$withval != xyes; then
238         LDFLAGS="$LDFLAGS -L$withval/lib"
239         CPPFLAGS="$CPPFLAGS -I$withval/include"
240       fi
241       AC_EXT2_UNDEL
242     fi],[
243     dnl Default: detect
244     AC_CHECK_LIB(ext2fs, ext2fs_close, [AC_EXT2_UNDEL], , [-lcom_err])
245   ])
247   AC_DEFINE(USE_VFS, 1, [Define to enable VFS support])
248   if $use_net_code; then
249      AC_DEFINE(USE_NETCODE, 1, [Define to use networked VFS])
250   fi
255 AC_DEFUN([MC_VFS_CHECKS],[
256         use_vfs=yes
257         AC_ARG_WITH(vfs,
258                 [  --with-vfs               Compile with the VFS code [[yes]]],
259                 use_vfs=$withval
260         )
261         case $use_vfs in
262                 yes)    MC_WITH_VFS;;
263                 no)     use_vfs=no;;
264                 *)      use_vfs=no;;
265                         dnl Should we issue a warning?
266         esac
272 dnl Filesystem information detection
274 dnl To get information about the disk, mount points, etc.
277 AC_DEFUN([AC_GET_FS_INFO], [
278     AC_CHECK_HEADERS([fcntl.h utime.h])
280     gl_LIST_MOUNTED_FILE_SYSTEMS([
281         AC_DEFINE(HAVE_INFOMOUNT_LIST, 1,
282             [Define if the list of mounted filesystems can be determined])],
283         [AC_MSG_WARN([could not determine how to read list of mounted fs])])
285     gl_FSUSAGE
286     gl_FSTYPENAME
291 dnl Try using termcap database and link with libtermcap if possible.
293 AC_DEFUN([MC_USE_TERMCAP], [
294         screen_msg="$screen_msg with termcap database"
295         AC_MSG_NOTICE([using S-Lang screen library with termcap])
296         AC_DEFINE(USE_TERMCAP, 1, [Define to use termcap database])
297         AC_CHECK_LIB(termcap, tgoto, [MCLIBS="$MCLIBS -ltermcap"], , [$LIBS])
302 dnl Check if private functions are available for linking
304 AC_DEFUN([MC_SLANG_PRIVATE], [
305     AC_CACHE_CHECK([if S-Lang exports private functions],
306                    [mc_cv_slang_private], [
307         ac_save_LIBS="$LIBS"
308         LIBS="$LIBS -lslang"
309         AC_TRY_LINK([
310                      #ifdef HAVE_SLANG_SLANG_H
311                      #include <slang/slang.h>
312                      #else
313                      #include <slang.h>
314                      #endif
315                      #if SLANG_VERSION >= 10000
316                      extern unsigned int SLsys_getkey (void);
317                      #else
318                      extern unsigned int _SLsys_getkey (void);
319                      #endif
320                     ], [
321                      #if SLANG_VERSION >= 10000
322                      _SLsys_getkey ();
323                      #else
324                      SLsys_getkey ();
325                      #endif
326                     ],
327                     [mc_cv_slang_private=yes],
328                     [mc_cv_slang_private=no])
329         LIBS="$ac_save_LIBS"
330     ])
332     if test x$mc_cv_slang_private = xyes; then
333         AC_DEFINE(HAVE_SLANG_PRIVATE, 1,
334                   [Define if private S-Lang functions are available])
335     fi
340 dnl Check if the installed S-Lang library uses termcap
342 AC_DEFUN([MC_SLANG_TERMCAP], [
343     AC_CACHE_CHECK([if S-Lang uses termcap], [mc_cv_slang_termcap], [
344         ac_save_LIBS="$LIBS"
345         LIBS="$LIBS -lslang"
346         AC_TRY_LINK([
347                      #ifdef HAVE_SLANG_SLANG_H
348                      #include <slang/slang.h>
349                      #else
350                      #include <slang.h>
351                      #endif
352                     ],
353                     [SLtt_get_terminfo(); SLtt_tgetflag("");],
354                     [mc_cv_slang_termcap=no],
355                     [mc_cv_slang_termcap=yes])
356         LIBS="$ac_save_LIBS"
357     ])
359     if test x$mc_cv_slang_termcap = xyes; then
360         MC_USE_TERMCAP
361     fi
365 dnl Common code for MC_WITH_SLANG
367 AC_DEFUN([_MC_WITH_XSLANG], [
368     screen_type=slang
369     AC_DEFINE(HAVE_SLANG, 1,
370               [Define to use S-Lang library for screen management])
375 dnl Check if the system S-Lang library can be used.
376 dnl If not, and $1 is "strict", exit.
378 AC_DEFUN([MC_WITH_SLANG], [
379     with_screen=slang
381     dnl Check the header
382     slang_h_found=
383     AC_CHECK_HEADERS([slang.h slang/slang.h],
384                      [slang_h_found=yes; break])
385     if test -z "$slang_h_found"; then
386         AC_MSG_ERROR([Slang header not found])
387     fi
389     dnl Check if termcap is needed.
390     dnl This check must be done before anything is linked against S-Lang.
391     if test x$with_screen = xslang; then
392         MC_SLANG_TERMCAP
393     fi
395     dnl Check the library
396     if test x$with_screen = xslang; then
397         AC_CHECK_LIB([slang], [SLang_init_tty], [MCLIBS="$MCLIBS -lslang"],
398                      AC_MSG_ERROR([Slang library not found]), ["$MCLIBS"])
399     fi
401     dnl Unless external S-Lang was requested, reject S-Lang with UTF-8 hacks
402     if test x$with_screen = xslang; then
403         AC_CHECK_LIB(
404             [slang],
405             [SLsmg_write_nwchars],
406             [AC_MSG_ERROR([Rejecting S-Lang with UTF-8 support, it's not fully supported yet])])
407     fi
409     if test x$with_screen = xslang; then
410         MC_SLANG_PRIVATE
411         screen_type=slang
412         screen_msg="S-Lang library (installed on the system)"
413     else
414         AC_MSG_ERROR([S-Lang library not found])
415     fi
417     _MC_WITH_XSLANG
422 dnl Use the ncurses library.  It can only be requested explicitly,
423 dnl so just fail if anything goes wrong.
425 dnl If ncurses exports the ESCDELAY variable it should be set to 0
426 dnl or you'll have to press Esc three times to dismiss a dialog box.
428 AC_DEFUN([MC_WITH_NCURSES], [
429     dnl has_colors() is specific to ncurses, it's not in the old curses
430     save_LIBS="$LIBS"
431     ncursesw_found=
432     LIBS=
433     AC_SEARCH_LIBS([addwstr], [ncursesw ncurses curses], [MCLIBS="$MCLIBS $LIBS";ncursesw_found=yes],
434                    [AC_MSG_WARN([Cannot find ncurses library, that support wide characters])])
436     if test -z "$ncursesw_found"; then
437     LIBS=
438     AC_SEARCH_LIBS([has_colors], [ncurses curses], [MCLIBS="$MCLIBS $LIBS"],
439                    [AC_MSG_ERROR([Cannot find ncurses library])])
440     fi
442     dnl Check the header
443     ncurses_h_found=
444     AC_CHECK_HEADERS([ncursesw/curses.h ncurses/curses.h ncurses.h curses.h],
445                      [ncurses_h_found=yes; break])
447     if test -z "$ncurses_h_found"; then
448         AC_MSG_ERROR([Cannot find ncurses header file])
449     fi
451     screen_type=ncurses
452     screen_msg="ncurses library"
453     AC_DEFINE(USE_NCURSES, 1,
454               [Define to use ncurses for screen management])
456     AC_CACHE_CHECK([for ESCDELAY variable],
457                    [mc_cv_ncurses_escdelay],
458                    [AC_TRY_LINK([], [
459                         extern int ESCDELAY;
460                         ESCDELAY = 0;
461                         ],
462                         [mc_cv_ncurses_escdelay=yes],
463                         [mc_cv_ncurses_escdelay=no])
464     ])
465     if test "$mc_cv_ncurses_escdelay" = yes; then
466         AC_DEFINE(HAVE_ESCDELAY, 1,
467                   [Define if ncurses has ESCDELAY variable])
468     fi
470     AC_CHECK_FUNCS(resizeterm)
471     LIBS="$save_LIBS"
475 dnl Use the ncurses library.  It can only be requested explicitly,
476 dnl so just fail if anything goes wrong.
478 dnl If ncurses exports the ESCDELAY variable it should be set to 0
479 dnl or you'll have to press Esc three times to dismiss a dialog box.
481 AC_DEFUN([MC_WITH_NCURSESW], [
482     dnl has_colors() is specific to ncurses, it's not in the old curses
483     save_LIBS="$LIBS"
484     LIBS=
485     AC_SEARCH_LIBS([has_colors], [ncursesw], [MCLIBS="$MCLIBS $LIBS"],
486                    [AC_MSG_ERROR([Cannot find ncursesw library])])
488     dnl Check the header
489     ncurses_h_found=
490     AC_CHECK_HEADERS([ncursesw/curses.h],
491                      [ncursesw_h_found=yes; break])
493     if test -z "$ncursesw_h_found"; then
494         AC_MSG_ERROR([Cannot find ncursesw header file])
495     fi
497     screen_type=ncursesw
498     screen_msg="ncursesw library"
499     AC_DEFINE(USE_NCURSESW, 1,
500               [Define to use ncursesw for screen management])
502     AC_CACHE_CHECK([for ESCDELAY variable],
503                    [mc_cv_ncursesw_escdelay],
504                    [AC_TRY_LINK([], [
505                         extern int ESCDELAY;
506                         ESCDELAY = 0;
507                         ],
508                         [mc_cv_ncursesw_escdelay=yes],
509                         [mc_cv_ncursesw_escdelay=no])
510     ])
511     if test "$mc_cv_ncursesw_escdelay" = yes; then
512         AC_DEFINE(HAVE_ESCDELAY, 1,
513                   [Define if ncursesw has ESCDELAY variable])
514     fi
516     AC_CHECK_FUNCS(resizeterm)
517     LIBS="$save_LIBS"
522 dnl Check for ext2fs recovery code
524 AC_DEFUN([AC_EXT2_UNDEL], [
525   MC_UNDELFS_CHECKS
526   if test "$ext2fs_undel" = yes; then
527      AC_MSG_NOTICE([using ext2fs file recovery code])
528      vfs_flags="${vfs_flags}, undelfs"
529      use_undelfs=yes
530      MCLIBS="$MCLIBS $EXT2FS_UNDEL_LIBS"
531   else
532      AC_MSG_NOTICE([not using ext2fs file recovery code])
533   fi
537 dnl Check whether the g_module_* family of functions works
538 dnl on this system.  We need to know that at the compile time to
539 dnl decide whether to link with X11.
541 AC_DEFUN([AC_G_MODULE_SUPPORTED], [
542     AC_CACHE_CHECK([if gmodule functionality is supported], mc_cv_g_module_supported, [
543         ac_save_CFLAGS="$CFLAGS"
544         ac_save_LIBS="$LIBS"
545         CFLAGS="$CFLAGS $GMODULE_CFLAGS"
546         LIBS="$GMODULE_LIBS $LIBS"
547         AC_TRY_RUN([
548 #include <gmodule.h>
550 int main ()
552     int ret = (g_module_supported () == TRUE) ? 0 : 1;
553     return ret;
555         ],
556             [mc_cv_g_module_supported=yes],
557             [mc_cv_g_module_supported=no],
558             [mc_cv_g_module_supported=no]
559         )
560         CFLAGS="$ac_save_CFLAGS"
561         LIBS="$ac_save_LIBS"
562     ])
564 if test "$mc_cv_g_module_supported" = yes; then
565     AC_DEFINE(HAVE_GMODULE, 1,
566               [Define if gmodule functionality is supported])