X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fmemcmp.m4;h=c3065d01d65bc8bac8c7bff61b71d4e023b63a07;hb=1276a2c5f24c0c932426aca9c899fa524d2443f2;hp=4442e47b6945300103ffb255dc32eb78502a76cb;hpb=e059c2358aad79ce8dfd9581dd6f12ce8503dc63;p=gnulib.git diff --git a/m4/memcmp.m4 b/m4/memcmp.m4 index 4442e47b6..c3065d01d 100644 --- a/m4/memcmp.m4 +++ b/m4/memcmp.m4 @@ -1,22 +1,61 @@ -# memcmp.m4 serial 8 -dnl Copyright (C) 2002 Free Software Foundation, Inc. -dnl This file is free software, distributed under the terms of the GNU -dnl General Public License. As a special exception to the GNU General -dnl Public License, this file may be distributed as part of a program -dnl that contains a configuration script generated by Autoconf, under -dnl the same distribution terms as the rest of that program. +# memcmp.m4 serial 16 +dnl Copyright (C) 2002-2004, 2007-2014 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. -AC_DEFUN([jm_FUNC_MEMCMP], +AC_DEFUN([gl_FUNC_MEMCMP], [ - AC_REQUIRE([AC_FUNC_MEMCMP]) - if test $ac_cv_func_memcmp_working = no; then - AC_DEFINE(memcmp, rpl_memcmp, + dnl We don't use AC_FUNC_MEMCMP any more, because it is no longer maintained + dnl in Autoconf and because it invokes AC_LIBOBJ. + AC_CACHE_CHECK([for working memcmp], [gl_cv_func_memcmp_working], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT], + [[/* Some versions of memcmp are not 8-bit clean. */ + char c0 = '\100', c1 = '\200', c2 = '\201'; + if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) + return 1; + /* The Next x86 OpenStep bug shows up only when comparing 16 bytes + or more and with at least one buffer not starting on a 4-byte + boundary. William Lewis provided this test program. */ + { + char foo[21]; + char bar[21]; + int i; + for (i = 0; i < 4; i++) + { + char *a = foo + i; + char *b = bar + i; + strcpy (a, "--------01111111"); + strcpy (b, "--------10000000"); + if (memcmp (a, b, 16) >= 0) + return 1; + } + return 0; + } + ]])], + [gl_cv_func_memcmp_working=yes], + [gl_cv_func_memcmp_working=no], + [dnl When cross-compiling, guess memcmp works when it exists. + dnl This is useful for mingw. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[int ret = memcmp ("foo", "bar", 0);]])], + [gl_cv_func_memcmp_working="guessing yes"], + [gl_cv_func_memcmp_working="guessing no"]) + ]) + ]) + case "$gl_cv_func_memcmp_working" in + *yes) gl_func_memcmp=yes ;; + *) gl_func_memcmp=no ;; + esac + if test $gl_func_memcmp = no; then + AC_DEFINE([memcmp], [rpl_memcmp], [Define to rpl_memcmp if the replacement function should be used.]) - gl_PREREQ_MEMCMP fi ]) # Prerequisites of lib/memcmp.c. -AC_DEFUN([gl_PREREQ_MEMCMP], [ - AC_CHECK_HEADERS_ONCE(string.h) -]) +AC_DEFUN([gl_PREREQ_MEMCMP], [:])