dnl dnl Configure.in file for the Midnight Commander dnl dnl 2.64 is required at least for m4_esyscmd_s() AC_PREREQ([2.64]) AC_INIT([GNU Midnight Commander], m4_esyscmd_s([./version.sh .]), [https://www.midnight-commander.org/wiki/NewTicket], [mc], [https://www.midnight-commander.org/]) m4_pattern_forbid(MC_) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR(config) AC_CONFIG_SRCDIR(src/main.c) AC_CONFIG_HEADERS(config.h) dnl Apply "no-define" to avoid defining the VERSION macro in config.h AM_INIT_AUTOMAKE([no-define]) dnl PACKAGE macro isn't defined if "no-define" is applied AC_DEFINE([PACKAGE], ["mc"], [Name of package]) dnl Enable silent rules by default (if yes) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) mc_VERSION AM_MAINTAINER_MODE AC_CANONICAL_HOST AC_USE_SYSTEM_EXTENSIONS dnl ############################################################################ dnl Check for compiler dnl ############################################################################ dnl This should be checked before toolchain macros, otherwise they will remember dnl that ar cannot be found and linking via libtool will fail at a later stage AC_CHECK_TOOLS([AR], [ar gar]) AC_PROG_CC # AC_PROG_CC doesn't try enabling C99 in autoconf 2.69 and below, but # AC_PROG_CC_C99 is deprecated in newer ones. In autoconf 2.70+ both # will try enabling features up to C11. m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_C99]) mc_CHECK_CFLAGS CFLAGS_OPTS="" if test "x$CFLAGS" = "x"; then CFLAGS_OPTS=" -O2 " fi if test x$USE_MAINTAINER_MODE = xyes; then CFLAGS_OPTS="-g3 -Og -ggdb" AC_DEFINE(USE_MAINTAINER_MODE, 1, [Use maintainer mode]) fi AC_ARG_ENABLE([werror], AS_HELP_STRING([--enable-werror], [Handle all compiler warnings as errors])) if test "x$enable_werror" = xyes; then AX_APPEND_COMPILE_FLAGS([-Werror], [mc_configured_cflags]) fi dnl Compiler can generate warnings for unrecognized flags added to CFLAGS dnl which causes attribute checks to fail ax_gcc_func_attribute_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS= AX_GCC_FUNC_ATTRIBUTE([fallthrough]) AX_GCC_FUNC_ATTRIBUTE([weak]) AX_GCC_FUNC_ATTRIBUTE([unused]) _AC_LANG_PREFIX[]FLAGS=$ax_gcc_func_attribute_save_flags unset ax_gcc_func_attribute_save_flags LT_INIT dnl ############################################################################ dnl Check for programs dnl ############################################################################ AC_PROG_SED PKG_PROG_PKG_CONFIG AC_PROG_INSTALL AC_PROG_LN_S dnl See also the "OS specific stuff" section below. dnl Check nroff and the options it supports AC_CHECK_PROG(HAVE_nroff, nroff, true, false) dnl Default values MANDOC=-man MAN_FLAGS= if $HAVE_nroff; then AC_MSG_CHECKING([for manual formatting macros]) AC_CACHE_VAL(mc_cv_mandoc, [ nroff -mandoc < /dev/null > /dev/null 2>&1 if test $? = 0; then mc_cv_mandoc=-mandoc else mc_cv_mandoc=-man fi ]) MANDOC=$mc_cv_mandoc AC_MSG_RESULT([$MANDOC]) AC_MSG_CHECKING([for option to disable ANSI color in manuals]) AC_CACHE_VAL(mc_cv_man_nocolor, [ nroff -c < /dev/null > /dev/null 2>&1 if test $? = 0; then mc_cv_man_nocolor=-c else mc_cv_man_nocolor= fi ]) MAN_FLAGS=$mc_cv_man_nocolor AC_MSG_RESULT([${MAN_NOCOLOR-none}]) AC_MSG_CHECKING([if nroff accepts -Tlatin1 or -Tascii]) AC_CACHE_VAL(mc_cv_nroff_tascii, [ mc_cv_nroff_tascii= nroff -Tlatin1 < /dev/null > /dev/null 2>&1 /dev/null if test $? = 0; then mc_cv_nroff_tascii=-Tlatin1 else nroff -Tascii < /dev/null > /dev/null 2>&1 /dev/null if test $? = 0; then mc_cv_nroff_tascii=-Tascii fi fi ]) AC_MSG_RESULT([${mc_cv_nroff_tascii-no}]) MAN_FLAGS="$MAN_FLAGS $mc_cv_nroff_tascii" fi AC_SUBST(MANDOC) AC_SUBST(MAN_FLAGS) dnl Check for -z, -b, -L, and -S options to file AC_CHECK_PROG(HAVE_FILECMD, file, true, false) if $HAVE_FILECMD; then dnl Don't use the file command if it doesn't accept the -z option AC_MSG_CHECKING([for -z option to file command]) AC_CACHE_VAL(mc_cv_file_z, [ file -z . > /dev/null 2>&1 if test $? = 0; then mc_cv_file_z=yes else mc_cv_file_z=no fi ]) AC_MSG_RESULT([$mc_cv_file_z]) if test x$mc_cv_file_z = xyes; then AC_DEFINE(USE_FILE_CMD, 1, [Define if the file command accepts the -z option]) else AC_MSG_WARN([The file command doesn't accept the -z option and will not be used]) fi if test x$mc_cv_file_z = xyes; then dnl file is used; check -b, -L and -S options AC_MSG_CHECKING([for -b option to file command]) AC_CACHE_VAL(mc_cv_file_b, [ file -b . > /dev/null 2>&1 if test $? = 0; then mc_cv_file_b=yes else mc_cv_file_b=no fi ]) AC_MSG_RESULT([$mc_cv_file_b]) if test x$mc_cv_file_b = xyes; then AC_DEFINE(FILE_B, "-b ", [Define if the file command accepts the -b option]) fi AC_MSG_CHECKING([for -L option to file command]) AC_CACHE_VAL(mc_cv_file_L, [ file -L . > /dev/null 2>&1 if test $? = 0; then mc_cv_file_L=yes else mc_cv_file_L=no fi ]) AC_MSG_RESULT([$mc_cv_file_L]) if test x$mc_cv_file_L = xyes; then AC_DEFINE(FILE_L, "-L ", [Define if the file command accepts the -L option]) else AC_DEFINE(FILE_L, "", [Define if the file command accepts the -L option]) fi dnl The file command accepts the -S option since 5.33 AC_MSG_CHECKING([for -S option to file command]) AC_CACHE_VAL(mc_cv_file_S, [ file -S . > /dev/null 2>&1 if test $? = 0; then mc_cv_file_S=yes else mc_cv_file_S=no fi ]) AC_MSG_RESULT([$mc_cv_file_S]) if test x$mc_cv_file_S = xyes; then AC_DEFINE(FILE_S, "-S ", [Define if file command accepts the -S option]) else AC_DEFINE(FILE_S, "", [Define if file command accepts the -S option]) fi fi fi dnl Only list browsers here that can be run in background (i.e. with `&') AC_CHECK_PROGS(X11_WWW, [gnome-moz-remote mozilla firefox konqueror opera]) dnl ############################################################################ dnl Check for other tools dnl ############################################################################ AC_CHECK_TOOLS([INDENT], [gindent indent]) mc_UNIT_TESTS dnl ############################################################################ dnl Check for main libraries dnl ############################################################################ mc_CHECK_GLIB mc_G_MODULE_SUPPORTED mc_WITH_SCREEN mc_CHECK_SEARCH_TYPE dnl X11 support. Used to read keyboard modifiers when running under X11. mc_WITH_X dnl ############################################################################ dnl Check for header files dnl ############################################################################ AC_CHECK_HEADERS([string.h memory.h limits.h malloc.h \ utime.h sys/statfs.h sys/vfs.h \ sys/select.h sys/ioctl.h stropts.h arpa/inet.h \ sys/socket.h]) dnl This macro is redefined in m4.include/gnulib/sys_types_h.m4 dnl to work around a buggy version in autoconf <= 2.69. AC_HEADER_MAJOR mc_CHECK_HEADER_STDCKDINT dnl ############################################################################ dnl Check for types dnl ############################################################################ dnl Check largefile before type sizeof checks AC_SYS_LARGEFILE AC_CHECK_SIZEOF(long) AC_TYPE_UINTMAX_T AC_CHECK_SIZEOF(uintmax_t) AC_TYPE_OFF_T AC_CHECK_SIZEOF(off_t) AC_TYPE_MODE_T gl_PROMOTED_TYPE_MODE_T AC_TYPE_PID_T AC_TYPE_UID_T dnl Taken from GNU/Linux, and should be good enough on platforms lacking these types. AC_CHECK_TYPE([dev_t], [unsigned long long int]) AC_CHECK_TYPE([ino_t], [unsigned long long int]) dnl Taken from GNU/Linux, and should be good enough on platforms lacking these types. AC_CHECK_TYPE([major_t], [unsigned int]) AC_CHECK_TYPE([minor_t], [unsigned int]) AC_STRUCT_ST_BLOCKS AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev, struct stat.st_mtim, struct stat.st_mtimespec, struct stat.st_mtimensec]) gl_STAT_SIZE AH_TEMPLATE([sig_atomic_t], [/* Define to `int' if <signal.h> doesn't define.]) AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T], [Some systems declare sig_atomic_t as volatile, some others -- no. This define will have value `sig_atomic_t' or `volatile sig_atomic_t' accordingly.]) AC_MSG_CHECKING(for sig_atomic_t in signal.h) AC_EGREP_HEADER(sig_atomic_t,signal.h, [ ac_cv_type_sig_atomic_t=yes; AC_EGREP_HEADER(volatile.*sig_atomic_t, signal.h, [ is_sig_atomic_t_volatile=yes; AC_MSG_RESULT([yes, volatile]) ], [ is_sig_atomic_t_volatile=no; AC_MSG_RESULT([yes, non volatile]) ]) ], [ AC_MSG_RESULT(no) AC_CHECK_TYPE(sig_atomic_t, int) is_sig_atomic_t_volatile=no ]) if test $is_sig_atomic_t_volatile = 'yes' then AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t) else AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t]) fi dnl ############################################################################ dnl Check for functions dnl ############################################################################ AC_CHECK_FUNCS([\ strverscmp \ strncasecmp \ realpath ]) dnl getpt is a GNU Extension (glibc 2.1.x) AC_CHECK_FUNCS(posix_openpt, , [AC_CHECK_FUNCS(getpt)]) AC_CHECK_FUNCS(grantpt, , [AC_CHECK_LIB(pt, grantpt)]) dnl replacing lstat with statlstat on sco makes it more portable between dnl sco clones AC_CHECK_FUNCS(statlstat) mc_GET_FS_INFO dnl ############################################################################ dnl Internationalization dnl ############################################################################ AC_CHECK_FUNCS([setlocale]) AM_GNU_GETTEXT([external], [need-ngettext]) AM_GNU_GETTEXT_VERSION([0.18.2]) mc_I18N dnl ############################################################################ dnl OS specific stuff dnl ############################################################################ AC_CHECK_DECLS([environ], , , [ #include <unistd.h> #include <stdlib.h> ]) case $host_os in *os400) AC_PATH_PROG([PERL], [perl], [/QOpenSys/pkgs/bin/perl]) AC_PATH_PROG([PERL_FOR_BUILD], [perl], [/QOpenSys/pkgs/bin/perl]) AC_PATH_PROG([PYTHON], [python], [/QOpenSys/pkgs/bin/python2]) AC_PATH_PROG([RUBY], [ruby], [/QOpenSys/pkgs/bin/ruby]) ;; *) AC_PATH_PROG([PERL], [perl], [/usr/bin/perl]) AC_PATH_PROG([PERL_FOR_BUILD], [perl], [/usr/bin/perl]) AC_PATH_PROG([PYTHON], [python], [/usr/bin/python]) AC_PATH_PROG([RUBY], [ruby], [/usr/bin/ruby]) esac case $host_os in aux*) # A/UX LIBS="$LIBS -lposix" AC_DEFINE(_POSIX_SOURCE) ;; esac dnl If running under AIX, AC_USE_SYSTEM_EXTENSIONS does not tell us that AC_MSG_CHECKING([for AIX defines]) AC_EGREP_CPP([yes], [ #if defined(AIX) || defined(_AIX) || defined(__aix__) || defined(aix) yes #endif ], [ AC_DEFINE(IS_AIX, 1, [Define if compiling for AIX]) AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) ]) dnl utimensat is supported since glibc 2.6 and specified in POSIX.1-2008 AC_CHECK_FUNCS([utimensat]) case $host_os in *os400) AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd]) esac dnl Check linux/fs.h for FICLONE to support BTRFS's file clone operation case $host_os in linux*) AC_CHECK_HEADERS([linux/fs.h]) esac dnl Check if the OS is supported by the console saver. cons_saver="" case $host_os in linux*) cons_saver=yes esac dnl Check for gpm mouse support (Linux only) mouse_lib="xterm only" AC_ARG_WITH([gpm-mouse], AS_HELP_STRING([--with-gpm-mouse], [Compile with gpm mouse support (Linux only) @<:@yes if found@:>@])) case $host_os in linux*) if test x$with_gpm_mouse != xno; then AC_CHECK_LIB(gpm, Gpm_Repeat, [AC_DEFINE(HAVE_LIBGPM, 1, [Define to enable gpm mouse support on Linux]) mouse_lib="gpm and xterm" MCLIBS="$MCLIBS -lgpm"], if test "x$with_gpm_mouse" = "xyes"; then [AC_MSG_ERROR([libgpm is missing or older than 0.18])] else [AC_MSG_WARN([libgpm is missing or older than 0.18])] fi ) fi ;; esac dnl ############################################################################ dnl libmc dnl ############################################################################ LIBMC_VERSION="0.0.1" LIBMC_RELEASE="1" AC_SUBST(LIBMC_VERSION) AC_SUBST(LIBMC_RELEASE) AC_ARG_ENABLE([mclib], [AS_HELP_STRING([--enable-mclib], [Compile shared library libmc.so @<:@no@:>@])], [ if test "x$enableval" = "xno" ; then enable_mclib=no else if test "x$enable_shared" = "xno" ; then AC_MSG_WARN([Build of shared library is disabled. Specify --enable-shared first]) enable_mclib=no else enable_mclib=yes fi fi ], [enable_mclib=no]) AM_CONDITIONAL([ENABLE_MCLIB], [test x$enable_mclib = xyes]) dnl ############################################################################ dnl MC options dnl ############################################################################ mc_ASSERT mc_WITH_INTERNAL_EDIT dnl Diff viewer support. AC_ARG_WITH([diff_viewer], AS_HELP_STRING([--with-diff-viewer], [Compile with diff viewer @<:@yes@:>@])) if test x$with_diff_viewer != xno; then AC_DEFINE(USE_DIFF_VIEW, 1, [Define to enable diff viewer]) use_diff=yes diff_msg="yes" AC_MSG_NOTICE([using diff viewer]) else diff_msg="no" fi mc_SUBSHELL mc_BACKGROUND mc_EXT2FS_ATTR mc_VFS_CHECKS dnl ############################################################################ dnl Directories dnl ############################################################################ dnl ${prefix} and ${exec_prefix} are undefined here if --prefix is not used in command line dnl Let define ${prefix} and ${exec_prefix} test "x$prefix" = "xNONE" && prefix="$ac_default_prefix" test "x$exec_prefix" = "xNONE" && exec_prefix="${prefix}" if test x${libexecdir} = x'${exec_prefix}/libexec'; then EXTHELPERSDIR=${prefix}/libexec/${PACKAGE}/ext.d elif test x${libexecdir} = x'${exec_prefix}/lib'; then EXTHELPERSDIR=${prefix}/lib/${PACKAGE}/ext.d else EXTHELPERSDIR=${libexecdir}/${PACKAGE}/ext.d fi AC_SUBST(EXTHELPERSDIR) dnl ############################################################################ dnl Documentation dnl ############################################################################ MAN_DATE="$(LC_ALL=C date "+%B %Y")" AC_SUBST(MAN_DATE) dnl Determine which help translations we want to install. ALL_DOC_LINGUAS="es hu it pl ru sr" DOC_LINGUAS= if test "x$USE_NLS" = xyes; then if test -z "$LINGUAS"; then langs="`grep -v '^#' $srcdir/po/LINGUAS`" else langs="$LINGUAS" fi else langs= fi for h_lang in $ALL_DOC_LINGUAS; do for lang in $langs; do if test "$lang" = "$h_lang"; then DOC_LINGUAS="$DOC_LINGUAS $lang" break fi done done AC_SUBST(DOC_LINGUAS) DX_HTML_FEATURE(ON) DX_CHM_FEATURE(OFF) DX_CHI_FEATURE(OFF) DX_MAN_FEATURE(OFF) DX_RTF_FEATURE(OFF) DX_XML_FEATURE(OFF) DX_PDF_FEATURE(OFF) DX_PS_FEATURE(OFF) DX_INIT_DOXYGEN(mc,doxygen.cfg,devel) dnl ############################################################################ dnl Configure results dnl ############################################################################ CFLAGS="$mc_configured_cflags $CFLAGS_OPTS $CFLAGS" AC_SUBST(MCLIBS) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LDFLAGS) AC_SUBST(LIBS) AM_CONDITIONAL(USE_NLS, [test x"$USE_NLS" = xyes]) AM_CONDITIONAL(USE_MAINTAINER_MODE, [test x"$USE_MAINTAINER_MODE" = xyes]) AM_CONDITIONAL(USE_SCREEN_SLANG, [test x"$with_screen" = xslang]) AM_CONDITIONAL(USE_INTERNAL_EDIT, [test x"$use_internal_edit" = xyes ]) AM_CONDITIONAL(USE_ASPELL, [test x"$enable_aspell" = xyes ]) AM_CONDITIONAL(USE_DIFF, [test -n "$use_diff"]) AM_CONDITIONAL(CHARSET, [test -n "$have_charset"]) AM_CONDITIONAL(CONS_SAVER, [test -n "$cons_saver"]) dnl Clarify do we really need GModule AM_CONDITIONAL([HAVE_GMODULE], [test -n "$g_module_supported" && \ test x"$textmode_x11_support" = x"yes" -o x"$enable_aspell" = x"yes"]) AC_ARG_ENABLE([configure-args], AS_HELP_STRING([--enable-configure-args], [Embed ./configure arguments into binaries])) if test "x$enable_configure_args" != xno; then AC_DEFINE([ENABLE_CONFIGURE_ARGS], 1, [Define to enable showing configure arguments in help]) AC_DEFINE_UNQUOTED([MC_CONFIGURE_ARGS], ["$ac_configure_args"], [MC configure arguments]) fi AC_CONFIG_FILES( [ src/man2hlp/man2hlp ], [ chmod +x src/man2hlp/man2hlp ]) AC_CONFIG_FILES([ Makefile contrib/Makefile misc/Makefile misc/mc.charsets misc/mc.menu misc/mcedit.menu misc/skins/Makefile misc/ext.d/Makefile misc/ext.d/doc.sh misc/ext.d/misc.sh misc/ext.d/text.sh misc/ext.d/web.sh misc/macros.d/Makefile misc/mc.ext.ini src/Makefile src/consaver/Makefile src/editor/Makefile src/man2hlp/Makefile src/subshell/Makefile src/viewer/Makefile src/diffviewer/Makefile src/filemanager/Makefile src/vfs/Makefile src/vfs/cpio/Makefile src/vfs/extfs/Makefile src/vfs/extfs/helpers/Makefile src/vfs/extfs/helpers/a+ src/vfs/extfs/helpers/apt+ src/vfs/extfs/helpers/audio src/vfs/extfs/helpers/deb src/vfs/extfs/helpers/deba src/vfs/extfs/helpers/debd src/vfs/extfs/helpers/dpkg+ src/vfs/extfs/helpers/iso9660 src/vfs/extfs/helpers/hp48+ src/vfs/extfs/helpers/lslR src/vfs/extfs/helpers/mailfs src/vfs/extfs/helpers/patchfs src/vfs/extfs/helpers/rpms+ src/vfs/extfs/helpers/s3+ src/vfs/extfs/helpers/uace src/vfs/extfs/helpers/ualz src/vfs/extfs/helpers/uar src/vfs/extfs/helpers/uarc src/vfs/extfs/helpers/uarj src/vfs/extfs/helpers/ucab src/vfs/extfs/helpers/uha src/vfs/extfs/helpers/ulha src/vfs/extfs/helpers/ulib src/vfs/extfs/helpers/unar src/vfs/extfs/helpers/urar src/vfs/extfs/helpers/uwim src/vfs/extfs/helpers/uzip src/vfs/extfs/helpers/uzoo src/vfs/shell/Makefile src/vfs/shell/helpers/Makefile src/vfs/ftpfs/Makefile src/vfs/sftpfs/Makefile src/vfs/local/Makefile src/vfs/sfs/Makefile src/vfs/tar/Makefile src/vfs/undelfs/Makefile lib/Makefile lib/event/Makefile lib/filehighlight/Makefile lib/mcconfig/Makefile lib/search/Makefile lib/skin/Makefile lib/strutil/Makefile lib/tty/Makefile lib/vfs/Makefile lib/widget/Makefile misc/syntax/Makefile doc/Makefile doc/hints/Makefile doc/hints/l10n/Makefile doc/man/Makefile doc/man/es/Makefile doc/man/hu/Makefile doc/man/it/Makefile doc/man/pl/Makefile doc/man/ru/Makefile doc/man/sr/Makefile doc/hlp/Makefile doc/hlp/es/Makefile doc/hlp/hu/Makefile doc/hlp/it/Makefile doc/hlp/pl/Makefile doc/hlp/ru/Makefile doc/hlp/sr/Makefile po/Makefile.in ]) dnl https://stackoverflow.com/questions/30897170/ac-subst-does-not-expand-variable/30932102#30932102 AC_CONFIG_FILES( [misc/syntax/Syntax], [${SED-sed} -e "s%\${prefix}%$PREFIX%" misc/syntax/Syntax > misc/syntax/Syntax.tmp && \ mv -f misc/syntax/Syntax.tmp misc/syntax/Syntax], [export PREFIX=$prefix] ) AC_CONFIG_FILES([ tests/Makefile tests/lib/Makefile tests/lib/mcconfig/Makefile tests/lib/search/Makefile tests/lib/strutil/Makefile tests/lib/vfs/Makefile tests/lib/vfs/mc.charsets tests/lib/widget/Makefile tests/src/Makefile tests/src/filemanager/Makefile tests/src/editor/Makefile tests/src/editor/test-data.txt tests/src/vfs/Makefile tests/src/vfs/extfs/Makefile tests/src/vfs/extfs/helpers-list/Makefile tests/src/vfs/extfs/helpers-list/data/config.sh tests/src/vfs/extfs/helpers-list/misc/Makefile tests/src/vfs/ftpfs/Makefile ]) AC_OUTPUT AC_MSG_NOTICE([ Configuration: Source code location: ${srcdir} Compiler: ${CC} Compiler flags: ${CFLAGS} Assertions: ${enable_assert} Unit tests: ${tests_msg} File system: ${vfs_type} ${vfs_flags} Screen library: ${screen_msg} Mouse support: ${mouse_lib} X11 events support: ${textmode_x11_support} With subshell support: ${subshell} With background operations: ${enable_background} With ext2fs attributes support: ${ext2fs_attr_msg} Internal editor: ${edit_msg} Diff viewer: ${diff_msg} Support for charset: ${charset_msg} Search type: ${SEARCH_TYPE} ]) dnl option checking is disable by default due to AC_CONFIG_SUBDIRS dnl we enable it back for top-level ./configure if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in fatal) AC_MSG_ERROR([unrecognized options: $ac_unrecognized_opts]) ;; *) AC_MSG_WARN( [unrecognized options: $ac_unrecognized_opts]) ;; esac fi