configure.ac: define ICONV_OMITS_BOM if necessary

From commit 79444c9294, ("utf8: handle systems that don't write BOM for
UTF-16", 2019-02-12), we're supporting those systems with iconv that
omits BOM with:

    make ICONV_OMITS_BOM=Yes

However, configure script wasn't taught to detect those systems.

Teach configure to do so.

Signed-off-by: Doan Tran Cong Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Doan Tran Cong Danh 2019-11-08 16:43:44 +07:00 committed by Junio C Hamano
parent 99b2ba35f5
commit 1ba6e7aecd

View File

@ -844,12 +844,61 @@ AC_MSG_CHECKING([for old iconv()])
AC_COMPILE_IFELSE([OLDICONVTEST_SRC],
[AC_MSG_RESULT([no])],
[AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_OLD_ICONV, 1)
OLD_ICONV=UnfortunatelyYes])
GIT_UNSTASH_FLAGS($ICONVDIR)
GIT_CONF_SUBST([OLD_ICONV])
#
# Define ICONV_OMITS_BOM if you are on a system which
# iconv omits bom for utf-{16,32}
if test -z "$NO_ICONV"; then
AC_CACHE_CHECK([whether iconv omits bom for utf-16 and utf-32],
[ac_cv_iconv_omits_bom],
[
old_LIBS="$LIBS"
if test -n "$NEEDS_LIBICONV"; then
LIBS="$LIBS -liconv"
fi
AC_RUN_IFELSE(
[AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
#include <iconv.h>
#ifdef HAVE_OLD_ICONV
typedef const char *iconv_ibp;
#else
typedef char *iconv_ibp;
#endif
],
[[
int v;
iconv_t conv;
char in[] = "a"; iconv_ibp pin = in;
char out[20] = ""; char *pout = out;
size_t isz = sizeof in;
size_t osz = sizeof out;
conv = iconv_open("UTF-16", "UTF-8");
iconv(conv, &pin, &isz, &pout, &osz);
iconv_close(conv);
v = (unsigned char)(out[0]) + (unsigned char)(out[1]);
return v != 0xfe + 0xff;
]])],
[ac_cv_iconv_omits_bom=no],
[ac_cv_iconv_omits_bom=yes])
LIBS="$old_LIBS"
])
if test "x$ac_cv_iconv_omits_bom" = xyes; then
ICONV_OMITS_BOM=Yes
else
ICONV_OMITS_BOM=
fi
GIT_CONF_SUBST([ICONV_OMITS_BOM])
fi
## Checks for typedefs, structures, and compiler characteristics.
AC_MSG_NOTICE([CHECKS for typedefs, structures, and compiler characteristics])
#