From ticket #3116: fix possible segfault when freeing a VFS.
[midnight-commander.git] / configure.ac
blob6591c53ca69c272c36024867f6e63a69d17a111e
1 dnl
2 dnl Configure.in file for the Midnight Commander
3 dnl
5 AC_PREREQ(2.60)
6 AC_INIT([GNU Midnight Commander], [], [mc-devel@gnome.org])
7 m4_pattern_forbid(MC_)
8 AC_CONFIG_MACRO_DIR([m4])
9 AC_CONFIG_AUX_DIR(config)
10 AC_CONFIG_SRCDIR(src/main.c)
11 AC_CONFIG_HEADERS(config.h)
12 MC_VERSION
13 AM_INIT_AUTOMAKE(mc, ${VERSION} )
14 dnl Enable silent rules by default (if yes)
15 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
17 AM_MAINTAINER_MODE
19 AC_CANONICAL_HOST
21 AC_USE_SYSTEM_EXTENSIONS
24 dnl ############################################################################
25 dnl Check for compiler
26 dnl ############################################################################
28 AC_PROG_CC_STDC
29 AM_PROG_CC_C_O
31 MC_CHECK_CFLAGS
33 CFLAGS_OPTS=""
34 if test "x$CFLAGS" = "x"; then
35     CFLAGS_OPTS=" -O2 "
37 if test x$USE_MAINTAINER_MODE = xyes; then
38     CFLAGS_OPTS="-g3 -O -ggdb"
39     AC_DEFINE(USE_MAINTAINER_MODE, 1, [Use maintainer mode])
42 AC_ARG_ENABLE([werror],
43     AS_HELP_STRING([--enable-werror], [Handle all compiler warnings as errors]))
44 if test "x$enable_werror" = xyes; then
45     MC_CHECK_ONE_CFLAG([-Werror])
48 AC_PROG_LIBTOOL
51 dnl ############################################################################
52 dnl Check for programs
53 dnl ############################################################################
55 PKG_PROG_PKG_CONFIG
56 AC_PROG_INSTALL
57 AC_PROG_LN_S
58 AC_PATH_PROG([PERL], [perl], [/usr/bin/perl])
59 AC_PATH_PROG([PYTHON], [python], [/usr/bin/python])
60 AC_PATH_PROG([RUBY], [ruby], [/usr/bin/ruby])
62 dnl Check nroff and the options it supports
63 AC_CHECK_PROG(HAVE_nroff, nroff, true, false)
64 dnl Default values
65 MANDOC=-man
66 MAN_FLAGS=
67 if $HAVE_nroff; then
68     AC_MSG_CHECKING([for manual formatting macros])
69     AC_CACHE_VAL(mc_cv_mandoc, [
70     nroff -mandoc < /dev/null > /dev/null 2>&1
71     if test $? = 0; then
72         mc_cv_mandoc=-mandoc
73     else
74         mc_cv_mandoc=-man
75     fi
76     ])
77     MANDOC=$mc_cv_mandoc
78     AC_MSG_RESULT([$MANDOC])
80     AC_MSG_CHECKING([for option to disable ANSI color in manuals])
81     AC_CACHE_VAL(mc_cv_man_nocolor, [
82     nroff -c < /dev/null > /dev/null 2>&1
83     if test $? = 0; then
84         mc_cv_man_nocolor=-c
85     else
86         mc_cv_man_nocolor=
87     fi
88     ])
89     MAN_FLAGS=$mc_cv_man_nocolor
90     AC_MSG_RESULT([${MAN_NOCOLOR-none}])
92     AC_MSG_CHECKING([if nroff accepts -Tlatin1 or -Tascii])
93     AC_CACHE_VAL(mc_cv_nroff_tascii, [
94     mc_cv_nroff_tascii=
95     nroff -Tlatin1 < /dev/null > /dev/null 2>&1 /dev/null
96     if test $? = 0; then
97         mc_cv_nroff_tascii=-Tlatin1
98     else
99         nroff -Tascii < /dev/null > /dev/null 2>&1 /dev/null
100         if test $? = 0; then
101             mc_cv_nroff_tascii=-Tascii
102         fi
103     fi
104     ])
105     AC_MSG_RESULT([${mc_cv_nroff_tascii-no}])
106     MAN_FLAGS="$MAN_FLAGS $mc_cv_nroff_tascii"
109 AC_SUBST(MANDOC)
110 AC_SUBST(MAN_FLAGS)
112 dnl Check for -L option to file
113 AC_CHECK_PROG(HAVE_FILECMD, file, true, false)
114 if $HAVE_FILECMD; then
115     AC_MSG_CHECKING([for -L option to file command])
116     AC_CACHE_VAL(mc_cv_filel, [
117     file -L . > /dev/null 2>&1
118     if test $? = 0; then
119         mc_cv_filel=yes
120     else
121         mc_cv_filel=no
122     fi
123     ])
124     if test x$mc_cv_filel = xyes; then
125         AC_DEFINE(FILE_L, 1, [Define if the file command accepts the -L option])
126     fi
127     filel=$mc_cv_filel
128     AC_MSG_RESULT([$filel])
131 dnl Only list browsers here that can be run in background (i.e. with `&')
132 AC_CHECK_PROGS(X11_WWW, [gnome-moz-remote mozilla firefox konqueror opera])
135 dnl ############################################################################
136 dnl Check for other tools
137 dnl ############################################################################
139 AC_CHECK_TOOL(AR, ar, ar)
140 MC_UNIT_TESTS
143 dnl ############################################################################
144 dnl Check for main libraies
145 dnl ############################################################################
147 AC_CHECK_GLIB
148 AC_G_MODULE_SUPPORTED
149 MC_WITH_SCREEN
150 MC_CHECK_SEARCH_TYPE
151 dnl X11 support. Used to read keyboard modifiers when running under X11.
152 MC_WITH_X
155 dnl ############################################################################
156 dnl Check for header files
157 dnl ############################################################################
159 AC_CHECK_HEADERS([string.h memory.h limits.h malloc.h \
160         utime.h sys/statfs.h sys/vfs.h \
161         sys/select.h sys/ioctl.h stropts.h arpa/inet.h \
162         sys/socket.h])
163 AC_HEADER_MAJOR
164 AC_HEADER_ASSERT
167 dnl ############################################################################
168 dnl Check for types
169 dnl ############################################################################
171 dnl Check largefile before type sizeof checks
172 AC_SYS_LARGEFILE
174 AC_CHECK_SIZEOF(long)
175 AC_TYPE_UINTMAX_T
176 AC_CHECK_SIZEOF(uintmax_t)
177 AC_TYPE_OFF_T
178 AC_CHECK_SIZEOF(off_t)
179 AC_TYPE_MODE_T
180 AC_TYPE_PID_T
181 AC_TYPE_UID_T
183 AC_STRUCT_ST_BLOCKS
184 AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev])
186 AH_TEMPLATE([sig_atomic_t],
187             [/* Define to `int' if <signal.h> doesn't define.])
188 AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T],
189             [Some systems declare sig_atomic_t as volatile, some others -- no.
190              This define will have value `sig_atomic_t' or
191              `volatile sig_atomic_t' accordingly.])
193 AC_MSG_CHECKING(for sig_atomic_t in signal.h)
194 AC_EGREP_HEADER(sig_atomic_t,signal.h,
195   [
196     ac_cv_type_sig_atomic_t=yes;
197     AC_EGREP_HEADER(volatile.*sig_atomic_t,
198                     signal.h,
199                     [
200                         is_sig_atomic_t_volatile=yes;
201                         AC_MSG_RESULT([yes, volatile])
202                     ],
203                     [
204                         is_sig_atomic_t_volatile=no;
205                         AC_MSG_RESULT([yes, non volatile])
206                     ])
207   ],
208   [
209     AC_MSG_RESULT(no)
210     AC_CHECK_TYPE(sig_atomic_t, int)
211     is_sig_atomic_t_volatile=no
212   ])
213 if test $is_sig_atomic_t_volatile = 'yes'
214 then
215     AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t)
216 else
217     AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t])
221 dnl ############################################################################
222 dnl Check for functions
223 dnl ############################################################################
225 AC_CHECK_FUNCS([\
226         strverscmp \
227         strncasecmp \
228         realpath
231 dnl getpt is a GNU Extension (glibc 2.1.x)
232 AC_CHECK_FUNCS(posix_openpt, , [AC_CHECK_FUNCS(getpt)])
233 AC_CHECK_FUNCS(grantpt, , [AC_CHECK_LIB(pt, grantpt)])
235 dnl replacing lstat with statlstat on sco makes it more portable between
236 dnl sco clones
237 AC_CHECK_FUNCS(statlstat)
239 dnl Ovverriding mmap support.  This has to be before AC_FUNC_MMAP is used.
240 dnl We use only part of the functionality of mmap, so on AIX,
241 dnl it's possible to use mmap, even if it doesn't pass the autoconf test.
242 AC_ARG_WITH([mmap],
243         AS_HELP_STRING([--with-mmap], [Use the mmap call @<:@yes if found@:>@]))
244 if test x$with_mmap != xno; then
245     if test x$with_mmap = x; then
246         AC_FUNC_MMAP
247     else
248         AC_DEFINE(HAVE_MMAP, 1)
249     fi
252 dnl Sequent wants getprocessstats
253 AC_CHECK_LIB(seq, get_process_stats, [
254         LIBS="$LIBS -lseq"
255         AC_DEFINE(HAVE_GET_PROCESS_STATS, 1,
256                   [Define if you have function `get_process_stats' and
257 have to use that instead of gettimeofday])])
259 mc_AC_GET_FS_INFO
262 dnl ############################################################################
263 dnl Internationalization
264 dnl ############################################################################
266 AM_GNU_GETTEXT(no-libtool, need-ngettext)
267 AM_GNU_GETTEXT_VERSION(0.14.3)
269 MC_I18N
271 dnl ############################################################################
272 dnl OS specific flags
273 dnl ############################################################################
275 case $host_os in
276 aux*)
277     # A/UX
278     LIBS="$LIBS -lposix"
279     AC_DEFINE(_POSIX_SOURCE)
280     ;;
281 esac
283 dnl If running under AIX, AC_AIX does not tell us that
284 AC_MSG_CHECKING([for AIX defines])
285 AC_EGREP_CPP([yes],
286     [
287         #if defined(AIX) || defined(_AIX) || defined(__aix__) || defined(aix)
288         yes
289         #endif
290     ],
291     [
292         AC_DEFINE(IS_AIX, 1, [Define if compiling for AIX])
293         AC_MSG_RESULT(yes)
294     ],
295     [
296         AC_MSG_RESULT(no)
297     ])
299 dnl Check if the OS is supported by the console saver.
300 cons_saver=""
301 case $host_os in
302 linux*)
303     cons_saver=yes
304 esac
306 dnl Check for gpm mouse support (Linux only)
307 mouse_lib="xterm only"
308 AC_ARG_WITH([gpm-mouse],
309     AS_HELP_STRING([--with-gpm-mouse], [Compile with gpm mouse support (Linux only) @<:@yes if found@:>@]))
311 case $host_os in
312 linux*)
313     if test x$with_gpm_mouse != xno; then
314         AC_CHECK_LIB(gpm, Gpm_Repeat,
315             [AC_DEFINE(HAVE_LIBGPM, 1,
316                        [Define to enable gpm mouse support on Linux])
317             mouse_lib="gpm and xterm"
318             MCLIBS="$MCLIBS -lgpm"],
319             if test "x$with_gpm_mouse" = "xyes"; then
320                 [AC_MSG_ERROR([libgpm is missing or older than 0.18])]
321             else
322                 [AC_MSG_WARN([libgpm is missing or older than 0.18])]
323             fi
324         )
325     fi
326     ;;
327 esac
330 dnl ############################################################################
331 dnl libmc
332 dnl ############################################################################
334 LIBMC_VERSION="0.0.1"
335 LIBMC_RELEASE="1"
336 AC_SUBST(LIBMC_VERSION)
337 AC_SUBST(LIBMC_RELEASE)
339 AC_ARG_ENABLE([mclib],
340         [AS_HELP_STRING([--enable-mclib], [Compile shared library libmc.so @<:@no@:>@])],
341         [
342             if test "x$enableval" = "xno" ; then
343                 enable_mclib=no
344             else
345                 if test "x$enable_shared" = "xno" ; then
346                     AC_MSG_WARN([Build of shared library is disabled. Specify --enable-shared first])
347                     enable_mclib=no
348                 else
349                     enable_mclib=yes
350                 fi
351             fi
352         ],
353         [enable_mclib=no])
355 AM_CONDITIONAL([ENABLE_MCLIB], [test x$enable_mclib = xyes])
358 dnl ############################################################################
359 dnl Where config files should be placed
360 dnl ############################################################################
362 AC_ARG_WITH([homedir],
363     AS_HELP_STRING([--with-homedir],
364                    [Choose any place of user settings relative to home dir, or XDG for respect XDG standards @<:@XDG@:>@]),
365     [
366         if test "x$withval" = "xXDG"; then
367             with_homedir=XDG
368         else
369             with_homedir=$withval
370         fi
371     ],
372     [with_homedir=XDG])
375 if test x$with_homedir = xXDG; then
376     AC_DEFINE(MC_HOMEDIR_XDG, 1,
377         [Define to enable XDG standard support])
378 else
379     AC_DEFINE_UNQUOTED([MC_USERCONF_DIR], ["$with_homedir"], [Where configs will be placed relative to $HOME])
383 dnl ############################################################################
384 dnl MC options
385 dnl ############################################################################
387 MC_WITH_INTERNAL_EDIT
389 dnl Diff viewer support.
390 AC_ARG_WITH([diff_viewer],
391     AS_HELP_STRING([--with-diff-viewer], [Compile with diff viewer @<:@yes@:>@]))
393 if test x$with_diff_viewer != xno; then
394         AC_DEFINE(USE_DIFF_VIEW, 1, [Define to enable diff viewer])
395         use_diff=yes
396         diff_msg="yes"
397         AC_MSG_NOTICE([using diff viewer])
398 else
399         diff_msg="no"
402 MC_SUBSHELL
403 MC_BACKGROUND
404 AC_MC_VFS_CHECKS
406 dnl ############################################################################
407 dnl Directories
408 dnl ############################################################################
410 dnl ${prefix} and ${exec_prefix} are undefined here if --prefix is not used in command line
411 dnl Let define ${prefix} and ${exec_prefix}
412 test "x$prefix" = "xNONE" && prefix="$ac_default_prefix"
413 test "x$exec_prefix" = "xNONE" && exec_prefix="${prefix}"
415 if test x${libexecdir} = x'${exec_prefix}/libexec'; then
416     EXTHELPERSDIR=${prefix}/libexec/${PACKAGE}/ext.d
417 elif test x${libexecdir} = x'${exec_prefix}/lib'; then
418     EXTHELPERSDIR=${prefix}/lib/${PACKAGE}/ext.d
419 else
420     EXTHELPERSDIR=${libexecdir}/${PACKAGE}/ext.d
422 AC_SUBST(EXTHELPERSDIR)
425 dnl ############################################################################
426 dnl Documentation
427 dnl ############################################################################
429 MAN_DATE="$(LC_ALL=C date "+%B %Y")"
430 AC_SUBST(MAN_DATE)
432 dnl Determine which help translations we want to install.
433 ALL_DOC_LINGUAS="es hu it pl ru sr"
435 DOC_LINGUAS=
436 if test "x$USE_NLS" = xyes; then
437     if test -z "$LINGUAS"; then
438         langs="`grep -v '^#' $srcdir/po/LINGUAS`"
439     else
440         langs="$LINGUAS"
441     fi
442 else
443     langs=
446 for h_lang in $ALL_DOC_LINGUAS; do
447     for lang in $langs; do
448         if test "$lang" = "$h_lang"; then
449             DOC_LINGUAS="$DOC_LINGUAS $lang"
450             break
451         fi
452     done
453 done
454 AC_SUBST(DOC_LINGUAS)
456 DX_HTML_FEATURE(ON)
457 DX_CHM_FEATURE(OFF)
458 DX_CHI_FEATURE(OFF)
459 DX_MAN_FEATURE(OFF)
460 DX_RTF_FEATURE(OFF)
461 DX_XML_FEATURE(OFF)
462 DX_PDF_FEATURE(OFF)
463 DX_PS_FEATURE(OFF)
464 DX_INIT_DOXYGEN(mc,doxygen.cfg,devel)
467 dnl ############################################################################
468 dnl Configure results
469 dnl ############################################################################
471 CFLAGS="$mc_configured_cflags $CFLAGS_OPTS $CFLAGS"
473 AC_SUBST(MCLIBS)
474 AC_SUBST(CFLAGS)
475 AC_SUBST(CPPFLAGS)
476 AC_SUBST(LDFLAGS)
477 AC_SUBST(LIBS)
479 AM_CONDITIONAL(USE_NLS, [test x"$USE_NLS" = xyes])
480 AM_CONDITIONAL(USE_MAINTAINER_MODE, [test x"$USE_MAINTAINER_MODE" = xyes])
481 AM_CONDITIONAL(USE_SCREEN_SLANG, [test x"$with_screen" = xslang])
482 AM_CONDITIONAL(USE_INTERNAL_EDIT, [test x"$use_internal_edit" = xyes ])
483 AM_CONDITIONAL(USE_ASPELL, [test x"$enable_aspell" = xyes ])
484 AM_CONDITIONAL(USE_DIFF, [test -n "$use_diff"])
485 AM_CONDITIONAL(CHARSET, [test -n "$have_charset"])
486 AM_CONDITIONAL(CONS_SAVER, [test -n "$cons_saver"])
487 dnl Clarify do we really need GModule
488 AM_CONDITIONAL([HAVE_GMODULE], [test -n "$g_module_supported" && \
489                                 test x"$textmode_x11_support" = x"yes" -o x"$enable_aspell" = x"yes"])
491 AC_DEFINE_UNQUOTED([MC_CONFIGURE_ARGS], ["$ac_configure_args"], [MC configure arguments])
493 AC_CONFIG_FILES(
495 src/man2hlp/man2hlp
498 chmod +x src/man2hlp/man2hlp
501 AC_CONFIG_FILES([
502 Makefile
504 contrib/Makefile
505 contrib/dist/Makefile
506 contrib/dist/gentoo/Makefile
507 contrib/dist/redhat/Makefile
508 contrib/dist/redhat/mc.spec
509 contrib/dist/pkginfo
510 contrib/dist/prototype
512 misc/Makefile
513 misc/skins/Makefile
514 misc/ext.d/Makefile
515 misc/ext.d/doc.sh
516 misc/ext.d/misc.sh
517 misc/ext.d/text.sh
518 misc/ext.d/web.sh
519 misc/macros.d/Makefile
520 misc/mc.ext
522 src/Makefile
523 src/consaver/Makefile
524 src/editor/Makefile
525 src/man2hlp/Makefile
526 src/viewer/Makefile
527 src/diffviewer/Makefile
528 src/filemanager/Makefile
530 src/vfs/Makefile
532 src/vfs/cpio/Makefile
534 src/vfs/extfs/Makefile
535 src/vfs/extfs/helpers/Makefile
536 src/vfs/extfs/helpers/a+
537 src/vfs/extfs/helpers/apt+
538 src/vfs/extfs/helpers/audio
539 src/vfs/extfs/helpers/deb
540 src/vfs/extfs/helpers/deba
541 src/vfs/extfs/helpers/debd
542 src/vfs/extfs/helpers/dpkg+
543 src/vfs/extfs/helpers/iso9660
544 src/vfs/extfs/helpers/hp48+
545 src/vfs/extfs/helpers/lslR
546 src/vfs/extfs/helpers/mailfs
547 src/vfs/extfs/helpers/patchfs
548 src/vfs/extfs/helpers/rpms+
549 src/vfs/extfs/helpers/s3+
550 src/vfs/extfs/helpers/uace
551 src/vfs/extfs/helpers/ualz
552 src/vfs/extfs/helpers/uar
553 src/vfs/extfs/helpers/uarc
554 src/vfs/extfs/helpers/uarj
555 src/vfs/extfs/helpers/uc1541
556 src/vfs/extfs/helpers/ucab
557 src/vfs/extfs/helpers/uha
558 src/vfs/extfs/helpers/ulha
559 src/vfs/extfs/helpers/ulib
560 src/vfs/extfs/helpers/urar
561 src/vfs/extfs/helpers/uzip
562 src/vfs/extfs/helpers/uzoo
564 src/vfs/fish/Makefile
565 src/vfs/fish/helpers/Makefile
567 src/vfs/ftpfs/Makefile
569 src/vfs/sftpfs/Makefile
571 src/vfs/local/Makefile
573 src/vfs/sfs/Makefile
575 src/vfs/smbfs/Makefile
577 src/vfs/tar/Makefile
579 src/vfs/undelfs/Makefile
581 lib/Makefile
582 lib/event/Makefile
583 lib/filehighlight/Makefile
584 lib/mcconfig/Makefile
585 lib/search/Makefile
586 lib/skin/Makefile
587 lib/strutil/Makefile
588 lib/tty/Makefile
590 lib/vfs/Makefile
592 lib/widget/Makefile
594 misc/syntax/Makefile
595 misc/syntax/Syntax
597 doc/Makefile
599 doc/hints/Makefile
600 doc/hints/l10n/Makefile
602 doc/man/Makefile
603 doc/man/es/Makefile
604 doc/man/hu/Makefile
605 doc/man/it/Makefile
606 doc/man/pl/Makefile
607 doc/man/ru/Makefile
608 doc/man/sr/Makefile
610 doc/hlp/Makefile
611 doc/hlp/es/Makefile
612 doc/hlp/hu/Makefile
613 doc/hlp/it/Makefile
614 doc/hlp/pl/Makefile
615 doc/hlp/ru/Makefile
616 doc/hlp/sr/Makefile
618 intl/Makefile
619 po/Makefile.in
622 if test x$enable_tests != xno; then
623     AC_CONFIG_FILES([
624 tests/Makefile
625 tests/lib/Makefile
626 tests/lib/mcconfig/Makefile
627 tests/lib/search/Makefile
628 tests/lib/strutil/Makefile
629 tests/lib/vfs/Makefile
630 tests/lib/widget/Makefile
631 tests/src/Makefile
632 tests/src/filemanager/Makefile
633 tests/src/editor/Makefile
634 tests/src/editor/test-data.txt
638 AC_OUTPUT
640 AC_MSG_NOTICE([
642 Configuration:
644   Source code location:       ${srcdir}
645   Compiler:                   ${CC}
646   Compiler flags:             ${CFLAGS}
647   File system:                ${vfs_type}
648                               ${vfs_flags}
649   Screen library:             ${screen_msg}
650   Mouse support:              ${mouse_lib}
651   X11 events support:         ${textmode_x11_support}
652   With subshell support:      ${subshell}
653   With background operations: ${enable_background}
654   Internal editor:            ${edit_msg}
655   Diff viewer:                ${diff_msg}
656   Support for charset:        ${charset_msg}
657   Search type:                ${SEARCH_TYPE}
660 dnl option checking is disable by default due to AC_CONFIG_SUBDIRS
661 dnl we enable it back for top-level ./configure
662 if test -n "$ac_unrecognized_opts"; then
663   case $enable_option_checking in
664     fatal) AC_MSG_ERROR([unrecognized options: $ac_unrecognized_opts]) ;;
665     *)     AC_MSG_WARN( [unrecognized options: $ac_unrecognized_opts]) ;;
666   esac