# Copyright (C) 1993-2018 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . dnl Process this file with -*- autoconf -*- to produce a configure script. AC_INIT([GNU sed], m4_esyscmd([build-aux/git-version-gen .tarball-version]), [bug-sed@gnu.org]) AC_CONFIG_AUX_DIR(build-aux) AC_CONFIG_SRCDIR([sed/sed.c]) AM_CONFIG_HEADER(config.h:config_h.in) AC_PREREQ([2.64]) AM_INIT_AUTOMAKE([1.11.1 no-dist-gzip dist-xz color-tests parallel-tests subdir-objects]) AM_SILENT_RULES([yes]) # make --enable-silent-rules the default. AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC_STDC AM_PROG_CC_C_O gl_EARLY gl_INIT gl_DISABLE_THREADS # The test suite needs to know if we have a working perl. # FIXME: this is suboptimal. Ideally, we would be able to call gl_PERL # with an ACTION-IF-NOT-FOUND argument ... cu_have_perl=yes case $PERL in *"/missing "*) cu_have_perl=no;; esac AM_CONDITIONAL([HAVE_PERL], [test $cu_have_perl = yes]) # gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found]) # ------------------------------------------------ # If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND. # Otherwise, run RUN-IF-NOT-FOUND. AC_DEFUN([gl_GCC_VERSION_IFELSE], [AC_PREPROC_IFELSE( [AC_LANG_PROGRAM( [[ #if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__) /* ok */ #else # error "your version of gcc is older than $1.$2" #endif ]]), ], [$3], [$4]) ] ) AC_CACHE_CHECK([whether "rt" can be used with fopen], [sed_cv_fopen_rt], [ AC_TRY_RUN([ #include #include int main() { FILE *fp; int result; errno = 0; fp = fopen ("conftest.c", "rt"); if (fp) fclose (fp); return fp ? 0 : 1; }], [sed_cv_fopen_rt=yes], [sed_cv_fopen_rt=no], [case $host in *cygwin* | *mingw*) sed_cv_fopen_rt=yes ;; *) sed_cv_fopen_rt='assuming no' ;; esac])]) if test "$sed_cv_fopen_rt" = yes; then AC_DEFINE([HAVE_FOPEN_RT], [1], [Defined if "rt" can be used as a mode to fopen.]) fi AC_CACHE_CHECK([whether -lcP is needed], [sed_cv_libcp_needed], [ AC_TRY_RUN([ #include #include int main() { FILE *fp; int result; errno = 0; fp = fopen ("conftest.c", "r"); if (!fp) return 0; /* error, assume not needed */ result = fflush (fp) == EOF && errno == 0; fclose (fp); return result; }], [sed_cv_libcp_needed=no], [sed_cv_libcp_needed=yes], [sed_cv_libcp_needed="assuming no"]) ]) if test "$sed_cv_libcp_needed" = yes; then LIBS="-lcP $LIBS" fi AC_CHECK_HEADERS_ONCE(locale.h errno.h wchar.h wctype.h mcheck.h, [], [], [AC_INCLUDES_DEFAULT]) AC_C_CONST AC_TYPE_SIZE_T AM_GNU_GETTEXT_VERSION([0.19.2]) AM_GNU_GETTEXT([external]) AC_CHECK_FUNCS_ONCE(isatty isascii memcpy strchr strtoul lstat readlink popen pathconf fchown fchmod setlocale) # Check whether we are able to follow symlinks if test "$ac_cv_func_lstat:$ac_cv_func_readlink" = yes:yes; then AC_DEFINE([ENABLE_FOLLOW_SYMLINKS], , [Follow symlinks when processing in place]) fi AM_CONDITIONAL([TEST_SYMLINKS], [test "$ac_cv_func_lstat:$ac_cv_func_readlink" = yes:yes]) AC_ARG_ENABLE(i18n, [ --disable-i18n disable internationalization (default=enabled)], , enable_i18n=yes) if test "x$enable_i18n" = xno; then ac_cv_func_wcscoll=no fi # Determine whether we should run UTF-8 tests by checking if cyrillic # letters are case-folded properly. The test for UTF-8 locales (both # in general and specifically for a Russian one) is a bit weak, but it # should match exactly what is done in the testsuite. In fact, sed's # logic is portable (though testing it requires care) so it is enough to # have a couple of platforms where these tests pass. Right now, only # Windows and HP/UX do not support the tests. AC_MSG_CHECKING([whether UTF-8 case folding tests should pass]) AC_TRY_RUN([ #include #include #include #include #ifdef HAVE_WCTYPE_H #include #endif int test(void) { char in[] = "\xD0\xB4"; char good[] = "\xD0\x94"; char out[10]; wchar_t in_wc, good_wc; if (mbtowc (&in_wc, in, 3) == -1) return 0; if (mbtowc (&good_wc, good, 3) == -1) return 0; if (towupper (in_wc) != good_wc) return 0; if (wctomb (out, good_wc) != 2) return 0; if (memcmp (out, good, 2)) return 0; return 1; } int main() { char *old; int len; /* Try hardcoding a Russian UTF-8 locale. If the name "ru_RU.UTF-8" is invalid, use setlocale again just to get the current locale. */ old = setlocale (LC_CTYPE, "ru_RU.UTF-8"); if (old) { if (test()) exit (0); } else old = setlocale (LC_CTYPE, "C"); /* Maybe cyrillic case folding is implemented for all UTF-8 locales. If the current locale is not UTF-8, the test will be skipped. */ len = strlen (old); if ((len > 6 && !strcmp (old + len - 6, ".UTF-8")) || (len > 6 && !strcmp (old + len - 6, ".utf-8")) || (len > 5 && !strcmp (old + len - 5, ".UTF8")) || (len > 5 && !strcmp (old + len - 5, ".utf8"))) /* ok */ ; else exit (1); /* Run the test in the detected UTF-8 locale. */ setlocale (LC_CTYPE, old); exit (!test ()); } ], [AC_MSG_RESULT([yes]); XFAIL_TESTS=], [AC_MSG_RESULT([no]); XFAIL_TESTS='testsuite/utf8-1 testsuite/utf8-2 \ testsuite/utf8-3 testsuite/utf8-4'], [AC_MSG_RESULT([don't care (cross compiling)]); XFAIL_TESTS=]) # Under MinGW, the bsd.sh test fails because of the EOF character (^Z). case $host in *mingw*) XFAIL_TESTS="$XFAIL_TESTS bsd" ;; *) ;; esac AC_SUBST([XFAIL_TESTS]) AC_ARG_ENABLE([gcc-warnings], [AS_HELP_STRING([--enable-gcc-warnings], [turn on many GCC warnings (for developers; best with GNU make)])], [case $enableval in yes|no) ;; *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; esac gl_gcc_warnings=$enableval], [ # GCC provides fine-grained control over diagnostics which # is used in gnulib for example to suppress warnings from # certain sections of code. So if this is available and # we're running from a git repo, then auto enable the warnings. gl_gcc_warnings=no gl_GCC_VERSION_IFELSE([4], [6], [test -d "$srcdir"/.git \ && ! test -f "$srcdir"/.tarball-version \ && gl_gcc_warnings=yes])] ) if test "$gl_gcc_warnings" = yes; then gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) AC_SUBST([WERROR_CFLAGS]) nw= # This, $nw, is the list of warnings we disable. nw="$nw -Wdeclaration-after-statement" # too useful to forbid nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings nw="$nw -Wsign-conversion" # Too many warnings for now nw="$nw -Wformat-nonliteral" # who.c and pinky.c strftime uses nw="$nw -Wvla" # warnings in gettext.h nw="$nw -Wswitch-default" # Too many warnings for now gl_MANYWARN_ALL_GCC([ws]) gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw]) for w in $ws; do gl_WARN_ADD([$w]) done gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now # clang is unduly picky about some things. AC_CACHE_CHECK([whether the compiler is clang], [utils_cv_clang], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifndef __clang__ #error "not clang" #endif ]])], [utils_cv_clang=yes], [utils_cv_clang=no])]) if test $utils_cv_clang = yes; then gl_WARN_ADD([-Wno-format-extra-args]) gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare]) fi gl_WARN_ADD([-fdiagnostics-show-option]) gl_WARN_ADD([-funit-at-a-time]) AC_SUBST([WARN_CFLAGS]) AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) AH_VERBATIM([FORTIFY_SOURCE], [/* Enable compile-time and run-time bounds-checking, and some warnings, without upsetting glibc 2.15+. */ #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ # define _FORTIFY_SOURCE 2 #endif ]) AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks]) # For gnulib-tests, the set is slightly smaller still. nw= gl_MANYWARN_COMPLEMENT([GNULIB_TEST_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) AC_SUBST([GNULIB_TEST_WARN_CFLAGS]) fi AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes]) # Perl is needed for help2man AC_PATH_PROG([PERL], [perl]) # building from tarball? built_from_tarball=no test -f "$srcdir"/.tarball-version && \ ! test -d "$srcdir/.git" && \ built_from_tarball=yes # Can the man page be built? # Perl needed for help2man, executing sed needed for 'sed --help' can_rebuild_man_page=no test -n "$PERL" && \ test "$cross_compiling" != yes && \ can_rebuild_man_page=yes # Build the man page when # building from git and rebuilding is possible. AM_CONDITIONAL([BUILD_MAN_PAGE], [test "$built_from_tarball" = no && \ test "$can_rebuild_man_page" = yes]) # Create a stub man page instead of failing when # building from git and rebuilding is not possible. AM_CONDITIONAL([BUILD_DUMMY_MAN_PAGE], [test "$built_from_tarball" = no && \ test "$can_rebuild_man_page" = no]) # This is needed when building outside the source dir # with --disable-dependency-tracking, see https://bugs.gnu.org/25371 AS_MKDIR_P([lib]) AS_MKDIR_P([sed]) AS_MKDIR_P([doc]) AS_MKDIR_P([testsuite]) AC_CONFIG_FILES([ Makefile po/Makefile.in gnulib-tests/Makefile ]) AC_OUTPUT