24 changed files with 4516 additions and 0 deletions
@ -0,0 +1,222 @@ |
|||
## DO NOT EDIT! GENERATED AUTOMATICALLY!
|
|||
## Process this file with automake to produce Makefile.in.
|
|||
# Copyright (C) 2004-2007 Free Software Foundation, Inc.
|
|||
#
|
|||
# This file is free software, distributed under the terms of the GNU
|
|||
# General Public License. As a special exception to the GNU General
|
|||
# Public License, this file may be distributed as part of a program
|
|||
# that contains a configuration script generated by Autoconf, under
|
|||
# the same distribution terms as the rest of that program.
|
|||
#
|
|||
# Generated by gnulib-tool.
|
|||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=gnulib/aux --no-libtool --macro-prefix=gl memmem
|
|||
|
|||
AUTOMAKE_OPTIONS = 1.5 gnits |
|||
|
|||
noinst_HEADERS = |
|||
noinst_LIBRARIES = |
|||
noinst_LTLIBRARIES = |
|||
EXTRA_DIST = |
|||
BUILT_SOURCES = |
|||
SUFFIXES = |
|||
MOSTLYCLEANFILES = core *.stackdump |
|||
MOSTLYCLEANDIRS = |
|||
CLEANFILES = |
|||
DISTCLEANFILES = |
|||
MAINTAINERCLEANFILES = |
|||
|
|||
AM_CPPFLAGS = |
|||
|
|||
noinst_LIBRARIES += libgnu.a |
|||
|
|||
libgnu_a_SOURCES = |
|||
libgnu_a_LIBADD = $(gl_LIBOBJS) |
|||
libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) |
|||
EXTRA_libgnu_a_SOURCES = |
|||
|
|||
## begin gnulib module link-warning
|
|||
|
|||
LINK_WARNING_H=$(top_srcdir)/gnulib/aux/link-warning.h |
|||
|
|||
EXTRA_DIST += $(top_srcdir)/gnulib/aux/link-warning.h |
|||
|
|||
## end gnulib module link-warning
|
|||
|
|||
## begin gnulib module memchr
|
|||
|
|||
|
|||
EXTRA_DIST += memchr.c |
|||
|
|||
EXTRA_libgnu_a_SOURCES += memchr.c |
|||
|
|||
## end gnulib module memchr
|
|||
|
|||
## begin gnulib module memcmp
|
|||
|
|||
|
|||
EXTRA_DIST += memcmp.c |
|||
|
|||
EXTRA_libgnu_a_SOURCES += memcmp.c |
|||
|
|||
## end gnulib module memcmp
|
|||
|
|||
## begin gnulib module memmem-simple
|
|||
|
|||
|
|||
EXTRA_DIST += memmem.c str-two-way.h |
|||
|
|||
EXTRA_libgnu_a_SOURCES += memmem.c |
|||
|
|||
## end gnulib module memmem-simple
|
|||
|
|||
## begin gnulib module stdint
|
|||
|
|||
BUILT_SOURCES += $(STDINT_H) |
|||
|
|||
# We need the following in order to create <stdint.h> when the system
|
|||
# doesn't have one that works with the given compiler.
|
|||
stdint.h: stdint.in.h |
|||
rm -f $@-t $@ |
|||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
|||
sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
|
|||
-e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
|||
-e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
|
|||
-e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
|
|||
-e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
|
|||
-e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
|
|||
-e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
|
|||
-e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
|
|||
-e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
|
|||
-e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
|
|||
-e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
|
|||
-e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
|
|||
-e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
|
|||
-e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
|
|||
-e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
|
|||
-e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
|
|||
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
|
|||
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
|
|||
< $(srcdir)/stdint.in.h; \
|
|||
} > $@-t |
|||
mv $@-t $@ |
|||
MOSTLYCLEANFILES += stdint.h stdint.h-t |
|||
|
|||
EXTRA_DIST += stdint.in.h |
|||
|
|||
## end gnulib module stdint
|
|||
|
|||
## begin gnulib module string
|
|||
|
|||
BUILT_SOURCES += string.h |
|||
|
|||
# We need the following in order to create <string.h> when the system
|
|||
# doesn't have one that works with the given compiler.
|
|||
string.h: string.in.h |
|||
rm -f $@-t $@ |
|||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
|||
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
|||
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
|
|||
-e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
|
|||
-e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
|
|||
-e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
|
|||
-e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
|
|||
-e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
|
|||
-e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
|
|||
-e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
|
|||
-e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
|
|||
-e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
|
|||
-e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
|
|||
-e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
|
|||
-e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
|
|||
-e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
|
|||
-e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
|
|||
-e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
|
|||
-e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
|
|||
-e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
|
|||
-e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
|
|||
-e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
|
|||
-e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
|
|||
-e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
|
|||
-e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
|
|||
-e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
|
|||
-e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
|
|||
-e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
|
|||
-e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
|
|||
-e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
|
|||
-e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
|
|||
-e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
|
|||
-e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
|
|||
-e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
|
|||
-e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
|
|||
-e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
|
|||
-e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
|
|||
-e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
|
|||
-e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
|
|||
-e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
|
|||
-e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \
|
|||
-e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
|
|||
-e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
|
|||
-e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
|
|||
-e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
|
|||
-e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
|
|||
-e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
|
|||
-e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \
|
|||
-e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
|
|||
-e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
|
|||
-e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
|
|||
-e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
|
|||
-e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
|
|||
-e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
|
|||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
|||
< $(srcdir)/string.in.h; \
|
|||
} > $@-t |
|||
mv $@-t $@ |
|||
MOSTLYCLEANFILES += string.h string.h-t |
|||
|
|||
EXTRA_DIST += string.in.h |
|||
|
|||
## end gnulib module string
|
|||
|
|||
## begin gnulib module wchar
|
|||
|
|||
BUILT_SOURCES += $(WCHAR_H) |
|||
|
|||
# We need the following in order to create <wchar.h> when the system
|
|||
# version does not work standalone.
|
|||
wchar.h: wchar.in.h |
|||
rm -f $@-t $@ |
|||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
|||
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
|||
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
|
|||
-e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
|
|||
-e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
|
|||
-e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
|
|||
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
|||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
|||
< $(srcdir)/wchar.in.h; \
|
|||
} > $@-t |
|||
mv $@-t $@ |
|||
MOSTLYCLEANFILES += wchar.h wchar.h-t |
|||
|
|||
EXTRA_DIST += wchar.in.h |
|||
|
|||
## end gnulib module wchar
|
|||
|
|||
## begin gnulib module dummy
|
|||
|
|||
libgnu_a_SOURCES += dummy.c |
|||
|
|||
## end gnulib module dummy
|
|||
|
|||
|
|||
mostlyclean-local: mostlyclean-generic |
|||
@for dir in '' $(MOSTLYCLEANDIRS); do \
|
|||
if test -n "$$dir" && test -d $$dir; then \
|
|||
echo "rmdir $$dir"; rmdir $$dir; \
|
|||
fi; \
|
|||
done; \
|
|||
: |
|||
@ -0,0 +1,678 @@ |
|||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|||
# @configure_input@
|
|||
|
|||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|||
# This Makefile.in is free software; the Free Software Foundation
|
|||
# gives unlimited permission to copy and/or distribute it,
|
|||
# with or without modifications, as long as this notice is preserved.
|
|||
|
|||
# This program is distributed in the hope that it will be useful,
|
|||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|||
# PARTICULAR PURPOSE.
|
|||
|
|||
@SET_MAKE@ |
|||
|
|||
# Copyright (C) 2004-2007 Free Software Foundation, Inc.
|
|||
#
|
|||
# This file is free software, distributed under the terms of the GNU
|
|||
# General Public License. As a special exception to the GNU General
|
|||
# Public License, this file may be distributed as part of a program
|
|||
# that contains a configuration script generated by Autoconf, under
|
|||
# the same distribution terms as the rest of that program.
|
|||
#
|
|||
# Generated by gnulib-tool.
|
|||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=gnulib/aux --no-libtool --macro-prefix=gl memmem
|
|||
|
|||
|
|||
|
|||
srcdir = @srcdir@ |
|||
top_srcdir = @top_srcdir@ |
|||
VPATH = @srcdir@ |
|||
pkgdatadir = $(datadir)/@PACKAGE@ |
|||
pkglibdir = $(libdir)/@PACKAGE@ |
|||
pkgincludedir = $(includedir)/@PACKAGE@ |
|||
top_builddir = .. |
|||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd |
|||
INSTALL = @INSTALL@ |
|||
install_sh_DATA = $(install_sh) -c -m 644 |
|||
install_sh_PROGRAM = $(install_sh) -c |
|||
install_sh_SCRIPT = $(install_sh) -c |
|||
INSTALL_HEADER = $(INSTALL_DATA) |
|||
transform = $(program_transform_name) |
|||
NORMAL_INSTALL = : |
|||
PRE_INSTALL = : |
|||
POST_INSTALL = : |
|||
NORMAL_UNINSTALL = : |
|||
PRE_UNINSTALL = : |
|||
POST_UNINSTALL = : |
|||
build_triplet = @build@ |
|||
host_triplet = @host@ |
|||
target_triplet = @target@ |
|||
subdir = gnulib |
|||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
|
|||
$(srcdir)/Makefile.in |
|||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
|||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
|||
$(top_srcdir)/../bfd/bfd.m4 \
|
|||
$(top_srcdir)/../config/acinclude.m4 \
|
|||
$(top_srcdir)/../config/stdint.m4 \
|
|||
$(top_srcdir)/../config/gettext-sister.m4 \
|
|||
$(top_srcdir)/../config/lib-ld.m4 \
|
|||
$(top_srcdir)/../config/lib-prefix.m4 \
|
|||
$(top_srcdir)/../config/lib-link.m4 $(top_srcdir)/configure.ac |
|||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|||
$(ACLOCAL_M4) |
|||
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs |
|||
CONFIG_HEADER = $(top_builddir)/config.h |
|||
CONFIG_CLEAN_FILES = |
|||
LIBRARIES = $(noinst_LIBRARIES) |
|||
ARFLAGS = cru |
|||
libgnu_a_AR = $(AR) $(ARFLAGS) |
|||
am_libgnu_a_OBJECTS = dummy.$(OBJEXT) |
|||
libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS) |
|||
LTLIBRARIES = $(noinst_LTLIBRARIES) |
|||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) |
|||
depcomp = $(SHELL) $(top_srcdir)/../depcomp |
|||
am__depfiles_maybe = depfiles |
|||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) |
|||
CCLD = $(CC) |
|||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ |
|||
SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES) |
|||
DIST_SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES) |
|||
HEADERS = $(noinst_HEADERS) |
|||
ETAGS = etags |
|||
CTAGS = ctags |
|||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) |
|||
ACLOCAL = @ACLOCAL@ |
|||
ALLOCA = @ALLOCA@ |
|||
AMDEP_FALSE = @AMDEP_FALSE@ |
|||
AMDEP_TRUE = @AMDEP_TRUE@ |
|||
AMTAR = @AMTAR@ |
|||
AR = @AR@ |
|||
AUTOCONF = @AUTOCONF@ |
|||
AUTOHEADER = @AUTOHEADER@ |
|||
AUTOMAKE = @AUTOMAKE@ |
|||
AWK = @AWK@ |
|||
CATALOGS = @CATALOGS@ |
|||
CATOBJEXT = @CATOBJEXT@ |
|||
CC = @CC@ |
|||
CCDEPMODE = @CCDEPMODE@ |
|||
CFLAGS = @CFLAGS@ |
|||
CONFIG_ALL = @CONFIG_ALL@ |
|||
CONFIG_CLEAN = @CONFIG_CLEAN@ |
|||
CONFIG_DEPS = @CONFIG_DEPS@ |
|||
CONFIG_INSTALL = @CONFIG_INSTALL@ |
|||
CONFIG_LDFLAGS = @CONFIG_LDFLAGS@ |
|||
CONFIG_OBS = @CONFIG_OBS@ |
|||
CONFIG_SRCS = @CONFIG_SRCS@ |
|||
CONFIG_UNINSTALL = @CONFIG_UNINSTALL@ |
|||
CPP = @CPP@ |
|||
CPPFLAGS = @CPPFLAGS@ |
|||
CYGPATH_W = @CYGPATH_W@ |
|||
DATADIRNAME = @DATADIRNAME@ |
|||
DEFS = @DEFS@ |
|||
DEPDIR = @DEPDIR@ |
|||
DLLTOOL = @DLLTOOL@ |
|||
ECHO_C = @ECHO_C@ |
|||
ECHO_N = @ECHO_N@ |
|||
ECHO_T = @ECHO_T@ |
|||
EGREP = @EGREP@ |
|||
ENABLE_CFLAGS = @ENABLE_CFLAGS@ |
|||
EXEEXT = @EXEEXT@ |
|||
GDBTKLIBS = @GDBTKLIBS@ |
|||
GDBTK_CFLAGS = @GDBTK_CFLAGS@ |
|||
GDBTK_SRC_DIR = @GDBTK_SRC_DIR@ |
|||
GENCAT = @GENCAT@ |
|||
GMSGFMT = @GMSGFMT@ |
|||
GREP = @GREP@ |
|||
GUI_CFLAGS_X = @GUI_CFLAGS_X@ |
|||
HAVE_LIBEXPAT = @HAVE_LIBEXPAT@ |
|||
INCINTL = @INCINTL@ |
|||
INSTALL_DATA = @INSTALL_DATA@ |
|||
INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
|||
INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
|||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ |
|||
INSTOBJEXT = @INSTOBJEXT@ |
|||
ITCLHDIR = @ITCLHDIR@ |
|||
ITCLLIB = @ITCLLIB@ |
|||
ITCL_BUILD_INCLUDES = @ITCL_BUILD_INCLUDES@ |
|||
ITCL_BUILD_LIB_SPEC = @ITCL_BUILD_LIB_SPEC@ |
|||
ITCL_DEFS = @ITCL_DEFS@ |
|||
ITCL_DEPS = @ITCL_DEPS@ |
|||
ITCL_LIB_SPEC = @ITCL_LIB_SPEC@ |
|||
ITCL_VERSION = @ITCL_VERSION@ |
|||
ITKHDIR = @ITKHDIR@ |
|||
ITKLIB = @ITKLIB@ |
|||
ITK_BUILD_INCLUDES = @ITK_BUILD_INCLUDES@ |
|||
ITK_BUILD_LIB_SPEC = @ITK_BUILD_LIB_SPEC@ |
|||
ITK_DEFS = @ITK_DEFS@ |
|||
ITK_DEPS = @ITK_DEPS@ |
|||
ITK_LIB_SPEC = @ITK_LIB_SPEC@ |
|||
ITK_VERSION = @ITK_VERSION@ |
|||
LDFLAGS = @LDFLAGS@ |
|||
LIBEXPAT = @LIBEXPAT@ |
|||
LIBGUI = @LIBGUI@ |
|||
LIBICONV = @LIBICONV@ |
|||
LIBINTL = @LIBINTL@ |
|||
LIBINTL_DEP = @LIBINTL_DEP@ |
|||
LIBOBJS = @LIBOBJS@ |
|||
LIBS = @LIBS@ |
|||
LN_S = @LN_S@ |
|||
LTLIBEXPAT = @LTLIBEXPAT@ |
|||
LTLIBOBJS = @LTLIBOBJS@ |
|||
MAINT = @MAINT@ |
|||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ |
|||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ |
|||
MAKEINFO = @MAKEINFO@ |
|||
MIG = @MIG@ |
|||
OBJEXT = @OBJEXT@ |
|||
PACKAGE = @PACKAGE@ |
|||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ |
|||
PACKAGE_NAME = @PACKAGE_NAME@ |
|||
PACKAGE_STRING = @PACKAGE_STRING@ |
|||
PACKAGE_TARNAME = @PACKAGE_TARNAME@ |
|||
PACKAGE_VERSION = @PACKAGE_VERSION@ |
|||
PATH_SEPARATOR = @PATH_SEPARATOR@ |
|||
POSUB = @POSUB@ |
|||
PROFILE_CFLAGS = @PROFILE_CFLAGS@ |
|||
RANLIB = @RANLIB@ |
|||
READLINE = @READLINE@ |
|||
READLINE_CFLAGS = @READLINE_CFLAGS@ |
|||
READLINE_DEPS = @READLINE_DEPS@ |
|||
SER_HARDWIRE = @SER_HARDWIRE@ |
|||
SET_MAKE = @SET_MAKE@ |
|||
SHELL = @SHELL@ |
|||
SIM = @SIM@ |
|||
SIM_OBS = @SIM_OBS@ |
|||
STRIP = @STRIP@ |
|||
TARGET_OBS = @TARGET_OBS@ |
|||
TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@ |
|||
TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@ |
|||
TCLHDIR = @TCLHDIR@ |
|||
TCL_BUILD_LIB_SPEC = @TCL_BUILD_LIB_SPEC@ |
|||
TCL_CC = @TCL_CC@ |
|||
TCL_CC_SEARCH_FLAGS = @TCL_CC_SEARCH_FLAGS@ |
|||
TCL_COMPAT_OBJS = @TCL_COMPAT_OBJS@ |
|||
TCL_DEFS = @TCL_DEFS@ |
|||
TCL_DEPS = @TCL_DEPS@ |
|||
TCL_DL_LIBS = @TCL_DL_LIBS@ |
|||
TCL_LD_FLAGS = @TCL_LD_FLAGS@ |
|||
TCL_LD_SEARCH_FLAGS = @TCL_LD_SEARCH_FLAGS@ |
|||
TCL_LIB_SPEC = @TCL_LIB_SPEC@ |
|||
TCL_LIB_VERSIONS_OK = @TCL_LIB_VERSIONS_OK@ |
|||
TCL_MAJOR_VERSION = @TCL_MAJOR_VERSION@ |
|||
TCL_MINOR_VERSION = @TCL_MINOR_VERSION@ |
|||
TCL_RANLIB = @TCL_RANLIB@ |
|||
TCL_SHLIB_CFLAGS = @TCL_SHLIB_CFLAGS@ |
|||
TCL_SHLIB_LD = @TCL_SHLIB_LD@ |
|||
TCL_SHLIB_LD_LIBS = @TCL_SHLIB_LD_LIBS@ |
|||
TCL_SHLIB_SUFFIX = @TCL_SHLIB_SUFFIX@ |
|||
TCL_VERSION = @TCL_VERSION@ |
|||
TKHDIR = @TKHDIR@ |
|||
TK_BUILD_INCLUDES = @TK_BUILD_INCLUDES@ |
|||
TK_BUILD_LIB_SPEC = @TK_BUILD_LIB_SPEC@ |
|||
TK_DEFS = @TK_DEFS@ |
|||
TK_DEPS = @TK_DEPS@ |
|||
TK_LIB_SPEC = @TK_LIB_SPEC@ |
|||
TK_VERSION = @TK_VERSION@ |
|||
TK_XINCLUDES = @TK_XINCLUDES@ |
|||
TK_XLIBSW = @TK_XLIBSW@ |
|||
USE_NLS = @USE_NLS@ |
|||
VERSION = @VERSION@ |
|||
WARN_CFLAGS = @WARN_CFLAGS@ |
|||
WERROR_CFLAGS = @WERROR_CFLAGS@ |
|||
WIN32LDAPP = @WIN32LDAPP@ |
|||
WIN32LIBS = @WIN32LIBS@ |
|||
WINDRES = @WINDRES@ |
|||
XGETTEXT = @XGETTEXT@ |
|||
XMKMF = @XMKMF@ |
|||
X_CFLAGS = @X_CFLAGS@ |
|||
X_LDFLAGS = @X_LDFLAGS@ |
|||
X_LIBS = @X_LIBS@ |
|||
YACC = @YACC@ |
|||
YFLAGS = @YFLAGS@ |
|||
ac_ct_CC = @ac_ct_CC@ |
|||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ |
|||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ |
|||
am__include = @am__include@ |
|||
am__leading_dot = @am__leading_dot@ |
|||
am__quote = @am__quote@ |
|||
am__tar = @am__tar@ |
|||
am__untar = @am__untar@ |
|||
bindir = @bindir@ |
|||
build = @build@ |
|||
build_alias = @build_alias@ |
|||
build_cpu = @build_cpu@ |
|||
build_os = @build_os@ |
|||
build_vendor = @build_vendor@ |
|||
datadir = @datadir@ |
|||
datarootdir = @datarootdir@ |
|||
docdir = @docdir@ |
|||
dvidir = @dvidir@ |
|||
exec_prefix = @exec_prefix@ |
|||
frags = @frags@ |
|||
host = @host@ |
|||
host_alias = @host_alias@ |
|||
host_cpu = @host_cpu@ |
|||
host_os = @host_os@ |
|||
host_vendor = @host_vendor@ |
|||
htmldir = @htmldir@ |
|||
includedir = @includedir@ |
|||
infodir = @infodir@ |
|||
install_sh = @install_sh@ |
|||
libdir = @libdir@ |
|||
libexecdir = @libexecdir@ |
|||
localedir = @localedir@ |
|||
localstatedir = @localstatedir@ |
|||
mandir = @mandir@ |
|||
mkdir_p = @mkdir_p@ |
|||
nm_h = @nm_h@ |
|||
oldincludedir = @oldincludedir@ |
|||
pdfdir = @pdfdir@ |
|||
prefix = @prefix@ |
|||
program_transform_name = @program_transform_name@ |
|||
psdir = @psdir@ |
|||
sbindir = @sbindir@ |
|||
sharedstatedir = @sharedstatedir@ |
|||
subdirs = @subdirs@ |
|||
sysconfdir = @sysconfdir@ |
|||
target = @target@ |
|||
target_alias = @target_alias@ |
|||
target_cpu = @target_cpu@ |
|||
target_os = @target_os@ |
|||
target_subdir = @target_subdir@ |
|||
target_vendor = @target_vendor@ |
|||
AUTOMAKE_OPTIONS = 1.5 gnits |
|||
noinst_HEADERS = |
|||
noinst_LIBRARIES = libgnu.a |
|||
noinst_LTLIBRARIES = |
|||
EXTRA_DIST = $(top_srcdir)/gnulib/aux/link-warning.h memchr.c memcmp.c \
|
|||
memmem.c str-two-way.h stdint.in.h string.in.h wchar.in.h |
|||
BUILT_SOURCES = $(STDINT_H) string.h $(WCHAR_H) |
|||
SUFFIXES = |
|||
MOSTLYCLEANFILES = core *.stackdump stdint.h stdint.h-t string.h \
|
|||
string.h-t wchar.h wchar.h-t |
|||
MOSTLYCLEANDIRS = |
|||
CLEANFILES = |
|||
DISTCLEANFILES = |
|||
MAINTAINERCLEANFILES = |
|||
AM_CPPFLAGS = |
|||
libgnu_a_SOURCES = dummy.c |
|||
libgnu_a_LIBADD = $(gl_LIBOBJS) |
|||
libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) |
|||
EXTRA_libgnu_a_SOURCES = memchr.c memcmp.c memmem.c |
|||
LINK_WARNING_H = $(top_srcdir)/gnulib/aux/link-warning.h |
|||
all: $(BUILT_SOURCES) |
|||
$(MAKE) $(AM_MAKEFLAGS) all-am |
|||
|
|||
.SUFFIXES: |
|||
.SUFFIXES: .c .o .obj |
|||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) |
|||
@for dep in $?; do \
|
|||
case '$(am__configure_deps)' in \
|
|||
*$$dep*) \
|
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|||
&& exit 0; \
|
|||
exit 1;; \
|
|||
esac; \
|
|||
done; \
|
|||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits gnulib/Makefile'; \
|
|||
cd $(top_srcdir) && \
|
|||
$(AUTOMAKE) --gnits gnulib/Makefile |
|||
.PRECIOUS: Makefile |
|||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status |
|||
@case '$?' in \
|
|||
*config.status*) \
|
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|||
*) \
|
|||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|||
esac; |
|||
|
|||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) |
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh |
|||
|
|||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) |
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh |
|||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) |
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh |
|||
|
|||
clean-noinstLIBRARIES: |
|||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) |
|||
libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) |
|||
-rm -f libgnu.a |
|||
$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD) |
|||
$(RANLIB) libgnu.a |
|||
|
|||
clean-noinstLTLIBRARIES: |
|||
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) |
|||
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
|
|||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
|||
test "$$dir" != "$$p" || dir=.; \
|
|||
echo "rm -f \"$${dir}/so_locations\""; \
|
|||
rm -f "$${dir}/so_locations"; \
|
|||
done |
|||
|
|||
mostlyclean-compile: |
|||
-rm -f *.$(OBJEXT) |
|||
|
|||
distclean-compile: |
|||
-rm -f *.tab.c |
|||
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@ |
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@ |
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memcmp.Po@am__quote@ |
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmem.Po@am__quote@ |
|||
|
|||
.c.o: |
|||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ |
|||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi |
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ |
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
|||
@am__fastdepCC_FALSE@ $(COMPILE) -c $< |
|||
|
|||
.c.obj: |
|||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ |
|||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi |
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ |
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
|||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` |
|||
uninstall-info-am: |
|||
|
|||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) |
|||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|||
unique=`for i in $$list; do \
|
|||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|||
done | \
|
|||
$(AWK) ' { files[$$0] = 1; } \
|
|||
END { for (i in files) print i; }'`; \
|
|||
mkid -fID $$unique |
|||
tags: TAGS |
|||
|
|||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ |
|||
$(TAGS_FILES) $(LISP) |
|||
tags=; \
|
|||
here=`pwd`; \
|
|||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|||
unique=`for i in $$list; do \
|
|||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|||
done | \
|
|||
$(AWK) ' { files[$$0] = 1; } \
|
|||
END { for (i in files) print i; }'`; \
|
|||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|||
test -n "$$unique" || unique=$$empty_fix; \
|
|||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|||
$$tags $$unique; \
|
|||
fi |
|||
ctags: CTAGS |
|||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ |
|||
$(TAGS_FILES) $(LISP) |
|||
tags=; \
|
|||
here=`pwd`; \
|
|||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|||
unique=`for i in $$list; do \
|
|||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|||
done | \
|
|||
$(AWK) ' { files[$$0] = 1; } \
|
|||
END { for (i in files) print i; }'`; \
|
|||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|||
$$tags $$unique |
|||
|
|||
GTAGS: |
|||
here=`$(am__cd) $(top_builddir) && pwd` \
|
|||
&& cd $(top_srcdir) \
|
|||
&& gtags -i $(GTAGS_ARGS) $$here |
|||
|
|||
distclean-tags: |
|||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags |
|||
|
|||
distdir: $(DISTFILES) |
|||
$(mkdir_p) $(distdir)/$(top_srcdir)/gnulib/aux |
|||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|||
list='$(DISTFILES)'; for file in $$list; do \
|
|||
case $$file in \
|
|||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|||
esac; \
|
|||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|||
dir="/$$dir"; \
|
|||
$(mkdir_p) "$(distdir)$$dir"; \
|
|||
else \
|
|||
dir=''; \
|
|||
fi; \
|
|||
if test -d $$d/$$file; then \
|
|||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|||
fi; \
|
|||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|||
else \
|
|||
test -f $(distdir)/$$file \
|
|||
|| cp -p $$d/$$file $(distdir)/$$file \
|
|||
|| exit 1; \
|
|||
fi; \
|
|||
done |
|||
check-am: all-am |
|||
check: $(BUILT_SOURCES) |
|||
$(MAKE) $(AM_MAKEFLAGS) check-am |
|||
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) |
|||
installdirs: |
|||
install: $(BUILT_SOURCES) |
|||
$(MAKE) $(AM_MAKEFLAGS) install-am |
|||
install-exec: install-exec-am |
|||
install-data: install-data-am |
|||
uninstall: uninstall-am |
|||
|
|||
install-am: all-am |
|||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am |
|||
|
|||
installcheck: installcheck-am |
|||
install-strip: |
|||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|||
`test -z '$(STRIP)' || \
|
|||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install |
|||
mostlyclean-generic: |
|||
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) |
|||
|
|||
clean-generic: |
|||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) |
|||
|
|||
distclean-generic: |
|||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) |
|||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) |
|||
|
|||
maintainer-clean-generic: |
|||
@echo "This command is intended for maintainers to use" |
|||
@echo "it deletes files that may require special tools to rebuild." |
|||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) |
|||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) |
|||
clean: clean-am |
|||
|
|||
clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ |
|||
mostlyclean-am |
|||
|
|||
distclean: distclean-am |
|||
-rm -rf ./$(DEPDIR) |
|||
-rm -f Makefile |
|||
distclean-am: clean-am distclean-compile distclean-generic \ |
|||
distclean-tags |
|||
|
|||
dvi: dvi-am |
|||
|
|||
dvi-am: |
|||
|
|||
html: html-am |
|||
|
|||
info: info-am |
|||
|
|||
info-am: |
|||
|
|||
install-data-am: |
|||
|
|||
install-exec-am: |
|||
|
|||
install-info: install-info-am |
|||
|
|||
install-man: |
|||
|
|||
installcheck-am: |
|||
|
|||
maintainer-clean: maintainer-clean-am |
|||
-rm -rf ./$(DEPDIR) |
|||
-rm -f Makefile |
|||
maintainer-clean-am: distclean-am maintainer-clean-generic |
|||
|
|||
mostlyclean: mostlyclean-am |
|||
|
|||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \ |
|||
mostlyclean-local |
|||
|
|||
pdf: pdf-am |
|||
|
|||
pdf-am: |
|||
|
|||
ps: ps-am |
|||
|
|||
ps-am: |
|||
|
|||
uninstall-am: uninstall-info-am |
|||
|
|||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ |
|||
clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags distclean \
|
|||
distclean-compile distclean-generic distclean-tags distdir dvi \
|
|||
dvi-am html html-am info info-am install install-am \
|
|||
install-data install-data-am install-exec install-exec-am \
|
|||
install-info install-info-am install-man install-strip \
|
|||
installcheck installcheck-am installdirs maintainer-clean \
|
|||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
|||
mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am tags \
|
|||
uninstall uninstall-am uninstall-info-am |
|||
|
|||
|
|||
# We need the following in order to create <stdint.h> when the system
|
|||
# doesn't have one that works with the given compiler.
|
|||
stdint.h: stdint.in.h |
|||
rm -f $@-t $@ |
|||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
|||
sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
|
|||
-e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
|||
-e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
|
|||
-e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
|
|||
-e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
|
|||
-e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
|
|||
-e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
|
|||
-e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
|
|||
-e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
|
|||
-e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
|
|||
-e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
|
|||
-e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
|
|||
-e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
|
|||
-e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
|
|||
-e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
|
|||
-e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
|
|||
-e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
|
|||
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
|
|||
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
|
|||
< $(srcdir)/stdint.in.h; \
|
|||
} > $@-t |
|||
mv $@-t $@ |
|||
|
|||
# We need the following in order to create <string.h> when the system
|
|||
# doesn't have one that works with the given compiler.
|
|||
string.h: string.in.h |
|||
rm -f $@-t $@ |
|||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
|||
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
|||
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
|
|||
-e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
|
|||
-e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
|
|||
-e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
|
|||
-e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
|
|||
-e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
|
|||
-e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
|
|||
-e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
|
|||
-e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
|
|||
-e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
|
|||
-e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
|
|||
-e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
|
|||
-e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
|
|||
-e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
|
|||
-e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
|
|||
-e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
|
|||
-e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
|
|||
-e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
|
|||
-e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
|
|||
-e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
|
|||
-e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
|
|||
-e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
|
|||
-e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
|
|||
-e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
|
|||
-e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
|
|||
-e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
|
|||
-e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
|
|||
-e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
|
|||
-e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
|
|||
-e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
|
|||
-e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
|
|||
-e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
|
|||
-e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
|
|||
-e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
|
|||
-e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
|
|||
-e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
|
|||
-e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
|
|||
-e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
|
|||
-e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \
|
|||
-e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
|
|||
-e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
|
|||
-e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
|
|||
-e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
|
|||
-e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
|
|||
-e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
|
|||
-e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \
|
|||
-e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
|
|||
-e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
|
|||
-e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
|
|||
-e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
|
|||
-e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
|
|||
-e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
|
|||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
|||
< $(srcdir)/string.in.h; \
|
|||
} > $@-t |
|||
mv $@-t $@ |
|||
|
|||
# We need the following in order to create <wchar.h> when the system
|
|||
# version does not work standalone.
|
|||
wchar.h: wchar.in.h |
|||
rm -f $@-t $@ |
|||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
|||
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
|||
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
|
|||
-e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
|
|||
-e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
|
|||
-e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
|
|||
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
|||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
|||
< $(srcdir)/wchar.in.h; \
|
|||
} > $@-t |
|||
mv $@-t $@ |
|||
|
|||
mostlyclean-local: mostlyclean-generic |
|||
@for dir in '' $(MOSTLYCLEANDIRS); do \
|
|||
if test -n "$$dir" && test -d $$dir; then \
|
|||
echo "rmdir $$dir"; rmdir $$dir; \
|
|||
fi; \
|
|||
done; \
|
|||
: |
|||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|||
.NOEXPORT: |
|||
@ -0,0 +1,42 @@ |
|||
/* A dummy file, to prevent empty libraries from breaking builds.
|
|||
Copyright (C) 2004, 2007 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 <http://www.gnu.org/licenses/>. */
|
|||
|
|||
/* Some systems, reportedly OpenBSD and Mac OS X, refuse to create
|
|||
libraries without any object files. You might get an error like: |
|||
|
|||
> ar cru .libs/libgl.a |
|||
> ar: no archive members specified |
|||
|
|||
Compiling this file, and adding its object file to the library, will |
|||
prevent the library from being empty. */ |
|||
|
|||
/* Some systems, such as Solaris with cc 5.0, refuse to work with libraries
|
|||
that don't export any symbol. You might get an error like: |
|||
|
|||
> cc ... libgnu.a |
|||
> ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a |
|||
|
|||
Compiling this file, and adding its object file to the library, will |
|||
prevent the library from exporting no symbols. */ |
|||
|
|||
#ifdef __sun |
|||
/* This declaration ensures that the library will export at least 1 symbol. */ |
|||
int gl_dummy_symbol; |
|||
#else |
|||
/* This declaration is solely to ensure that after preprocessing
|
|||
this file is never empty. */ |
|||
typedef int dummy; |
|||
#endif |
|||
@ -0,0 +1,82 @@ |
|||
# serial 5 -*- Autoconf -*- |
|||
# Enable extensions on systems that normally disable them. |
|||
|
|||
# Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. |
|||
# This file is free software; the Free Software Foundation |
|||
# gives unlimited permission to copy and/or distribute it, |
|||
# with or without modifications, as long as this notice is preserved. |
|||
|
|||
# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS |
|||
# Autoconf. Perhaps we can remove this once we can assume Autoconf |
|||
# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly |
|||
# enough in this area it's likely we'll need to redefine |
|||
# AC_USE_SYSTEM_EXTENSIONS for quite some time. |
|||
|
|||
# AC_USE_SYSTEM_EXTENSIONS |
|||
# ------------------------ |
|||
# Enable extensions on systems that normally disable them, |
|||
# typically due to standards-conformance issues. |
|||
# Remember that #undef in AH_VERBATIM gets replaced with #define by |
|||
# AC_DEFINE. The goal here is to define all known feature-enabling |
|||
# macros, then, if reports of conflicts are made, disable macros that |
|||
# cause problems on some platforms (such as __EXTENSIONS__). |
|||
AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], |
|||
[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl |
|||
AC_BEFORE([$0], [AC_RUN_IFELSE])dnl |
|||
|
|||
AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) |
|||
if test "$MINIX" = yes; then |
|||
AC_DEFINE([_POSIX_SOURCE], [1], |
|||
[Define to 1 if you need to in order for `stat' and other |
|||
things to work.]) |
|||
AC_DEFINE([_POSIX_1_SOURCE], [2], |
|||
[Define to 2 if the system does not provide POSIX.1 features |
|||
except with this defined.]) |
|||
AC_DEFINE([_MINIX], [1], |
|||
[Define to 1 if on MINIX.]) |
|||
fi |
|||
|
|||
AH_VERBATIM([__EXTENSIONS__], |
|||
[/* Enable extensions on AIX 3, Interix. */ |
|||
#ifndef _ALL_SOURCE |
|||
# undef _ALL_SOURCE |
|||
#endif |
|||
/* Enable GNU extensions on systems that have them. */ |
|||
#ifndef _GNU_SOURCE |
|||
# undef _GNU_SOURCE |
|||
#endif |
|||
/* Enable threading extensions on Solaris. */ |
|||
#ifndef _POSIX_PTHREAD_SEMANTICS |
|||
# undef _POSIX_PTHREAD_SEMANTICS |
|||
#endif |
|||
/* Enable extensions on HP NonStop. */ |
|||
#ifndef _TANDEM_SOURCE |
|||
# undef _TANDEM_SOURCE |
|||
#endif |
|||
/* Enable general extensions on Solaris. */ |
|||
#ifndef __EXTENSIONS__ |
|||
# undef __EXTENSIONS__ |
|||
#endif |
|||
]) |
|||
AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], |
|||
[ac_cv_safe_to_define___extensions__], |
|||
[AC_COMPILE_IFELSE( |
|||
[AC_LANG_PROGRAM([ |
|||
# define __EXTENSIONS__ 1 |
|||
AC_INCLUDES_DEFAULT])], |
|||
[ac_cv_safe_to_define___extensions__=yes], |
|||
[ac_cv_safe_to_define___extensions__=no])]) |
|||
test $ac_cv_safe_to_define___extensions__ = yes && |
|||
AC_DEFINE([__EXTENSIONS__]) |
|||
AC_DEFINE([_ALL_SOURCE]) |
|||
AC_DEFINE([_GNU_SOURCE]) |
|||
AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) |
|||
AC_DEFINE([_TANDEM_SOURCE]) |
|||
])# AC_USE_SYSTEM_EXTENSIONS |
|||
|
|||
# gl_USE_SYSTEM_EXTENSIONS |
|||
# ------------------------ |
|||
# Enable extensions on systems that normally disable them, |
|||
# typically due to standards-conformance issues. |
|||
AC_DEFUN([gl_USE_SYSTEM_EXTENSIONS], |
|||
[AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])]) |
|||
@ -0,0 +1,32 @@ |
|||
# Copyright (C) 2004-2007 Free Software Foundation, Inc. |
|||
# |
|||
# This file is free software, distributed under the terms of the GNU |
|||
# General Public License. As a special exception to the GNU General |
|||
# Public License, this file may be distributed as part of a program |
|||
# that contains a configuration script generated by Autoconf, under |
|||
# the same distribution terms as the rest of that program. |
|||
# |
|||
# Generated by gnulib-tool. |
|||
# |
|||
# This file represents the specification of how gnulib-tool is used. |
|||
# It acts as a cache: It is written and read by gnulib-tool. |
|||
# In projects using CVS, this file is meant to be stored in CVS, |
|||
# like the configure.ac and various Makefile.am files. |
|||
|
|||
|
|||
# Specification in the form of a command-line invocation: |
|||
# gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=gnulib/aux --no-libtool --macro-prefix=gl memmem |
|||
|
|||
# Specification in the form of a few gnulib-tool.m4 macro invocations: |
|||
gl_LOCAL_DIR([]) |
|||
gl_MODULES([memmem]) |
|||
gl_AVOID([]) |
|||
gl_SOURCE_BASE([gnulib]) |
|||
gl_M4_BASE([gnulib/m4]) |
|||
gl_PO_BASE([]) |
|||
gl_DOC_BASE([doc]) |
|||
gl_TESTS_BASE([tests]) |
|||
gl_LIB([libgnu]) |
|||
gl_MAKEFILE_NAME([]) |
|||
gl_MACRO_PREFIX([gl]) |
|||
gl_PO_DOMAIN([]) |
|||
@ -0,0 +1,65 @@ |
|||
# gnulib-common.m4 serial 3 |
|||
dnl Copyright (C) 2007 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. |
|||
|
|||
# gl_MODULE_INDICATOR([modulename]) |
|||
# defines a C macro indicating the presence of the given module. |
|||
AC_DEFUN([gl_MODULE_INDICATOR], |
|||
[ |
|||
AC_DEFINE([GNULIB_]translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], |
|||
[Define to 1 when using the gnulib module ]$1[.]) |
|||
]) |
|||
|
|||
# AC_PROG_MKDIR_P |
|||
# is a backport of autoconf-2.60's AC_PROG_MKDIR_P. |
|||
# Remove this macro when we can assume autoconf >= 2.60. |
|||
m4_ifdef([AC_PROG_MKDIR_P], [], [ |
|||
AC_DEFUN([AC_PROG_MKDIR_P], |
|||
[AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake |
|||
MKDIR_P='$(mkdir_p)' |
|||
AC_SUBST([MKDIR_P])])]) |
|||
|
|||
# AC_C_RESTRICT |
|||
# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, |
|||
# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ |
|||
# works. |
|||
# This definition can be removed once autoconf >= 2.62 can be assumed. |
|||
AC_DEFUN([AC_C_RESTRICT], |
|||
[AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, |
|||
[ac_cv_c_restrict=no |
|||
# The order here caters to the fact that C++ does not require restrict. |
|||
for ac_kw in __restrict __restrict__ _Restrict restrict; do |
|||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( |
|||
[[typedef int * int_ptr; |
|||
int foo (int_ptr $ac_kw ip) { |
|||
return ip[0]; |
|||
}]], |
|||
[[int s[1]; |
|||
int * $ac_kw t = s; |
|||
t[0] = 0; |
|||
return foo(t)]])], |
|||
[ac_cv_c_restrict=$ac_kw]) |
|||
test "$ac_cv_c_restrict" != no && break |
|||
done |
|||
]) |
|||
AH_VERBATIM([restrict], |
|||
[/* Define to the equivalent of the C99 'restrict' keyword, or to |
|||
nothing if this is not supported. Do not define if restrict is |
|||
supported directly. */ |
|||
#undef restrict |
|||
/* Work around a bug in Sun C++: it does not support _Restrict, even |
|||
though the corresponding Sun C compiler does, which causes |
|||
"#define restrict _Restrict" in the previous line. Perhaps some future |
|||
version of Sun C++ will work with _Restrict; if so, it'll probably |
|||
define __RESTRICT, just as Sun C does. */ |
|||
#if defined __SUNPRO_CC && !defined __RESTRICT |
|||
# define _Restrict |
|||
#endif]) |
|||
case $ac_cv_c_restrict in |
|||
restrict) ;; |
|||
no) AC_DEFINE([restrict], []) ;; |
|||
*) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; |
|||
esac |
|||
]) |
|||
@ -0,0 +1,190 @@ |
|||
# DO NOT EDIT! GENERATED AUTOMATICALLY! |
|||
# Copyright (C) 2004-2007 Free Software Foundation, Inc. |
|||
# |
|||
# This file is free software, distributed under the terms of the GNU |
|||
# General Public License. As a special exception to the GNU General |
|||
# Public License, this file may be distributed as part of a program |
|||
# that contains a configuration script generated by Autoconf, under |
|||
# the same distribution terms as the rest of that program. |
|||
# |
|||
# Generated by gnulib-tool. |
|||
# |
|||
# This file represents the compiled summary of the specification in |
|||
# gnulib-cache.m4. It lists the computed macro invocations that need |
|||
# to be invoked from configure.ac. |
|||
# In projects using CVS, this file can be treated like other built files. |
|||
|
|||
|
|||
# This macro should be invoked from ./configure.ac, in the section |
|||
# "Checks for programs", right after AC_PROG_CC, and certainly before |
|||
# any checks for libraries, header files, types and library functions. |
|||
AC_DEFUN([gl_EARLY], |
|||
[ |
|||
m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace |
|||
m4_pattern_allow([^gl_ES$])dnl a valid locale name |
|||
m4_pattern_allow([^gl_LIBOBJS$])dnl a variable |
|||
m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable |
|||
AC_REQUIRE([AC_PROG_RANLIB]) |
|||
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) |
|||
]) |
|||
|
|||
# This macro should be invoked from ./configure.ac, in the section |
|||
# "Check for header files, types and library functions". |
|||
AC_DEFUN([gl_INIT], |
|||
[ |
|||
AM_CONDITIONAL([GL_COND_LIBTOOL], [false]) |
|||
gl_cond_libtool=false |
|||
gl_libdeps= |
|||
gl_ltlibdeps= |
|||
m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) |
|||
m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) |
|||
m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) |
|||
gl_source_base='gnulib' |
|||
gl_FUNC_MEMCHR |
|||
gl_FUNC_MEMCMP |
|||
gl_FUNC_MEMMEM |
|||
gl_FUNC_MEMMEM_SIMPLE |
|||
gl_STRING_MODULE_INDICATOR([memmem]) |
|||
gl_STDINT_H |
|||
gl_HEADER_STRING_H |
|||
gl_WCHAR_H |
|||
m4_popdef([AC_LIBSOURCES]) |
|||
m4_popdef([AC_REPLACE_FUNCS]) |
|||
m4_popdef([AC_LIBOBJ]) |
|||
AC_CONFIG_COMMANDS_PRE([ |
|||
gl_libobjs= |
|||
gl_ltlibobjs= |
|||
if test -n "$gl_LIBOBJS"; then |
|||
# Remove the extension. |
|||
sed_drop_objext='s/\.o$//;s/\.obj$//' |
|||
for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do |
|||
gl_libobjs="$gl_libobjs $i.$ac_objext" |
|||
gl_ltlibobjs="$gl_ltlibobjs $i.lo" |
|||
done |
|||
fi |
|||
AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) |
|||
AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) |
|||
]) |
|||
gltests_libdeps= |
|||
gltests_ltlibdeps= |
|||
m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) |
|||
m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) |
|||
m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) |
|||
gl_source_base='tests' |
|||
m4_popdef([AC_LIBSOURCES]) |
|||
m4_popdef([AC_REPLACE_FUNCS]) |
|||
m4_popdef([AC_LIBOBJ]) |
|||
AC_CONFIG_COMMANDS_PRE([ |
|||
gltests_libobjs= |
|||
gltests_ltlibobjs= |
|||
if test -n "$gltests_LIBOBJS"; then |
|||
# Remove the extension. |
|||
sed_drop_objext='s/\.o$//;s/\.obj$//' |
|||
for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do |
|||
gltests_libobjs="$gltests_libobjs $i.$ac_objext" |
|||
gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" |
|||
done |
|||
fi |
|||
AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) |
|||
AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) |
|||
]) |
|||
LIBGNU_LIBDEPS="$gl_libdeps" |
|||
AC_SUBST([LIBGNU_LIBDEPS]) |
|||
LIBGNU_LTLIBDEPS="$gl_ltlibdeps" |
|||
AC_SUBST([LIBGNU_LTLIBDEPS]) |
|||
]) |
|||
|
|||
# Like AC_LIBOBJ, except that the module name goes |
|||
# into gl_LIBOBJS instead of into LIBOBJS. |
|||
AC_DEFUN([gl_LIBOBJ], [ |
|||
AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl |
|||
gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" |
|||
]) |
|||
|
|||
# m4_foreach_w is provided by autoconf-2.59c and later. |
|||
# This definition is to accommodate developers using versions |
|||
# of autoconf older than that. |
|||
m4_ifndef([m4_foreach_w], |
|||
[m4_define([m4_foreach_w], |
|||
[m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) |
|||
|
|||
# Like AC_REPLACE_FUNCS, except that the module name goes |
|||
# into gl_LIBOBJS instead of into LIBOBJS. |
|||
AC_DEFUN([gl_REPLACE_FUNCS], [ |
|||
m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl |
|||
AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) |
|||
]) |
|||
|
|||
# Like AC_LIBSOURCES, except the directory where the source file is |
|||
# expected is derived from the gnulib-tool parametrization, |
|||
# and alloca is special cased (for the alloca-opt module). |
|||
# We could also entirely rely on EXTRA_lib..._SOURCES. |
|||
AC_DEFUN([gl_LIBSOURCES], [ |
|||
m4_foreach([_gl_NAME], [$1], [ |
|||
m4_if(_gl_NAME, [alloca.c], [], [ |
|||
m4_syscmd([test -r gnulib/]_gl_NAME[ || test ! -d gnulib])dnl |
|||
m4_if(m4_sysval, [0], [], |
|||
[AC_FATAL([missing gnulib/]_gl_NAME)]) |
|||
]) |
|||
]) |
|||
]) |
|||
|
|||
# Like AC_LIBOBJ, except that the module name goes |
|||
# into gltests_LIBOBJS instead of into LIBOBJS. |
|||
AC_DEFUN([gltests_LIBOBJ], [ |
|||
AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl |
|||
gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" |
|||
]) |
|||
|
|||
# m4_foreach_w is provided by autoconf-2.59c and later. |
|||
# This definition is to accommodate developers using versions |
|||
# of autoconf older than that. |
|||
m4_ifndef([m4_foreach_w], |
|||
[m4_define([m4_foreach_w], |
|||
[m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) |
|||
|
|||
# Like AC_REPLACE_FUNCS, except that the module name goes |
|||
# into gltests_LIBOBJS instead of into LIBOBJS. |
|||
AC_DEFUN([gltests_REPLACE_FUNCS], [ |
|||
m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl |
|||
AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) |
|||
]) |
|||
|
|||
# Like AC_LIBSOURCES, except the directory where the source file is |
|||
# expected is derived from the gnulib-tool parametrization, |
|||
# and alloca is special cased (for the alloca-opt module). |
|||
# We could also entirely rely on EXTRA_lib..._SOURCES. |
|||
AC_DEFUN([gltests_LIBSOURCES], [ |
|||
m4_foreach([_gl_NAME], [$1], [ |
|||
m4_if(_gl_NAME, [alloca.c], [], [ |
|||
m4_syscmd([test -r tests/]_gl_NAME[ || test ! -d tests])dnl |
|||
m4_if(m4_sysval, [0], [], |
|||
[AC_FATAL([missing tests/]_gl_NAME)]) |
|||
]) |
|||
]) |
|||
]) |
|||
|
|||
# This macro records the list of files which have been installed by |
|||
# gnulib-tool and may be removed by future gnulib-tool invocations. |
|||
AC_DEFUN([gl_FILE_LIST], [ |
|||
build-aux/link-warning.h |
|||
lib/dummy.c |
|||
lib/memchr.c |
|||
lib/memcmp.c |
|||
lib/memmem.c |
|||
lib/stdint.in.h |
|||
lib/str-two-way.h |
|||
lib/string.in.h |
|||
lib/wchar.in.h |
|||
m4/extensions.m4 |
|||
m4/gnulib-common.m4 |
|||
m4/include_next.m4 |
|||
m4/longlong.m4 |
|||
m4/memchr.m4 |
|||
m4/memcmp.m4 |
|||
m4/memmem.m4 |
|||
m4/onceonly_2_57.m4 |
|||
m4/stdint.m4 |
|||
m4/string_h.m4 |
|||
m4/wchar.m4 |
|||
]) |
|||
@ -0,0 +1,33 @@ |
|||
# gnulib-tool.m4 serial 1 |
|||
dnl Copyright (C) 2004-2005 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. |
|||
|
|||
dnl The following macros need not be invoked explicitly. |
|||
dnl Invoking them does nothing except to declare default arguments |
|||
dnl for "gnulib-tool --import". |
|||
|
|||
dnl Usage: gl_MODULES([module1 module2 ...]) |
|||
AC_DEFUN([gl_MODULES], []) |
|||
|
|||
dnl Usage: gl_AVOID([module1 module2 ...]) |
|||
AC_DEFUN([gl_AVOID], []) |
|||
|
|||
dnl Usage: gl_SOURCE_BASE([DIR]) |
|||
AC_DEFUN([gl_SOURCE_BASE], []) |
|||
|
|||
dnl Usage: gl_M4_BASE([DIR]) |
|||
AC_DEFUN([gl_M4_BASE], []) |
|||
|
|||
dnl Usage: gl_LIB([LIBNAME]) |
|||
AC_DEFUN([gl_LIB], []) |
|||
|
|||
dnl Usage: gl_LGPL |
|||
AC_DEFUN([gl_LGPL], []) |
|||
|
|||
dnl Usage: gl_LIBTOOL |
|||
AC_DEFUN([gl_LIBTOOL], []) |
|||
|
|||
dnl Usage: gl_MACRO_PREFIX([PREFIX]) |
|||
AC_DEFUN([gl_MACRO_PREFIX], []) |
|||
@ -0,0 +1,107 @@ |
|||
# include_next.m4 serial 4 |
|||
dnl Copyright (C) 2006, 2007 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. |
|||
|
|||
dnl From Paul Eggert and Derek Price. |
|||
|
|||
AC_DEFUN([gl_INCLUDE_NEXT], |
|||
[ |
|||
AC_LANG_PREPROC_REQUIRE() |
|||
AC_CACHE_CHECK([whether the preprocessor supports include_next], |
|||
[gl_cv_have_include_next], |
|||
[rm -rf conftestd1 conftestd2 |
|||
mkdir conftestd1 conftestd2 |
|||
cat <<EOF > conftestd1/conftest.h |
|||
#define DEFINED_IN_CONFTESTD1 |
|||
#include_next <conftest.h> |
|||
#ifdef DEFINED_IN_CONFTESTD2 |
|||
int foo; |
|||
#else |
|||
#error "include_next doesn't work" |
|||
#endif |
|||
EOF |
|||
cat <<EOF > conftestd2/conftest.h |
|||
#ifndef DEFINED_IN_CONFTESTD1 |
|||
#error "include_next test doesn't work" |
|||
#endif |
|||
#define DEFINED_IN_CONFTESTD2 |
|||
EOF |
|||
save_CPPFLAGS="$CPPFLAGS" |
|||
CPPFLAGS="$CPPFLAGS -Iconftestd1 -Iconftestd2" |
|||
AC_COMPILE_IFELSE([#include <conftest.h>], |
|||
[gl_cv_have_include_next=yes], |
|||
[gl_cv_have_include_next=no]) |
|||
CPPFLAGS="$save_CPPFLAGS" |
|||
rm -rf conftestd1 conftestd2 |
|||
]) |
|||
if test $gl_cv_have_include_next = yes; then |
|||
|
|||
dnl FIXME: Remove HAVE_INCLUDE_NEXT and update everything that uses it |
|||
dnl to use @INCLUDE_NEXT@ instead. |
|||
AC_DEFINE([HAVE_INCLUDE_NEXT], 1, |
|||
[Define if your compiler supports the #include_next directive.]) |
|||
|
|||
INCLUDE_NEXT=include_next |
|||
else |
|||
INCLUDE_NEXT=include |
|||
fi |
|||
AC_SUBST([INCLUDE_NEXT]) |
|||
]) |
|||
|
|||
# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) |
|||
# ------------------------------------------ |
|||
# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be |
|||
# '<foo.h>'; otherwise define it to be |
|||
# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. |
|||
# That way, a header file with the following line: |
|||
# #@INCLUDE_NEXT@ @NEXT_FOO_H@ |
|||
# behaves (after sed substitution) as if it contained |
|||
# #include_next <foo.h> |
|||
# even if the compiler does not support include_next. |
|||
# The three "///" are to pacify Sun C 5.8, which otherwise would say |
|||
# "warning: #include of /usr/include/... may be non-portable". |
|||
# Use `""', not `<>', so that the /// cannot be confused with a C99 comment. |
|||
AC_DEFUN([gl_CHECK_NEXT_HEADERS], |
|||
[ |
|||
AC_REQUIRE([gl_INCLUDE_NEXT]) |
|||
AC_CHECK_HEADERS_ONCE([$1]) |
|||
|
|||
AC_FOREACH([gl_HEADER_NAME], [$1], |
|||
[AS_VAR_PUSHDEF([gl_next_header], |
|||
[gl_cv_next_]m4_quote(m4_defn([gl_HEADER_NAME]))) |
|||
if test $gl_cv_have_include_next = yes; then |
|||
AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) |
|||
else |
|||
AC_CACHE_CHECK( |
|||
[absolute name of <]m4_quote(m4_defn([gl_HEADER_NAME]))[>], |
|||
m4_quote(m4_defn([gl_next_header])), |
|||
[AS_VAR_PUSHDEF([gl_header_exists], |
|||
[ac_cv_header_]m4_quote(m4_defn([gl_HEADER_NAME]))) |
|||
if test AS_VAR_GET(gl_header_exists) = yes; then |
|||
AC_LANG_CONFTEST( |
|||
[AC_LANG_SOURCE( |
|||
[[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] |
|||
)]) |
|||
dnl eval is necessary to expand ac_cpp. |
|||
dnl Ultrix and Pyramid sh refuse to redirect output of eval, |
|||
dnl so use subshell. |
|||
AS_VAR_SET([gl_next_header], |
|||
['"'`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | |
|||
sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{ |
|||
s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1# |
|||
s#^/[^/]#//&# |
|||
p |
|||
q |
|||
}'`'"']) |
|||
else |
|||
AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) |
|||
fi |
|||
AS_VAR_POPDEF([gl_header_exists])]) |
|||
fi |
|||
AC_SUBST( |
|||
AS_TR_CPP([NEXT_]m4_quote(m4_defn([gl_HEADER_NAME]))), |
|||
[AS_VAR_GET([gl_next_header])]) |
|||
AS_VAR_POPDEF([gl_next_header])]) |
|||
]) |
|||
@ -0,0 +1,106 @@ |
|||
# longlong.m4 serial 13 |
|||
dnl Copyright (C) 1999-2007 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. |
|||
|
|||
dnl From Paul Eggert. |
|||
|
|||
# Define HAVE_LONG_LONG_INT if 'long long int' works. |
|||
# This fixes a bug in Autoconf 2.61, but can be removed once we |
|||
# assume 2.62 everywhere. |
|||
|
|||
# Note: If the type 'long long int' exists but is only 32 bits large |
|||
# (as on some very old compilers), HAVE_LONG_LONG_INT will not be |
|||
# defined. In this case you can treat 'long long int' like 'long int'. |
|||
|
|||
AC_DEFUN([AC_TYPE_LONG_LONG_INT], |
|||
[ |
|||
AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], |
|||
[AC_LINK_IFELSE( |
|||
[_AC_TYPE_LONG_LONG_SNIPPET], |
|||
[dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. |
|||
dnl If cross compiling, assume the bug isn't important, since |
|||
dnl nobody cross compiles for this platform as far as we know. |
|||
AC_RUN_IFELSE( |
|||
[AC_LANG_PROGRAM( |
|||
[[@%:@include <limits.h> |
|||
@%:@ifndef LLONG_MAX |
|||
@%:@ define HALF \ |
|||
(1LL << (sizeof (long long int) * CHAR_BIT - 2)) |
|||
@%:@ define LLONG_MAX (HALF - 1 + HALF) |
|||
@%:@endif]], |
|||
[[long long int n = 1; |
|||
int i; |
|||
for (i = 0; ; i++) |
|||
{ |
|||
long long int m = n << i; |
|||
if (m >> i != n) |
|||
return 1; |
|||
if (LLONG_MAX / 2 < m) |
|||
break; |
|||
} |
|||
return 0;]])], |
|||
[ac_cv_type_long_long_int=yes], |
|||
[ac_cv_type_long_long_int=no], |
|||
[ac_cv_type_long_long_int=yes])], |
|||
[ac_cv_type_long_long_int=no])]) |
|||
if test $ac_cv_type_long_long_int = yes; then |
|||
AC_DEFINE([HAVE_LONG_LONG_INT], 1, |
|||
[Define to 1 if the system has the type `long long int'.]) |
|||
fi |
|||
]) |
|||
|
|||
# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. |
|||
# This fixes a bug in Autoconf 2.61, but can be removed once we |
|||
# assume 2.62 everywhere. |
|||
|
|||
# Note: If the type 'unsigned long long int' exists but is only 32 bits |
|||
# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT |
|||
# will not be defined. In this case you can treat 'unsigned long long int' |
|||
# like 'unsigned long int'. |
|||
|
|||
AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], |
|||
[ |
|||
AC_CACHE_CHECK([for unsigned long long int], |
|||
[ac_cv_type_unsigned_long_long_int], |
|||
[AC_LINK_IFELSE( |
|||
[_AC_TYPE_LONG_LONG_SNIPPET], |
|||
[ac_cv_type_unsigned_long_long_int=yes], |
|||
[ac_cv_type_unsigned_long_long_int=no])]) |
|||
if test $ac_cv_type_unsigned_long_long_int = yes; then |
|||
AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1, |
|||
[Define to 1 if the system has the type `unsigned long long int'.]) |
|||
fi |
|||
]) |
|||
|
|||
# Expands to a C program that can be used to test for simultaneous support |
|||
# of 'long long' and 'unsigned long long'. We don't want to say that |
|||
# 'long long' is available if 'unsigned long long' is not, or vice versa, |
|||
# because too many programs rely on the symmetry between signed and unsigned |
|||
# integer types (excluding 'bool'). |
|||
AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], |
|||
[ |
|||
AC_LANG_PROGRAM( |
|||
[[/* For now, do not test the preprocessor; as of 2007 there are too many |
|||
implementations with broken preprocessors. Perhaps this can |
|||
be revisited in 2012. In the meantime, code should not expect |
|||
#if to work with literals wider than 32 bits. */ |
|||
/* Test literals. */ |
|||
long long int ll = 9223372036854775807ll; |
|||
long long int nll = -9223372036854775807LL; |
|||
unsigned long long int ull = 18446744073709551615ULL; |
|||
/* Test constant expressions. */ |
|||
typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) |
|||
? 1 : -1)]; |
|||
typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 |
|||
? 1 : -1)]; |
|||
int i = 63;]], |
|||
[[/* Test availability of runtime routines for shift and division. */ |
|||
long long int llmax = 9223372036854775807ll; |
|||
unsigned long long int ullmax = 18446744073709551615ull; |
|||
return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) |
|||
| (llmax / ll) | (llmax % ll) |
|||
| (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) |
|||
| (ullmax / ull) | (ullmax % ull));]]) |
|||
]) |
|||
@ -0,0 +1,18 @@ |
|||
# memchr.m4 serial 4 |
|||
dnl Copyright (C) 2002, 2003, 2004 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([gl_FUNC_MEMCHR], |
|||
[ |
|||
AC_REPLACE_FUNCS(memchr) |
|||
if test $ac_cv_func_memchr = no; then |
|||
gl_PREREQ_MEMCHR |
|||
fi |
|||
]) |
|||
|
|||
# Prerequisites of lib/memchr.c. |
|||
AC_DEFUN([gl_PREREQ_MEMCHR], [ |
|||
AC_CHECK_HEADERS(bp-sym.h) |
|||
]) |
|||
@ -0,0 +1,19 @@ |
|||
# memcmp.m4 serial 12 |
|||
dnl Copyright (C) 2002, 2003, 2004, 2007 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([gl_FUNC_MEMCMP], |
|||
[ |
|||
AC_FUNC_MEMCMP |
|||
dnl Note: AC_FUNC_MEMCMP does AC_LIBOBJ(memcmp). |
|||
if test $ac_cv_func_memcmp_working = 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], [:]) |
|||
@ -0,0 +1,63 @@ |
|||
# memmem.m4 serial 9 |
|||
dnl Copyright (C) 2002, 2003, 2004, 2007, 2008 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. |
|||
|
|||
dnl Check that memmem is present. |
|||
AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE], |
|||
[ |
|||
dnl Persuade glibc <string.h> to declare memmem(). |
|||
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) |
|||
|
|||
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) |
|||
AC_REPLACE_FUNCS(memmem) |
|||
AC_CHECK_DECLS_ONCE(memmem) |
|||
if test $ac_cv_have_decl_memmem = no; then |
|||
HAVE_DECL_MEMMEM=0 |
|||
fi |
|||
gl_PREREQ_MEMMEM |
|||
]) # gl_FUNC_MEMMEM_SIMPLE |
|||
|
|||
dnl Additionally, check that memmem is efficient and handles empty needles. |
|||
AC_DEFUN([gl_FUNC_MEMMEM], |
|||
[ |
|||
AC_REQUIRE([gl_FUNC_MEMMEM_SIMPLE]) |
|||
if test $ac_cv_have_decl_memmem = yes; then |
|||
AC_CACHE_CHECK([whether memmem works in linear time], |
|||
[gl_cv_func_memmem_works], |
|||
[AC_RUN_IFELSE([AC_LANG_PROGRAM([ |
|||
#include <string.h> /* for memmem */ |
|||
#include <stdlib.h> /* for malloc */ |
|||
#include <unistd.h> /* for alarm */ |
|||
], [[size_t m = 1000000; |
|||
char *haystack = (char *) malloc (2 * m + 1); |
|||
char *needle = (char *) malloc (m + 1); |
|||
void *result = 0; |
|||
/* Failure to compile this test due to missing alarm is okay, |
|||
since all such platforms (mingw) also lack memmem. */ |
|||
alarm (5); |
|||
/* Check for quadratic performance. */ |
|||
if (haystack && needle) |
|||
{ |
|||
memset (haystack, 'A', 2 * m); |
|||
haystack[2 * m] = 'B'; |
|||
memset (needle, 'A', m); |
|||
needle[m] = 'B'; |
|||
result = memmem (haystack, 2 * m + 1, needle, m + 1); |
|||
} |
|||
/* Check for empty needle behavior. */ |
|||
return !result || !memmem ("a", 1, 0, 0);]])], |
|||
[gl_cv_func_memmem_works=yes], [gl_cv_func_memmem_works=no], |
|||
[dnl pessimistically assume the worst, since even glibc 2.6.1 |
|||
dnl has quadratic complexity in its memmem |
|||
gl_cv_func_memmem_works="guessing no"])]) |
|||
if test "$gl_cv_func_memmem_works" != yes; then |
|||
REPLACE_MEMMEM=1 |
|||
AC_LIBOBJ([memmem]) |
|||
fi |
|||
fi |
|||
]) # gl_FUNC_MEMMEM |
|||
|
|||
# Prerequisites of lib/memmem.c. |
|||
AC_DEFUN([gl_PREREQ_MEMMEM], [:]) |
|||
@ -0,0 +1,86 @@ |
|||
# onceonly_2_57.m4 serial 4 |
|||
dnl Copyright (C) 2002-2003, 2005-2006 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. |
|||
|
|||
dnl This file defines some "once only" variants of standard autoconf macros. |
|||
dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS |
|||
dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS |
|||
dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS |
|||
dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL |
|||
dnl The advantage is that the check for each of the headers/functions/decls |
|||
dnl will be put only once into the 'configure' file. It keeps the size of |
|||
dnl the 'configure' file down, and avoids redundant output when 'configure' |
|||
dnl is run. |
|||
dnl The drawback is that the checks cannot be conditionalized. If you write |
|||
dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi |
|||
dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to |
|||
dnl empty, and the check will be inserted before the body of the AC_DEFUNed |
|||
dnl function. |
|||
|
|||
dnl This is like onceonly.m4, except that it uses diversions to named sections |
|||
dnl DEFAULTS and INIT_PREPARE in order to check all requested headers at once, |
|||
dnl thus reducing the size of 'configure'. Works with autoconf-2.57. The |
|||
dnl size reduction is ca. 9%. |
|||
|
|||
dnl Autoconf version 2.57 or newer is recommended. |
|||
AC_PREREQ(2.57) |
|||
|
|||
# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of |
|||
# AC_CHECK_HEADERS(HEADER1 HEADER2 ...). |
|||
AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ |
|||
: |
|||
AC_FOREACH([gl_HEADER_NAME], [$1], [ |
|||
AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME, |
|||
[./-], [___])), [ |
|||
m4_divert_text([INIT_PREPARE], |
|||
[gl_header_list="$gl_header_list gl_HEADER_NAME"]) |
|||
gl_HEADERS_EXPANSION |
|||
AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), |
|||
[Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) |
|||
]) |
|||
AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME, |
|||
[./-], [___]))) |
|||
]) |
|||
]) |
|||
m4_define([gl_HEADERS_EXPANSION], [ |
|||
m4_divert_text([DEFAULTS], [gl_header_list=]) |
|||
AC_CHECK_HEADERS([$gl_header_list]) |
|||
m4_define([gl_HEADERS_EXPANSION], []) |
|||
]) |
|||
|
|||
# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of |
|||
# AC_CHECK_FUNCS(FUNC1 FUNC2 ...). |
|||
AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ |
|||
: |
|||
AC_FOREACH([gl_FUNC_NAME], [$1], [ |
|||
AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ |
|||
m4_divert_text([INIT_PREPARE], |
|||
[gl_func_list="$gl_func_list gl_FUNC_NAME"]) |
|||
gl_FUNCS_EXPANSION |
|||
AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), |
|||
[Define to 1 if you have the `]m4_defn([gl_FUNC_NAME])[' function.]) |
|||
]) |
|||
AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) |
|||
]) |
|||
]) |
|||
m4_define([gl_FUNCS_EXPANSION], [ |
|||
m4_divert_text([DEFAULTS], [gl_func_list=]) |
|||
AC_CHECK_FUNCS([$gl_func_list]) |
|||
m4_define([gl_FUNCS_EXPANSION], []) |
|||
]) |
|||
|
|||
# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of |
|||
# AC_CHECK_DECLS(DECL1, DECL2, ...). |
|||
AC_DEFUN([AC_CHECK_DECLS_ONCE], [ |
|||
: |
|||
AC_FOREACH([gl_DECL_NAME], [$1], [ |
|||
AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ |
|||
AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) |
|||
]) |
|||
AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) |
|||
]) |
|||
]) |
|||
@ -0,0 +1,395 @@ |
|||
# stdint.m4 serial 29 |
|||
dnl Copyright (C) 2001-2007 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. |
|||
|
|||
dnl From Paul Eggert and Bruno Haible. |
|||
dnl Test whether <stdint.h> is supported or must be substituted. |
|||
|
|||
AC_DEFUN([gl_STDINT_H], |
|||
[ |
|||
AC_PREREQ(2.59)dnl |
|||
|
|||
dnl Check for long long int and unsigned long long int. |
|||
AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) |
|||
if test $ac_cv_type_long_long_int = yes; then |
|||
HAVE_LONG_LONG_INT=1 |
|||
else |
|||
HAVE_LONG_LONG_INT=0 |
|||
fi |
|||
AC_SUBST([HAVE_LONG_LONG_INT]) |
|||
AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) |
|||
if test $ac_cv_type_unsigned_long_long_int = yes; then |
|||
HAVE_UNSIGNED_LONG_LONG_INT=1 |
|||
else |
|||
HAVE_UNSIGNED_LONG_LONG_INT=0 |
|||
fi |
|||
AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) |
|||
|
|||
dnl Check for <inttypes.h>. |
|||
dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. |
|||
if test $ac_cv_header_inttypes_h = yes; then |
|||
HAVE_INTTYPES_H=1 |
|||
else |
|||
HAVE_INTTYPES_H=0 |
|||
fi |
|||
AC_SUBST([HAVE_INTTYPES_H]) |
|||
|
|||
dnl Check for <sys/types.h>. |
|||
dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. |
|||
if test $ac_cv_header_sys_types_h = yes; then |
|||
HAVE_SYS_TYPES_H=1 |
|||
else |
|||
HAVE_SYS_TYPES_H=0 |
|||
fi |
|||
AC_SUBST([HAVE_SYS_TYPES_H]) |
|||
|
|||
gl_CHECK_NEXT_HEADERS([stdint.h]) |
|||
if test $ac_cv_header_stdint_h = yes; then |
|||
HAVE_STDINT_H=1 |
|||
else |
|||
HAVE_STDINT_H=0 |
|||
fi |
|||
AC_SUBST([HAVE_STDINT_H]) |
|||
|
|||
dnl Now see whether we need a substitute <stdint.h>. |
|||
if test $ac_cv_header_stdint_h = yes; then |
|||
AC_CACHE_CHECK([whether stdint.h conforms to C99], |
|||
[gl_cv_header_working_stdint_h], |
|||
[gl_cv_header_working_stdint_h=no |
|||
AC_COMPILE_IFELSE([ |
|||
AC_LANG_PROGRAM([[ |
|||
#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ |
|||
#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ |
|||
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ |
|||
#include <stdint.h> |
|||
/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ |
|||
#if !(defined WCHAR_MIN && defined WCHAR_MAX) |
|||
#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" |
|||
#endif |
|||
] |
|||
gl_STDINT_INCLUDES |
|||
[ |
|||
#ifdef INT8_MAX |
|||
int8_t a1 = INT8_MAX; |
|||
int8_t a1min = INT8_MIN; |
|||
#endif |
|||
#ifdef INT16_MAX |
|||
int16_t a2 = INT16_MAX; |
|||
int16_t a2min = INT16_MIN; |
|||
#endif |
|||
#ifdef INT32_MAX |
|||
int32_t a3 = INT32_MAX; |
|||
int32_t a3min = INT32_MIN; |
|||
#endif |
|||
#ifdef INT64_MAX |
|||
int64_t a4 = INT64_MAX; |
|||
int64_t a4min = INT64_MIN; |
|||
#endif |
|||
#ifdef UINT8_MAX |
|||
uint8_t b1 = UINT8_MAX; |
|||
#else |
|||
typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; |
|||
#endif |
|||
#ifdef UINT16_MAX |
|||
uint16_t b2 = UINT16_MAX; |
|||
#endif |
|||
#ifdef UINT32_MAX |
|||
uint32_t b3 = UINT32_MAX; |
|||
#endif |
|||
#ifdef UINT64_MAX |
|||
uint64_t b4 = UINT64_MAX; |
|||
#endif |
|||
int_least8_t c1 = INT8_C (0x7f); |
|||
int_least8_t c1max = INT_LEAST8_MAX; |
|||
int_least8_t c1min = INT_LEAST8_MIN; |
|||
int_least16_t c2 = INT16_C (0x7fff); |
|||
int_least16_t c2max = INT_LEAST16_MAX; |
|||
int_least16_t c2min = INT_LEAST16_MIN; |
|||
int_least32_t c3 = INT32_C (0x7fffffff); |
|||
int_least32_t c3max = INT_LEAST32_MAX; |
|||
int_least32_t c3min = INT_LEAST32_MIN; |
|||
int_least64_t c4 = INT64_C (0x7fffffffffffffff); |
|||
int_least64_t c4max = INT_LEAST64_MAX; |
|||
int_least64_t c4min = INT_LEAST64_MIN; |
|||
uint_least8_t d1 = UINT8_C (0xff); |
|||
uint_least8_t d1max = UINT_LEAST8_MAX; |
|||
uint_least16_t d2 = UINT16_C (0xffff); |
|||
uint_least16_t d2max = UINT_LEAST16_MAX; |
|||
uint_least32_t d3 = UINT32_C (0xffffffff); |
|||
uint_least32_t d3max = UINT_LEAST32_MAX; |
|||
uint_least64_t d4 = UINT64_C (0xffffffffffffffff); |
|||
uint_least64_t d4max = UINT_LEAST64_MAX; |
|||
int_fast8_t e1 = INT_FAST8_MAX; |
|||
int_fast8_t e1min = INT_FAST8_MIN; |
|||
int_fast16_t e2 = INT_FAST16_MAX; |
|||
int_fast16_t e2min = INT_FAST16_MIN; |
|||
int_fast32_t e3 = INT_FAST32_MAX; |
|||
int_fast32_t e3min = INT_FAST32_MIN; |
|||
int_fast64_t e4 = INT_FAST64_MAX; |
|||
int_fast64_t e4min = INT_FAST64_MIN; |
|||
uint_fast8_t f1 = UINT_FAST8_MAX; |
|||
uint_fast16_t f2 = UINT_FAST16_MAX; |
|||
uint_fast32_t f3 = UINT_FAST32_MAX; |
|||
uint_fast64_t f4 = UINT_FAST64_MAX; |
|||
#ifdef INTPTR_MAX |
|||
intptr_t g = INTPTR_MAX; |
|||
intptr_t gmin = INTPTR_MIN; |
|||
#endif |
|||
#ifdef UINTPTR_MAX |
|||
uintptr_t h = UINTPTR_MAX; |
|||
#endif |
|||
intmax_t i = INTMAX_MAX; |
|||
uintmax_t j = UINTMAX_MAX; |
|||
|
|||
#include <limits.h> /* for CHAR_BIT */ |
|||
#define TYPE_MINIMUM(t) \ |
|||
((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) |
|||
#define TYPE_MAXIMUM(t) \ |
|||
((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) |
|||
struct s { |
|||
int check_PTRDIFF: |
|||
PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) |
|||
&& PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) |
|||
? 1 : -1; |
|||
/* Detect bug in FreeBSD 6.0 / ia64. */ |
|||
int check_SIG_ATOMIC: |
|||
SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) |
|||
&& SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) |
|||
? 1 : -1; |
|||
int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; |
|||
int check_WCHAR: |
|||
WCHAR_MIN == TYPE_MINIMUM (wchar_t) |
|||
&& WCHAR_MAX == TYPE_MAXIMUM (wchar_t) |
|||
? 1 : -1; |
|||
/* Detect bug in mingw. */ |
|||
int check_WINT: |
|||
WINT_MIN == TYPE_MINIMUM (wint_t) |
|||
&& WINT_MAX == TYPE_MAXIMUM (wint_t) |
|||
? 1 : -1; |
|||
|
|||
/* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ |
|||
int check_UINT8_C: |
|||
(-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; |
|||
int check_UINT16_C: |
|||
(-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; |
|||
|
|||
/* Detect bugs in OpenBSD 3.9 stdint.h. */ |
|||
#ifdef UINT8_MAX |
|||
int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; |
|||
#endif |
|||
#ifdef UINT16_MAX |
|||
int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; |
|||
#endif |
|||
#ifdef UINT32_MAX |
|||
int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; |
|||
#endif |
|||
#ifdef UINT64_MAX |
|||
int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; |
|||
#endif |
|||
int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; |
|||
int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; |
|||
int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; |
|||
int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; |
|||
int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; |
|||
int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; |
|||
int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; |
|||
int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; |
|||
int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; |
|||
int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; |
|||
int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; |
|||
}; |
|||
]])], |
|||
[gl_cv_header_working_stdint_h=yes])]) |
|||
fi |
|||
if test "$gl_cv_header_working_stdint_h" = yes; then |
|||
STDINT_H= |
|||
else |
|||
dnl Check for <sys/inttypes.h>, and for |
|||
dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). |
|||
AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) |
|||
if test $ac_cv_header_sys_inttypes_h = yes; then |
|||
HAVE_SYS_INTTYPES_H=1 |
|||
else |
|||
HAVE_SYS_INTTYPES_H=0 |
|||
fi |
|||
AC_SUBST([HAVE_SYS_INTTYPES_H]) |
|||
if test $ac_cv_header_sys_bitypes_h = yes; then |
|||
HAVE_SYS_BITYPES_H=1 |
|||
else |
|||
HAVE_SYS_BITYPES_H=0 |
|||
fi |
|||
AC_SUBST([HAVE_SYS_BITYPES_H]) |
|||
|
|||
dnl Check for <wchar.h> (missing in Linux uClibc when built without wide |
|||
dnl character support). |
|||
AC_CHECK_HEADERS_ONCE([wchar.h]) |
|||
|
|||
gl_STDINT_TYPE_PROPERTIES |
|||
STDINT_H=stdint.h |
|||
fi |
|||
AC_SUBST(STDINT_H) |
|||
]) |
|||
|
|||
dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) |
|||
dnl Determine the size of each of the given types in bits. |
|||
AC_DEFUN([gl_STDINT_BITSIZEOF], |
|||
[ |
|||
dnl Use a shell loop, to avoid bloating configure, and |
|||
dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into |
|||
dnl config.h.in, |
|||
dnl - extra AC_SUBST calls, so that the right substitutions are made. |
|||
AC_FOREACH([gltype], [$1], |
|||
[AH_TEMPLATE([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), |
|||
[Define to the number of bits in type ']gltype['.])]) |
|||
for gltype in $1 ; do |
|||
AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], |
|||
[AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], |
|||
[$2 |
|||
#include <limits.h>], [result=unknown]) |
|||
eval gl_cv_bitsizeof_${gltype}=\$result |
|||
]) |
|||
eval result=\$gl_cv_bitsizeof_${gltype} |
|||
if test $result = unknown; then |
|||
dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, |
|||
dnl do a syntax check even on unused #if conditions and give an error |
|||
dnl on valid C code like this: |
|||
dnl #if 0 |
|||
dnl # if > 32 |
|||
dnl # endif |
|||
dnl #endif |
|||
result=0 |
|||
fi |
|||
GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` |
|||
AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) |
|||
eval BITSIZEOF_${GLTYPE}=\$result |
|||
done |
|||
AC_FOREACH([gltype], [$1], |
|||
[AC_SUBST([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) |
|||
]) |
|||
|
|||
dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) |
|||
dnl Determine the signedness of each of the given types. |
|||
dnl Define HAVE_SIGNED_TYPE if type is signed. |
|||
AC_DEFUN([gl_CHECK_TYPES_SIGNED], |
|||
[ |
|||
dnl Use a shell loop, to avoid bloating configure, and |
|||
dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into |
|||
dnl config.h.in, |
|||
dnl - extra AC_SUBST calls, so that the right substitutions are made. |
|||
AC_FOREACH([gltype], [$1], |
|||
[AH_TEMPLATE([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), |
|||
[Define to 1 if ']gltype[' is a signed integer type.])]) |
|||
for gltype in $1 ; do |
|||
AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], |
|||
[AC_COMPILE_IFELSE( |
|||
[AC_LANG_PROGRAM([$2[ |
|||
int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], |
|||
result=yes, result=no) |
|||
eval gl_cv_type_${gltype}_signed=\$result |
|||
]) |
|||
eval result=\$gl_cv_type_${gltype}_signed |
|||
GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` |
|||
if test "$result" = yes; then |
|||
AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], 1) |
|||
eval HAVE_SIGNED_${GLTYPE}=1 |
|||
else |
|||
eval HAVE_SIGNED_${GLTYPE}=0 |
|||
fi |
|||
done |
|||
AC_FOREACH([gltype], [$1], |
|||
[AC_SUBST([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) |
|||
]) |
|||
|
|||
dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) |
|||
dnl Determine the suffix to use for integer constants of the given types. |
|||
dnl Define t_SUFFIX for each such type. |
|||
AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], |
|||
[ |
|||
dnl Use a shell loop, to avoid bloating configure, and |
|||
dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into |
|||
dnl config.h.in, |
|||
dnl - extra AC_SUBST calls, so that the right substitutions are made. |
|||
AC_FOREACH([gltype], [$1], |
|||
[AH_TEMPLATE(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], |
|||
[Define to l, ll, u, ul, ull, etc., as suitable for |
|||
constants of type ']gltype['.])]) |
|||
for gltype in $1 ; do |
|||
AC_CACHE_CHECK([for $gltype integer literal suffix], |
|||
[gl_cv_type_${gltype}_suffix], |
|||
[eval gl_cv_type_${gltype}_suffix=no |
|||
eval result=\$gl_cv_type_${gltype}_signed |
|||
if test "$result" = yes; then |
|||
glsufu= |
|||
else |
|||
glsufu=u |
|||
fi |
|||
for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do |
|||
case $glsuf in |
|||
'') gltype1='int';; |
|||
l) gltype1='long int';; |
|||
ll) gltype1='long long int';; |
|||
i64) gltype1='__int64';; |
|||
u) gltype1='unsigned int';; |
|||
ul) gltype1='unsigned long int';; |
|||
ull) gltype1='unsigned long long int';; |
|||
ui64)gltype1='unsigned __int64';; |
|||
esac |
|||
AC_COMPILE_IFELSE( |
|||
[AC_LANG_PROGRAM([$2 |
|||
extern $gltype foo; |
|||
extern $gltype1 foo;])], |
|||
[eval gl_cv_type_${gltype}_suffix=\$glsuf]) |
|||
eval result=\$gl_cv_type_${gltype}_suffix |
|||
test "$result" != no && break |
|||
done]) |
|||
GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` |
|||
eval result=\$gl_cv_type_${gltype}_suffix |
|||
test "$result" = no && result= |
|||
eval ${GLTYPE}_SUFFIX=\$result |
|||
AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], $result) |
|||
done |
|||
AC_FOREACH([gltype], [$1], |
|||
[AC_SUBST(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) |
|||
]) |
|||
|
|||
dnl gl_STDINT_INCLUDES |
|||
AC_DEFUN([gl_STDINT_INCLUDES], |
|||
[[ |
|||
/* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be |
|||
included before <wchar.h>. */ |
|||
#include <stddef.h> |
|||
#include <signal.h> |
|||
#if HAVE_WCHAR_H |
|||
# include <stdio.h> |
|||
# include <time.h> |
|||
# include <wchar.h> |
|||
#endif |
|||
]]) |
|||
|
|||
dnl gl_STDINT_TYPE_PROPERTIES |
|||
dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t |
|||
dnl of interest to stdint.in.h. |
|||
AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], |
|||
[ |
|||
gl_STDINT_BITSIZEOF([ptrdiff_t sig_atomic_t size_t wchar_t wint_t], |
|||
[gl_STDINT_INCLUDES]) |
|||
gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], |
|||
[gl_STDINT_INCLUDES]) |
|||
gl_cv_type_ptrdiff_t_signed=yes |
|||
gl_cv_type_size_t_signed=no |
|||
gl_INTEGER_TYPE_SUFFIX([ptrdiff_t sig_atomic_t size_t wchar_t wint_t], |
|||
[gl_STDINT_INCLUDES]) |
|||
]) |
|||
|
|||
dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. |
|||
dnl Remove this when we can assume autoconf >= 2.61. |
|||
m4_ifdef([AC_COMPUTE_INT], [], [ |
|||
AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) |
|||
]) |
|||
|
|||
# Hey Emacs! |
|||
# Local Variables: |
|||
# indent-tabs-mode: nil |
|||
# End: |
|||
@ -0,0 +1,87 @@ |
|||
# Configure a GNU-like replacement for <string.h>. |
|||
|
|||
# Copyright (C) 2007, 2008 Free Software Foundation, Inc. |
|||
# This file is free software; the Free Software Foundation |
|||
# gives unlimited permission to copy and/or distribute it, |
|||
# with or without modifications, as long as this notice is preserved. |
|||
|
|||
# serial 4 |
|||
|
|||
# Written by Paul Eggert. |
|||
|
|||
AC_DEFUN([gl_HEADER_STRING_H], |
|||
[ |
|||
dnl Use AC_REQUIRE here, so that the default behavior below is expanded |
|||
dnl once only, before all statements that occur in other macros. |
|||
AC_REQUIRE([gl_HEADER_STRING_H_BODY]) |
|||
]) |
|||
|
|||
AC_DEFUN([gl_HEADER_STRING_H_BODY], |
|||
[ |
|||
AC_REQUIRE([AC_C_RESTRICT]) |
|||
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) |
|||
gl_CHECK_NEXT_HEADERS([string.h]) |
|||
]) |
|||
|
|||
AC_DEFUN([gl_STRING_MODULE_INDICATOR], |
|||
[ |
|||
dnl Use AC_REQUIRE here, so that the default settings are expanded once only. |
|||
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) |
|||
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 |
|||
]) |
|||
|
|||
AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], |
|||
[ |
|||
GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) |
|||
GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) |
|||
GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) |
|||
GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) |
|||
GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) |
|||
GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) |
|||
GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) |
|||
GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) |
|||
GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) |
|||
GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) |
|||
GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) |
|||
GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) |
|||
GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) |
|||
GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) |
|||
GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) |
|||
GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) |
|||
GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) |
|||
GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) |
|||
GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) |
|||
GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) |
|||
GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) |
|||
GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) |
|||
GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) |
|||
GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) |
|||
GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) |
|||
GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) |
|||
GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) |
|||
GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) |
|||
GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) |
|||
GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) |
|||
dnl Assume proper GNU behavior unless another module says otherwise. |
|||
HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) |
|||
HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) |
|||
HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) |
|||
HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) |
|||
HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) |
|||
HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) |
|||
HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) |
|||
HAVE_STRNDUP=1; AC_SUBST([HAVE_STRNDUP]) |
|||
HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) |
|||
HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) |
|||
HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) |
|||
HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) |
|||
HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) |
|||
HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) |
|||
HAVE_DECL_STRERROR=1; AC_SUBST([HAVE_DECL_STRERROR]) |
|||
HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) |
|||
REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) |
|||
REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) |
|||
REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) |
|||
REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) |
|||
REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) |
|||
]) |
|||
@ -0,0 +1,54 @@ |
|||
dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. |
|||
|
|||
dnl Copyright (C) 2007 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. |
|||
|
|||
dnl Written by Eric Blake. |
|||
|
|||
# wchar.m4 serial 4 |
|||
|
|||
AC_DEFUN([gl_WCHAR_H], |
|||
[ |
|||
AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) |
|||
AC_CACHE_CHECK([whether <wchar.h> is standalone], |
|||
[gl_cv_header_wchar_h_standalone], |
|||
[AC_COMPILE_IFELSE([[#include <wchar.h> |
|||
wchar_t w;]], |
|||
[gl_cv_header_wchar_h_standalone=yes], |
|||
[gl_cv_header_wchar_h_standalone=no])]) |
|||
if test $gl_cv_header_wchar_h_standalone != yes; then |
|||
WCHAR_H=wchar.h |
|||
fi |
|||
|
|||
dnl Prepare for creating substitute <wchar.h>. |
|||
dnl Do it always: WCHAR_H may be empty here but can be set later. |
|||
dnl Check for <wchar.h> (missing in Linux uClibc when built without wide |
|||
dnl character support). |
|||
AC_CHECK_HEADERS_ONCE([wchar.h]) |
|||
if test $ac_cv_header_wchar_h = yes; then |
|||
HAVE_WCHAR_H=1 |
|||
else |
|||
HAVE_WCHAR_H=0 |
|||
fi |
|||
AC_SUBST([HAVE_WCHAR_H]) |
|||
gl_CHECK_NEXT_HEADERS([wchar.h]) |
|||
]) |
|||
|
|||
AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], |
|||
[ |
|||
dnl Use AC_REQUIRE here, so that the default settings are expanded once only. |
|||
AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) |
|||
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 |
|||
]) |
|||
|
|||
AC_DEFUN([gl_WCHAR_H_DEFAULTS], |
|||
[ |
|||
GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) |
|||
dnl Assume proper GNU behavior unless another module says otherwise. |
|||
HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) |
|||
REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) |
|||
WCHAR_H= |
|||
AC_SUBST([WCHAR_H]) |
|||
]) |
|||
@ -0,0 +1,200 @@ |
|||
/* Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2006 Free
|
|||
Software Foundation, Inc. |
|||
|
|||
Based on strlen implementation by Torbjorn Granlund (tege@sics.se), |
|||
with help from Dan Sahlin (dan@sics.se) and |
|||
commentary by Jim Blandy (jimb@ai.mit.edu); |
|||
adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), |
|||
and implemented by Roland McGrath (roland@ai.mit.edu). |
|||
|
|||
NOTE: The canonical source of this file is maintained with the GNU C Library. |
|||
Bugs can be reported to bug-glibc@prep.ai.mit.edu. |
|||
|
|||
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 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 <http://www.gnu.org/licenses/>. */
|
|||
|
|||
#ifndef _LIBC |
|||
# include <config.h> |
|||
#endif |
|||
|
|||
#include <string.h> |
|||
|
|||
#include <stddef.h> |
|||
|
|||
#if defined _LIBC |
|||
# include <memcopy.h> |
|||
#else |
|||
# define reg_char char |
|||
#endif |
|||
|
|||
#include <limits.h> |
|||
|
|||
#if HAVE_BP_SYM_H || defined _LIBC |
|||
# include <bp-sym.h> |
|||
#else |
|||
# define BP_SYM(sym) sym |
|||
#endif |
|||
|
|||
#undef memchr |
|||
#undef __memchr |
|||
|
|||
/* Search no more than N bytes of S for C. */ |
|||
void * |
|||
__memchr (void const *s, int c_in, size_t n) |
|||
{ |
|||
const unsigned char *char_ptr; |
|||
const unsigned long int *longword_ptr; |
|||
unsigned long int longword, magic_bits, charmask; |
|||
unsigned reg_char c; |
|||
int i; |
|||
|
|||
c = (unsigned char) c_in; |
|||
|
|||
/* Handle the first few characters by reading one character at a time.
|
|||
Do this until CHAR_PTR is aligned on a longword boundary. */ |
|||
for (char_ptr = (const unsigned char *) s; |
|||
n > 0 && (size_t) char_ptr % sizeof longword != 0; |
|||
--n, ++char_ptr) |
|||
if (*char_ptr == c) |
|||
return (void *) char_ptr; |
|||
|
|||
/* All these elucidatory comments refer to 4-byte longwords,
|
|||
but the theory applies equally well to any size longwords. */ |
|||
|
|||
longword_ptr = (const unsigned long int *) char_ptr; |
|||
|
|||
/* Bits 31, 24, 16, and 8 of this number are zero. Call these bits
|
|||
the "holes." Note that there is a hole just to the left of |
|||
each byte, with an extra at the end: |
|||
|
|||
bits: 01111110 11111110 11111110 11111111 |
|||
bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD |
|||
|
|||
The 1-bits make sure that carries propagate to the next 0-bit. |
|||
The 0-bits provide holes for carries to fall into. */ |
|||
|
|||
/* Set MAGIC_BITS to be this pattern of 1 and 0 bits.
|
|||
Set CHARMASK to be a longword, each of whose bytes is C. */ |
|||
|
|||
magic_bits = 0xfefefefe; |
|||
charmask = c | (c << 8); |
|||
charmask |= charmask << 16; |
|||
#if 0xffffffffU < ULONG_MAX
|
|||
magic_bits |= magic_bits << 32; |
|||
charmask |= charmask << 32; |
|||
if (8 < sizeof longword) |
|||
for (i = 64; i < sizeof longword * 8; i *= 2) |
|||
{ |
|||
magic_bits |= magic_bits << i; |
|||
charmask |= charmask << i; |
|||
} |
|||
#endif |
|||
magic_bits = (ULONG_MAX >> 1) & (magic_bits | 1); |
|||
|
|||
/* Instead of the traditional loop which tests each character,
|
|||
we will test a longword at a time. The tricky part is testing |
|||
if *any of the four* bytes in the longword in question are zero. */ |
|||
while (n >= sizeof longword) |
|||
{ |
|||
/* We tentatively exit the loop if adding MAGIC_BITS to
|
|||
LONGWORD fails to change any of the hole bits of LONGWORD. |
|||
|
|||
1) Is this safe? Will it catch all the zero bytes? |
|||
Suppose there is a byte with all zeros. Any carry bits |
|||
propagating from its left will fall into the hole at its |
|||
least significant bit and stop. Since there will be no |
|||
carry from its most significant bit, the LSB of the |
|||
byte to the left will be unchanged, and the zero will be |
|||
detected. |
|||
|
|||
2) Is this worthwhile? Will it ignore everything except |
|||
zero bytes? Suppose every byte of LONGWORD has a bit set |
|||
somewhere. There will be a carry into bit 8. If bit 8 |
|||
is set, this will carry into bit 16. If bit 8 is clear, |
|||
one of bits 9-15 must be set, so there will be a carry |
|||
into bit 16. Similarly, there will be a carry into bit |
|||
24. If one of bits 24-30 is set, there will be a carry |
|||
into bit 31, so all of the hole bits will be changed. |
|||
|
|||
The one misfire occurs when bits 24-30 are clear and bit |
|||
31 is set; in this case, the hole at bit 31 is not |
|||
changed. If we had access to the processor carry flag, |
|||
we could close this loophole by putting the fourth hole |
|||
at bit 32! |
|||
|
|||
So it ignores everything except 128's, when they're aligned |
|||
properly. |
|||
|
|||
3) But wait! Aren't we looking for C, not zero? |
|||
Good point. So what we do is XOR LONGWORD with a longword, |
|||
each of whose bytes is C. This turns each byte that is C |
|||
into a zero. */ |
|||
|
|||
longword = *longword_ptr++ ^ charmask; |
|||
|
|||
/* Add MAGIC_BITS to LONGWORD. */ |
|||
if ((((longword + magic_bits) |
|||
|
|||
/* Set those bits that were unchanged by the addition. */ |
|||
^ ~longword) |
|||
|
|||
/* Look at only the hole bits. If any of the hole bits
|
|||
are unchanged, most likely one of the bytes was a |
|||
zero. */ |
|||
& ~magic_bits) != 0) |
|||
{ |
|||
/* Which of the bytes was C? If none of them were, it was
|
|||
a misfire; continue the search. */ |
|||
|
|||
const unsigned char *cp = (const unsigned char *) (longword_ptr - 1); |
|||
|
|||
if (cp[0] == c) |
|||
return (void *) cp; |
|||
if (cp[1] == c) |
|||
return (void *) &cp[1]; |
|||
if (cp[2] == c) |
|||
return (void *) &cp[2]; |
|||
if (cp[3] == c) |
|||
return (void *) &cp[3]; |
|||
if (4 < sizeof longword && cp[4] == c) |
|||
return (void *) &cp[4]; |
|||
if (5 < sizeof longword && cp[5] == c) |
|||
return (void *) &cp[5]; |
|||
if (6 < sizeof longword && cp[6] == c) |
|||
return (void *) &cp[6]; |
|||
if (7 < sizeof longword && cp[7] == c) |
|||
return (void *) &cp[7]; |
|||
if (8 < sizeof longword) |
|||
for (i = 8; i < sizeof longword; i++) |
|||
if (cp[i] == c) |
|||
return (void *) &cp[i]; |
|||
} |
|||
|
|||
n -= sizeof longword; |
|||
} |
|||
|
|||
char_ptr = (const unsigned char *) longword_ptr; |
|||
|
|||
while (n-- > 0) |
|||
{ |
|||
if (*char_ptr == c) |
|||
return (void *) char_ptr; |
|||
else |
|||
++char_ptr; |
|||
} |
|||
|
|||
return 0; |
|||
} |
|||
#ifdef weak_alias |
|||
weak_alias (__memchr, BP_SYM (memchr)) |
|||
#endif |
|||
@ -0,0 +1,361 @@ |
|||
/* Copyright (C) 1991, 1993, 1995, 1997, 1998, 2003, 2006 Free Software
|
|||
Foundation, Inc. |
|||
|
|||
Contributed by Torbjorn Granlund (tege@sics.se). |
|||
|
|||
NOTE: The canonical source of this file is maintained with the GNU C Library. |
|||
Bugs can be reported to bug-glibc@prep.ai.mit.edu. |
|||
|
|||
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 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 <http://www.gnu.org/licenses/>. */
|
|||
|
|||
#ifndef _LIBC |
|||
# include <config.h> |
|||
#endif |
|||
|
|||
#include <string.h> |
|||
|
|||
#undef memcmp |
|||
|
|||
#ifdef _LIBC |
|||
|
|||
# include <memcopy.h> |
|||
# include <endian.h> |
|||
|
|||
# if __BYTE_ORDER == __BIG_ENDIAN |
|||
# define WORDS_BIGENDIAN |
|||
# endif |
|||
|
|||
#else /* Not in the GNU C library. */ |
|||
|
|||
# include <sys/types.h> |
|||
|
|||
/* Type to use for aligned memory operations.
|
|||
This should normally be the biggest type supported by a single load |
|||
and store. Must be an unsigned type. */ |
|||
# define op_t unsigned long int |
|||
# define OPSIZ (sizeof(op_t)) |
|||
|
|||
/* Threshold value for when to enter the unrolled loops. */ |
|||
# define OP_T_THRES 16 |
|||
|
|||
/* Type to use for unaligned operations. */ |
|||
typedef unsigned char byte; |
|||
|
|||
# ifndef WORDS_BIGENDIAN |
|||
# define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2))) |
|||
# else |
|||
# define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2))) |
|||
# endif |
|||
|
|||
#endif /* In the GNU C library. */ |
|||
|
|||
#ifdef WORDS_BIGENDIAN |
|||
# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1) |
|||
#else |
|||
# define CMP_LT_OR_GT(a, b) memcmp_bytes ((a), (b)) |
|||
#endif |
|||
|
|||
/* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */ |
|||
|
|||
/* The strategy of this memcmp is:
|
|||
|
|||
1. Compare bytes until one of the block pointers is aligned. |
|||
|
|||
2. Compare using memcmp_common_alignment or |
|||
memcmp_not_common_alignment, regarding the alignment of the other |
|||
block after the initial byte operations. The maximum number of |
|||
full words (of type op_t) are compared in this way. |
|||
|
|||
3. Compare the few remaining bytes. */ |
|||
|
|||
#ifndef WORDS_BIGENDIAN |
|||
/* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine.
|
|||
A and B are known to be different. |
|||
This is needed only on little-endian machines. */ |
|||
|
|||
# ifdef __GNUC__ |
|||
__inline |
|||
# endif |
|||
static int |
|||
memcmp_bytes (long unsigned int a, long unsigned int b) |
|||
{ |
|||
long int srcp1 = (long int) &a; |
|||
long int srcp2 = (long int) &b; |
|||
op_t a0, b0; |
|||
|
|||
do |
|||
{ |
|||
a0 = ((byte *) srcp1)[0]; |
|||
b0 = ((byte *) srcp2)[0]; |
|||
srcp1 += 1; |
|||
srcp2 += 1; |
|||
} |
|||
while (a0 == b0); |
|||
return a0 - b0; |
|||
} |
|||
#endif |
|||
|
|||
/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t'
|
|||
objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for |
|||
memory operations on `op_t's. */ |
|||
#ifdef __GNUC__ |
|||
__inline |
|||
#endif |
|||
static int |
|||
memcmp_common_alignment (long int srcp1, long int srcp2, size_t len) |
|||
{ |
|||
op_t a0, a1; |
|||
op_t b0, b1; |
|||
|
|||
switch (len % 4) |
|||
{ |
|||
default: /* Avoid warning about uninitialized local variables. */ |
|||
case 2: |
|||
a0 = ((op_t *) srcp1)[0]; |
|||
b0 = ((op_t *) srcp2)[0]; |
|||
srcp1 -= 2 * OPSIZ; |
|||
srcp2 -= 2 * OPSIZ; |
|||
len += 2; |
|||
goto do1; |
|||
case 3: |
|||
a1 = ((op_t *) srcp1)[0]; |
|||
b1 = ((op_t *) srcp2)[0]; |
|||
srcp1 -= OPSIZ; |
|||
srcp2 -= OPSIZ; |
|||
len += 1; |
|||
goto do2; |
|||
case 0: |
|||
if (OP_T_THRES <= 3 * OPSIZ && len == 0) |
|||
return 0; |
|||
a0 = ((op_t *) srcp1)[0]; |
|||
b0 = ((op_t *) srcp2)[0]; |
|||
goto do3; |
|||
case 1: |
|||
a1 = ((op_t *) srcp1)[0]; |
|||
b1 = ((op_t *) srcp2)[0]; |
|||
srcp1 += OPSIZ; |
|||
srcp2 += OPSIZ; |
|||
len -= 1; |
|||
if (OP_T_THRES <= 3 * OPSIZ && len == 0) |
|||
goto do0; |
|||
/* Fall through. */ |
|||
} |
|||
|
|||
do |
|||
{ |
|||
a0 = ((op_t *) srcp1)[0]; |
|||
b0 = ((op_t *) srcp2)[0]; |
|||
if (a1 != b1) |
|||
return CMP_LT_OR_GT (a1, b1); |
|||
|
|||
do3: |
|||
a1 = ((op_t *) srcp1)[1]; |
|||
b1 = ((op_t *) srcp2)[1]; |
|||
if (a0 != b0) |
|||
return CMP_LT_OR_GT (a0, b0); |
|||
|
|||
do2: |
|||
a0 = ((op_t *) srcp1)[2]; |
|||
b0 = ((op_t *) srcp2)[2]; |
|||
if (a1 != b1) |
|||
return CMP_LT_OR_GT (a1, b1); |
|||
|
|||
do1: |
|||
a1 = ((op_t *) srcp1)[3]; |
|||
b1 = ((op_t *) srcp2)[3]; |
|||
if (a0 != b0) |
|||
return CMP_LT_OR_GT (a0, b0); |
|||
|
|||
srcp1 += 4 * OPSIZ; |
|||
srcp2 += 4 * OPSIZ; |
|||
len -= 4; |
|||
} |
|||
while (len != 0); |
|||
|
|||
/* This is the right position for do0. Please don't move
|
|||
it into the loop. */ |
|||
do0: |
|||
if (a1 != b1) |
|||
return CMP_LT_OR_GT (a1, b1); |
|||
return 0; |
|||
} |
|||
|
|||
/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN
|
|||
`op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory |
|||
operations on `op_t', but SRCP1 *should be unaligned*. */ |
|||
#ifdef __GNUC__ |
|||
__inline |
|||
#endif |
|||
static int |
|||
memcmp_not_common_alignment (long int srcp1, long int srcp2, size_t len) |
|||
{ |
|||
op_t a0, a1, a2, a3; |
|||
op_t b0, b1, b2, b3; |
|||
op_t x; |
|||
int shl, shr; |
|||
|
|||
/* Calculate how to shift a word read at the memory operation
|
|||
aligned srcp1 to make it aligned for comparison. */ |
|||
|
|||
shl = 8 * (srcp1 % OPSIZ); |
|||
shr = 8 * OPSIZ - shl; |
|||
|
|||
/* Make SRCP1 aligned by rounding it down to the beginning of the `op_t'
|
|||
it points in the middle of. */ |
|||
srcp1 &= -OPSIZ; |
|||
|
|||
switch (len % 4) |
|||
{ |
|||
default: /* Avoid warning about uninitialized local variables. */ |
|||
case 2: |
|||
a1 = ((op_t *) srcp1)[0]; |
|||
a2 = ((op_t *) srcp1)[1]; |
|||
b2 = ((op_t *) srcp2)[0]; |
|||
srcp1 -= 1 * OPSIZ; |
|||
srcp2 -= 2 * OPSIZ; |
|||
len += 2; |
|||
goto do1; |
|||
case 3: |
|||
a0 = ((op_t *) srcp1)[0]; |
|||
a1 = ((op_t *) srcp1)[1]; |
|||
b1 = ((op_t *) srcp2)[0]; |
|||
srcp2 -= 1 * OPSIZ; |
|||
len += 1; |
|||
goto do2; |
|||
case 0: |
|||
if (OP_T_THRES <= 3 * OPSIZ && len == 0) |
|||
return 0; |
|||
a3 = ((op_t *) srcp1)[0]; |
|||
a0 = ((op_t *) srcp1)[1]; |
|||
b0 = ((op_t *) srcp2)[0]; |
|||
srcp1 += 1 * OPSIZ; |
|||
goto do3; |
|||
case 1: |
|||
a2 = ((op_t *) srcp1)[0]; |
|||
a3 = ((op_t *) srcp1)[1]; |
|||
b3 = ((op_t *) srcp2)[0]; |
|||
srcp1 += 2 * OPSIZ; |
|||
srcp2 += 1 * OPSIZ; |
|||
len -= 1; |
|||
if (OP_T_THRES <= 3 * OPSIZ && len == 0) |
|||
goto do0; |
|||
/* Fall through. */ |
|||
} |
|||
|
|||
do |
|||
{ |
|||
a0 = ((op_t *) srcp1)[0]; |
|||
b0 = ((op_t *) srcp2)[0]; |
|||
x = MERGE(a2, shl, a3, shr); |
|||
if (x != b3) |
|||
return CMP_LT_OR_GT (x, b3); |
|||
|
|||
do3: |
|||
a1 = ((op_t *) srcp1)[1]; |
|||
b1 = ((op_t *) srcp2)[1]; |
|||
x = MERGE(a3, shl, a0, shr); |
|||
if (x != b0) |
|||
return CMP_LT_OR_GT (x, b0); |
|||
|
|||
do2: |
|||
a2 = ((op_t *) srcp1)[2]; |
|||
b2 = ((op_t *) srcp2)[2]; |
|||
x = MERGE(a0, shl, a1, shr); |
|||
if (x != b1) |
|||
return CMP_LT_OR_GT (x, b1); |
|||
|
|||
do1: |
|||
a3 = ((op_t *) srcp1)[3]; |
|||
b3 = ((op_t *) srcp2)[3]; |
|||
x = MERGE(a1, shl, a2, shr); |
|||
if (x != b2) |
|||
return CMP_LT_OR_GT (x, b2); |
|||
|
|||
srcp1 += 4 * OPSIZ; |
|||
srcp2 += 4 * OPSIZ; |
|||
len -= 4; |
|||
} |
|||
while (len != 0); |
|||
|
|||
/* This is the right position for do0. Please don't move
|
|||
it into the loop. */ |
|||
do0: |
|||
x = MERGE(a2, shl, a3, shr); |
|||
if (x != b3) |
|||
return CMP_LT_OR_GT (x, b3); |
|||
return 0; |
|||
} |
|||
|
|||
int |
|||
rpl_memcmp (const void *s1, const void *s2, size_t len) |
|||
{ |
|||
op_t a0; |
|||
op_t b0; |
|||
long int srcp1 = (long int) s1; |
|||
long int srcp2 = (long int) s2; |
|||
op_t res; |
|||
|
|||
if (len >= OP_T_THRES) |
|||
{ |
|||
/* There are at least some bytes to compare. No need to test
|
|||
for LEN == 0 in this alignment loop. */ |
|||
while (srcp2 % OPSIZ != 0) |
|||
{ |
|||
a0 = ((byte *) srcp1)[0]; |
|||
b0 = ((byte *) srcp2)[0]; |
|||
srcp1 += 1; |
|||
srcp2 += 1; |
|||
res = a0 - b0; |
|||
if (res != 0) |
|||
return res; |
|||
len -= 1; |
|||
} |
|||
|
|||
/* SRCP2 is now aligned for memory operations on `op_t'.
|
|||
SRCP1 alignment determines if we can do a simple, |
|||
aligned compare or need to shuffle bits. */ |
|||
|
|||
if (srcp1 % OPSIZ == 0) |
|||
res = memcmp_common_alignment (srcp1, srcp2, len / OPSIZ); |
|||
else |
|||
res = memcmp_not_common_alignment (srcp1, srcp2, len / OPSIZ); |
|||
if (res != 0) |
|||
return res; |
|||
|
|||
/* Number of bytes remaining in the interval [0..OPSIZ-1]. */ |
|||
srcp1 += len & -OPSIZ; |
|||
srcp2 += len & -OPSIZ; |
|||
len %= OPSIZ; |
|||
} |
|||
|
|||
/* There are just a few bytes to compare. Use byte memory operations. */ |
|||
while (len != 0) |
|||
{ |
|||
a0 = ((byte *) srcp1)[0]; |
|||
b0 = ((byte *) srcp2)[0]; |
|||
srcp1 += 1; |
|||
srcp2 += 1; |
|||
res = a0 - b0; |
|||
if (res != 0) |
|||
return res; |
|||
len -= 1; |
|||
} |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
#ifdef weak_alias |
|||
# undef bcmp |
|||
weak_alias (memcmp, bcmp) |
|||
#endif |
|||
@ -0,0 +1,76 @@ |
|||
/* Copyright (C) 1991,92,93,94,96,97,98,2000,2004,2007,2008 Free Software
|
|||
Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
|
|||
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, 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, write to the Free Software Foundation, |
|||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
|||
|
|||
/* This particular implementation was written by Eric Blake, 2008. */ |
|||
|
|||
#ifndef _LIBC |
|||
# include <config.h> |
|||
#endif |
|||
|
|||
/* Specification of memmem. */ |
|||
#include <string.h> |
|||
|
|||
#ifndef _LIBC |
|||
# define __builtin_expect(expr, val) (expr) |
|||
#endif |
|||
|
|||
#define RETURN_TYPE void * |
|||
#define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l)) |
|||
#include "str-two-way.h" |
|||
|
|||
/* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK
|
|||
if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in |
|||
HAYSTACK. */ |
|||
void * |
|||
memmem (const void *haystack_start, size_t haystack_len, |
|||
const void *needle_start, size_t needle_len) |
|||
{ |
|||
/* Abstract memory is considered to be an array of 'unsigned char' values,
|
|||
not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ |
|||
const unsigned char *haystack = (const unsigned char *) haystack_start; |
|||
const unsigned char *needle = (const unsigned char *) needle_start; |
|||
|
|||
if (needle_len == 0) |
|||
/* The first occurrence of the empty string is deemed to occur at
|
|||
the beginning of the string. */ |
|||
return (void *) haystack; |
|||
|
|||
/* Sanity check, otherwise the loop might search through the whole
|
|||
memory. */ |
|||
if (__builtin_expect (haystack_len < needle_len, 0)) |
|||
return NULL; |
|||
|
|||
/* Use optimizations in memchr when possible, to reduce the search
|
|||
size of haystack using a linear algorithm with a smaller |
|||
coefficient. However, avoid memchr for long needles, since we |
|||
can often achieve sublinear performance. */ |
|||
if (needle_len < LONG_NEEDLE_THRESHOLD) |
|||
{ |
|||
haystack = memchr (haystack, *needle, haystack_len); |
|||
if (!haystack || __builtin_expect (needle_len == 1, 0)) |
|||
return (void *) haystack; |
|||
haystack_len -= haystack - (const unsigned char *) haystack_start; |
|||
if (haystack_len < needle_len) |
|||
return NULL; |
|||
return two_way_short_needle (haystack, haystack_len, needle, needle_len); |
|||
} |
|||
else |
|||
return two_way_long_needle (haystack, haystack_len, needle, needle_len); |
|||
} |
|||
|
|||
#undef LONG_NEEDLE_THRESHOLD |
|||
@ -0,0 +1,522 @@ |
|||
/* Copyright (C) 2001-2002, 2004-2007 Free Software Foundation, Inc.
|
|||
Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. |
|||
This file is part of gnulib. |
|||
|
|||
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, 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, write to the Free Software Foundation, |
|||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
|||
|
|||
/*
|
|||
* ISO C 99 <stdint.h> for platforms that lack it. |
|||
* <http://www.opengroup.org/susv3xbd/stdint.h.html>
|
|||
*/ |
|||
|
|||
#ifndef _GL_STDINT_H |
|||
|
|||
/* When including a system file that in turn includes <inttypes.h>,
|
|||
use the system <inttypes.h>, not our substitute. This avoids |
|||
problems with (for example) VMS, whose <sys/bitypes.h> includes |
|||
<inttypes.h>. */ |
|||
#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H |
|||
|
|||
/* Get those types that are already defined in other system include
|
|||
files, so that we can "#define int8_t signed char" below without |
|||
worrying about a later system include file containing a "typedef |
|||
signed char int8_t;" that will get messed up by our macro. Our |
|||
macros should all be consistent with the system versions, except |
|||
for the "fast" types and macros, which we recommend against using |
|||
in public interfaces due to compiler differences. */ |
|||
|
|||
#if @HAVE_STDINT_H@ |
|||
# if defined __sgi && ! defined __c99 |
|||
/* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
|
|||
with "This header file is to be used only for c99 mode compilations" |
|||
diagnostics. */ |
|||
# define __STDINT_H__ |
|||
# endif |
|||
/* Other systems may have an incomplete or buggy <stdint.h>.
|
|||
Include it before <inttypes.h>, since any "#include <stdint.h>" |
|||
in <inttypes.h> would reinclude us, skipping our contents because |
|||
_GL_STDINT_H is defined. |
|||
The include_next requires a split double-inclusion guard. */ |
|||
# @INCLUDE_NEXT@ @NEXT_STDINT_H@ |
|||
#endif |
|||
|
|||
#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H |
|||
#define _GL_STDINT_H |
|||
|
|||
/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
|
|||
IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). |
|||
AIX 5.2 <sys/types.h> isn't needed and causes troubles. |
|||
MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but |
|||
relies on the system <stdint.h> definitions, so include |
|||
<sys/types.h> after @NEXT_STDINT_H@. */ |
|||
#if @HAVE_SYS_TYPES_H@ && ! defined _AIX |
|||
# include <sys/types.h> |
|||
#endif |
|||
|
|||
/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ |
|||
#include <limits.h> |
|||
|
|||
#if @HAVE_INTTYPES_H@ |
|||
/* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
|
|||
int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. |
|||
<inttypes.h> also defines intptr_t and uintptr_t. */ |
|||
# include <inttypes.h> |
|||
#elif @HAVE_SYS_INTTYPES_H@ |
|||
/* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
|
|||
the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ |
|||
# include <sys/inttypes.h> |
|||
#endif |
|||
|
|||
#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ |
|||
/* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
|
|||
int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is |
|||
included by <sys/types.h>. */ |
|||
# include <sys/bitypes.h> |
|||
#endif |
|||
|
|||
#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS |
|||
|
|||
/* Get WCHAR_MIN, WCHAR_MAX. */ |
|||
# if ! (defined WCHAR_MIN && defined WCHAR_MAX) |
|||
# include <wchar.h> |
|||
# endif |
|||
|
|||
#endif |
|||
|
|||
#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H |
|||
|
|||
/* Minimum and maximum values for a integer type under the usual assumption.
|
|||
Return an unspecified value if BITS == 0, adding a check to pacify |
|||
picky compilers. */ |
|||
|
|||
#define _STDINT_MIN(signed, bits, zero) \ |
|||
((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) |
|||
|
|||
#define _STDINT_MAX(signed, bits, zero) \ |
|||
((signed) \ |
|||
? ~ _STDINT_MIN (signed, bits, zero) \ |
|||
: /* The expression for the unsigned case. The subtraction of (signed) \
|
|||
is a nop in the unsigned case and avoids "signed integer overflow" \ |
|||
warnings in the signed case. */ \ |
|||
((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) |
|||
|
|||
/* 7.18.1.1. Exact-width integer types */ |
|||
|
|||
/* Here we assume a standard architecture where the hardware integer
|
|||
types have 8, 16, 32, optionally 64 bits. */ |
|||
|
|||
#undef int8_t |
|||
#undef uint8_t |
|||
#define int8_t signed char |
|||
#define uint8_t unsigned char |
|||
|
|||
#undef int16_t |
|||
#undef uint16_t |
|||
#define int16_t short int |
|||
#define uint16_t unsigned short int |
|||
|
|||
#undef int32_t |
|||
#undef uint32_t |
|||
#define int32_t int |
|||
#define uint32_t unsigned int |
|||
|
|||
/* Do not undefine int64_t if gnulib is not being used with 64-bit
|
|||
types, since otherwise it breaks platforms like Tandem/NSK. */ |
|||
#if LONG_MAX >> 31 >> 31 == 1 |
|||
# undef int64_t |
|||
# define int64_t long int |
|||
# define GL_INT64_T |
|||
#elif defined _MSC_VER |
|||
# undef int64_t |
|||
# define int64_t __int64 |
|||
# define GL_INT64_T |
|||
#elif @HAVE_LONG_LONG_INT@ |
|||
# undef int64_t |
|||
# define int64_t long long int |
|||
# define GL_INT64_T |
|||
#endif |
|||
|
|||
#if ULONG_MAX >> 31 >> 31 >> 1 == 1 |
|||
# undef uint64_t |
|||
# define uint64_t unsigned long int |
|||
# define GL_UINT64_T |
|||
#elif defined _MSC_VER |
|||
# undef uint64_t |
|||
# define uint64_t unsigned __int64 |
|||
# define GL_UINT64_T |
|||
#elif @HAVE_UNSIGNED_LONG_LONG_INT@ |
|||
# undef uint64_t |
|||
# define uint64_t unsigned long long int |
|||
# define GL_UINT64_T |
|||
#endif |
|||
|
|||
/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ |
|||
#define _UINT8_T |
|||
#define _UINT32_T |
|||
#define _UINT64_T |
|||
|
|||
|
|||
/* 7.18.1.2. Minimum-width integer types */ |
|||
|
|||
/* Here we assume a standard architecture where the hardware integer
|
|||
types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types |
|||
are the same as the corresponding N_t types. */ |
|||
|
|||
#undef int_least8_t |
|||
#undef uint_least8_t |
|||
#undef int_least16_t |
|||
#undef uint_least16_t |
|||
#undef int_least32_t |
|||
#undef uint_least32_t |
|||
#undef int_least64_t |
|||
#undef uint_least64_t |
|||
#define int_least8_t int8_t |
|||
#define uint_least8_t uint8_t |
|||
#define int_least16_t int16_t |
|||
#define uint_least16_t uint16_t |
|||
#define int_least32_t int32_t |
|||
#define uint_least32_t uint32_t |
|||
#ifdef GL_INT64_T |
|||
# define int_least64_t int64_t |
|||
#endif |
|||
#ifdef GL_UINT64_T |
|||
# define uint_least64_t uint64_t |
|||
#endif |
|||
|
|||
/* 7.18.1.3. Fastest minimum-width integer types */ |
|||
|
|||
/* Note: Other <stdint.h> substitutes may define these types differently.
|
|||
It is not recommended to use these types in public header files. */ |
|||
|
|||
/* Here we assume a standard architecture where the hardware integer
|
|||
types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types |
|||
are taken from the same list of types. Assume that 'long int' |
|||
is fast enough for all narrower integers. */ |
|||
|
|||
#undef int_fast8_t |
|||
#undef uint_fast8_t |
|||
#undef int_fast16_t |
|||
#undef uint_fast16_t |
|||
#undef int_fast32_t |
|||
#undef uint_fast32_t |
|||
#undef int_fast64_t |
|||
#undef uint_fast64_t |
|||
#define int_fast8_t long int |
|||
#define uint_fast8_t unsigned int_fast8_t |
|||
#define int_fast16_t long int |
|||
#define uint_fast16_t unsigned int_fast16_t |
|||
#define int_fast32_t long int |
|||
#define uint_fast32_t unsigned int_fast32_t |
|||
#ifdef GL_INT64_T |
|||
# define int_fast64_t int64_t |
|||
#endif |
|||
#ifdef GL_UINT64_T |
|||
# define uint_fast64_t uint64_t |
|||
#endif |
|||
|
|||
/* 7.18.1.4. Integer types capable of holding object pointers */ |
|||
|
|||
#undef intptr_t |
|||
#undef uintptr_t |
|||
#define intptr_t long int |
|||
#define uintptr_t unsigned long int |
|||
|
|||
/* 7.18.1.5. Greatest-width integer types */ |
|||
|
|||
/* Note: These types are compiler dependent. It may be unwise to use them in
|
|||
public header files. */ |
|||
|
|||
#undef intmax_t |
|||
#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 |
|||
# define intmax_t long long int |
|||
#elif defined GL_INT64_T |
|||
# define intmax_t int64_t |
|||
#else |
|||
# define intmax_t long int |
|||
#endif |
|||
|
|||
#undef uintmax_t |
|||
#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 |
|||
# define uintmax_t unsigned long long int |
|||
#elif defined GL_UINT64_T |
|||
# define uintmax_t uint64_t |
|||
#else |
|||
# define uintmax_t unsigned long int |
|||
#endif |
|||
|
|||
/* Verify that intmax_t and uintmax_t have the same size. Too much code
|
|||
breaks if this is not the case. If this check fails, the reason is likely |
|||
to be found in the autoconf macros. */ |
|||
typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1]; |
|||
|
|||
/* 7.18.2. Limits of specified-width integer types */ |
|||
|
|||
#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS |
|||
|
|||
/* 7.18.2.1. Limits of exact-width integer types */ |
|||
|
|||
/* Here we assume a standard architecture where the hardware integer
|
|||
types have 8, 16, 32, optionally 64 bits. */ |
|||
|
|||
#undef INT8_MIN |
|||
#undef INT8_MAX |
|||
#undef UINT8_MAX |
|||
#define INT8_MIN (~ INT8_MAX) |
|||
#define INT8_MAX 127 |
|||
#define UINT8_MAX 255 |
|||
|
|||
#undef INT16_MIN |
|||
#undef INT16_MAX |
|||
#undef UINT16_MAX |
|||
#define INT16_MIN (~ INT16_MAX) |
|||
#define INT16_MAX 32767 |
|||
#define UINT16_MAX 65535 |
|||
|
|||
#undef INT32_MIN |
|||
#undef INT32_MAX |
|||
#undef UINT32_MAX |
|||
#define INT32_MIN (~ INT32_MAX) |
|||
#define INT32_MAX 2147483647 |
|||
#define UINT32_MAX 4294967295U |
|||
|
|||
#undef INT64_MIN |
|||
#undef INT64_MAX |
|||
#ifdef GL_INT64_T |
|||
/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
|
|||
evaluates the latter incorrectly in preprocessor expressions. */ |
|||
# define INT64_MIN (- INTMAX_C (1) << 63) |
|||
# define INT64_MAX INTMAX_C (9223372036854775807) |
|||
#endif |
|||
|
|||
#undef UINT64_MAX |
|||
#ifdef GL_UINT64_T |
|||
# define UINT64_MAX UINTMAX_C (18446744073709551615) |
|||
#endif |
|||
|
|||
/* 7.18.2.2. Limits of minimum-width integer types */ |
|||
|
|||
/* Here we assume a standard architecture where the hardware integer
|
|||
types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types |
|||
are the same as the corresponding N_t types. */ |
|||
|
|||
#undef INT_LEAST8_MIN |
|||
#undef INT_LEAST8_MAX |
|||
#undef UINT_LEAST8_MAX |
|||
#define INT_LEAST8_MIN INT8_MIN |
|||
#define INT_LEAST8_MAX INT8_MAX |
|||
#define UINT_LEAST8_MAX UINT8_MAX |
|||
|
|||
#undef INT_LEAST16_MIN |
|||
#undef INT_LEAST16_MAX |
|||
#undef UINT_LEAST16_MAX |
|||
#define INT_LEAST16_MIN INT16_MIN |
|||
#define INT_LEAST16_MAX INT16_MAX |
|||
#define UINT_LEAST16_MAX UINT16_MAX |
|||
|
|||
#undef INT_LEAST32_MIN |
|||
#undef INT_LEAST32_MAX |
|||
#undef UINT_LEAST32_MAX |
|||
#define INT_LEAST32_MIN INT32_MIN |
|||
#define INT_LEAST32_MAX INT32_MAX |
|||
#define UINT_LEAST32_MAX UINT32_MAX |
|||
|
|||
#undef INT_LEAST64_MIN |
|||
#undef INT_LEAST64_MAX |
|||
#ifdef GL_INT64_T |
|||
# define INT_LEAST64_MIN INT64_MIN |
|||
# define INT_LEAST64_MAX INT64_MAX |
|||
#endif |
|||
|
|||
#undef UINT_LEAST64_MAX |
|||
#ifdef GL_UINT64_T |
|||
# define UINT_LEAST64_MAX UINT64_MAX |
|||
#endif |
|||
|
|||
/* 7.18.2.3. Limits of fastest minimum-width integer types */ |
|||
|
|||
/* Here we assume a standard architecture where the hardware integer
|
|||
types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types |
|||
are taken from the same list of types. */ |
|||
|
|||
#undef INT_FAST8_MIN |
|||
#undef INT_FAST8_MAX |
|||
#undef UINT_FAST8_MAX |
|||
#define INT_FAST8_MIN LONG_MIN |
|||
#define INT_FAST8_MAX LONG_MAX |
|||
#define UINT_FAST8_MAX ULONG_MAX |
|||
|
|||
#undef INT_FAST16_MIN |
|||
#undef INT_FAST16_MAX |
|||
#undef UINT_FAST16_MAX |
|||
#define INT_FAST16_MIN LONG_MIN |
|||
#define INT_FAST16_MAX LONG_MAX |
|||
#define UINT_FAST16_MAX ULONG_MAX |
|||
|
|||
#undef INT_FAST32_MIN |
|||
#undef INT_FAST32_MAX |
|||
#undef UINT_FAST32_MAX |
|||
#define INT_FAST32_MIN LONG_MIN |
|||
#define INT_FAST32_MAX LONG_MAX |
|||
#define UINT_FAST32_MAX ULONG_MAX |
|||
|
|||
#undef INT_FAST64_MIN |
|||
#undef INT_FAST64_MAX |
|||
#ifdef GL_INT64_T |
|||
# define INT_FAST64_MIN INT64_MIN |
|||
# define INT_FAST64_MAX INT64_MAX |
|||
#endif |
|||
|
|||
#undef UINT_FAST64_MAX |
|||
#ifdef GL_UINT64_T |
|||
# define UINT_FAST64_MAX UINT64_MAX |
|||
#endif |
|||
|
|||
/* 7.18.2.4. Limits of integer types capable of holding object pointers */ |
|||
|
|||
#undef INTPTR_MIN |
|||
#undef INTPTR_MAX |
|||
#undef UINTPTR_MAX |
|||
#define INTPTR_MIN LONG_MIN |
|||
#define INTPTR_MAX LONG_MAX |
|||
#define UINTPTR_MAX ULONG_MAX |
|||
|
|||
/* 7.18.2.5. Limits of greatest-width integer types */ |
|||
|
|||
#undef INTMAX_MIN |
|||
#undef INTMAX_MAX |
|||
#ifdef INT64_MAX |
|||
# define INTMAX_MIN INT64_MIN |
|||
# define INTMAX_MAX INT64_MAX |
|||
#else |
|||
# define INTMAX_MIN INT32_MIN |
|||
# define INTMAX_MAX INT32_MAX |
|||
#endif |
|||
|
|||
#undef UINTMAX_MAX |
|||
#ifdef UINT64_MAX |
|||
# define UINTMAX_MAX UINT64_MAX |
|||
#else |
|||
# define UINTMAX_MAX UINT32_MAX |
|||
#endif |
|||
|
|||
/* 7.18.3. Limits of other integer types */ |
|||
|
|||
/* ptrdiff_t limits */ |
|||
#undef PTRDIFF_MIN |
|||
#undef PTRDIFF_MAX |
|||
#define PTRDIFF_MIN \ |
|||
_STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) |
|||
#define PTRDIFF_MAX \ |
|||
_STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) |
|||
|
|||
/* sig_atomic_t limits */ |
|||
#undef SIG_ATOMIC_MIN |
|||
#undef SIG_ATOMIC_MAX |
|||
#define SIG_ATOMIC_MIN \ |
|||
_STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ |
|||
0@SIG_ATOMIC_T_SUFFIX@) |
|||
#define SIG_ATOMIC_MAX \ |
|||
_STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ |
|||
0@SIG_ATOMIC_T_SUFFIX@) |
|||
|
|||
|
|||
/* size_t limit */ |
|||
#undef SIZE_MAX |
|||
#define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) |
|||
|
|||
/* wchar_t limits */ |
|||
#undef WCHAR_MIN |
|||
#undef WCHAR_MAX |
|||
#define WCHAR_MIN \ |
|||
_STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) |
|||
#define WCHAR_MAX \ |
|||
_STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) |
|||
|
|||
/* wint_t limits */ |
|||
#undef WINT_MIN |
|||
#undef WINT_MAX |
|||
#define WINT_MIN \ |
|||
_STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) |
|||
#define WINT_MAX \ |
|||
_STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) |
|||
|
|||
#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */ |
|||
|
|||
/* 7.18.4. Macros for integer constants */ |
|||
|
|||
#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS |
|||
|
|||
/* 7.18.4.1. Macros for minimum-width integer constants */ |
|||
/* According to ISO C 99 Technical Corrigendum 1 */ |
|||
|
|||
/* Here we assume a standard architecture where the hardware integer
|
|||
types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ |
|||
|
|||
#undef INT8_C |
|||
#undef UINT8_C |
|||
#define INT8_C(x) x |
|||
#define UINT8_C(x) x |
|||
|
|||
#undef INT16_C |
|||
#undef UINT16_C |
|||
#define INT16_C(x) x |
|||
#define UINT16_C(x) x |
|||
|
|||
#undef INT32_C |
|||
#undef UINT32_C |
|||
#define INT32_C(x) x |
|||
#define UINT32_C(x) x ## U |
|||
|
|||
#undef INT64_C |
|||
#undef UINT64_C |
|||
#if LONG_MAX >> 31 >> 31 == 1 |
|||
# define INT64_C(x) x##L |
|||
#elif defined _MSC_VER |
|||
# define INT64_C(x) x##i64 |
|||
#elif @HAVE_LONG_LONG_INT@ |
|||
# define INT64_C(x) x##LL |
|||
#endif |
|||
#if ULONG_MAX >> 31 >> 31 >> 1 == 1 |
|||
# define UINT64_C(x) x##UL |
|||
#elif defined _MSC_VER |
|||
# define UINT64_C(x) x##ui64 |
|||
#elif @HAVE_UNSIGNED_LONG_LONG_INT@ |
|||
# define UINT64_C(x) x##ULL |
|||
#endif |
|||
|
|||
/* 7.18.4.2. Macros for greatest-width integer constants */ |
|||
|
|||
#undef INTMAX_C |
|||
#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 |
|||
# define INTMAX_C(x) x##LL |
|||
#elif defined GL_INT64_T |
|||
# define INTMAX_C(x) INT64_C(x) |
|||
#else |
|||
# define INTMAX_C(x) x##L |
|||
#endif |
|||
|
|||
#undef UINTMAX_C |
|||
#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 |
|||
# define UINTMAX_C(x) x##ULL |
|||
#elif defined GL_UINT64_T |
|||
# define UINTMAX_C(x) UINT64_C(x) |
|||
#else |
|||
# define UINTMAX_C(x) x##UL |
|||
#endif |
|||
|
|||
#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ |
|||
|
|||
#endif /* _GL_STDINT_H */ |
|||
#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ |
|||
@ -0,0 +1,427 @@ |
|||
/* Byte-wise substring search, using the Two-Way algorithm.
|
|||
Copyright (C) 2008 Free Software Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
Written by Eric Blake <ebb9@byu.net>, 2008. |
|||
|
|||
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, 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, write to the Free Software Foundation, |
|||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
|||
|
|||
/* Before including this file, you need to include <config.h> and
|
|||
<string.h>, and define: |
|||
RESULT_TYPE A macro that expands to the return type. |
|||
AVAILABLE(h, h_l, j, n_l) |
|||
A macro that returns nonzero if there are |
|||
at least N_L bytes left starting at H[J]. |
|||
H is 'unsigned char *', H_L, J, and N_L |
|||
are 'size_t'; H_L is an lvalue. For |
|||
NUL-terminated searches, H_L can be |
|||
modified each iteration to avoid having |
|||
to compute the end of H up front. |
|||
|
|||
For case-insensitivity, you may optionally define: |
|||
CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L |
|||
characters of P1 and P2 are equal. |
|||
CANON_ELEMENT(c) A macro that canonicalizes an element right after |
|||
it has been fetched from one of the two strings. |
|||
The argument is an 'unsigned char'; the result |
|||
must be an 'unsigned char' as well. |
|||
|
|||
This file undefines the macros documented above, and defines |
|||
LONG_NEEDLE_THRESHOLD. |
|||
*/ |
|||
|
|||
#include <limits.h> |
|||
#include <stdint.h> |
|||
|
|||
/* We use the Two-Way string matching algorithm, which guarantees
|
|||
linear complexity with constant space. Additionally, for long |
|||
needles, we also use a bad character shift table similar to the |
|||
Boyer-Moore algorithm to achieve improved (potentially sub-linear) |
|||
performance. |
|||
|
|||
See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260
|
|||
and http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm
|
|||
*/ |
|||
|
|||
/* Point at which computing a bad-byte shift table is likely to be
|
|||
worthwhile. Small needles should not compute a table, since it |
|||
adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a |
|||
speedup no greater than a factor of NEEDLE_LEN. The larger the |
|||
needle, the better the potential performance gain. On the other |
|||
hand, on non-POSIX systems with CHAR_BIT larger than eight, the |
|||
memory required for the table is prohibitive. */ |
|||
#if CHAR_BIT < 10 |
|||
# define LONG_NEEDLE_THRESHOLD 32U |
|||
#else |
|||
# define LONG_NEEDLE_THRESHOLD SIZE_MAX |
|||
#endif |
|||
|
|||
#define MAX(a, b) ((a < b) ? (b) : (a)) |
|||
|
|||
#ifndef CANON_ELEMENT |
|||
# define CANON_ELEMENT(c) c |
|||
#endif |
|||
#ifndef CMP_FUNC |
|||
# define CMP_FUNC memcmp |
|||
#endif |
|||
|
|||
/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN.
|
|||
Return the index of the first byte in the right half, and set |
|||
*PERIOD to the global period of the right half. |
|||
|
|||
The global period of a string is the smallest index (possibly its |
|||
length) at which all remaining bytes in the string are repetitions |
|||
of the prefix (the last repetition may be a subset of the prefix). |
|||
|
|||
When NEEDLE is factored into two halves, a local period is the |
|||
length of the smallest word that shares a suffix with the left half |
|||
and shares a prefix with the right half. All factorizations of a |
|||
non-empty NEEDLE have a local period of at least 1 and no greater |
|||
than NEEDLE_LEN. |
|||
|
|||
A critical factorization has the property that the local period |
|||
equals the global period. All strings have at least one critical |
|||
factorization with the left half smaller than the global period. |
|||
|
|||
Given an ordered alphabet, a critical factorization can be computed |
|||
in linear time, with 2 * NEEDLE_LEN comparisons, by computing the |
|||
larger of two ordered maximal suffixes. The ordered maximal |
|||
suffixes are determined by lexicographic comparison of |
|||
periodicity. */ |
|||
static size_t |
|||
critical_factorization (const unsigned char *needle, size_t needle_len, |
|||
size_t *period) |
|||
{ |
|||
/* Index of last byte of left half, or SIZE_MAX. */ |
|||
size_t max_suffix, max_suffix_rev; |
|||
size_t j; /* Index into NEEDLE for current candidate suffix. */ |
|||
size_t k; /* Offset into current period. */ |
|||
size_t p; /* Intermediate period. */ |
|||
unsigned char a, b; /* Current comparison bytes. */ |
|||
|
|||
/* Invariants:
|
|||
0 <= j < NEEDLE_LEN - 1 |
|||
-1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) |
|||
min(max_suffix, max_suffix_rev) < global period of NEEDLE |
|||
1 <= p <= global period of NEEDLE |
|||
p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] |
|||
1 <= k <= p |
|||
*/ |
|||
|
|||
/* Perform lexicographic search. */ |
|||
max_suffix = SIZE_MAX; |
|||
j = 0; |
|||
k = p = 1; |
|||
while (j + k < needle_len) |
|||
{ |
|||
a = CANON_ELEMENT (needle[j + k]); |
|||
b = CANON_ELEMENT (needle[max_suffix + k]); |
|||
if (a < b) |
|||
{ |
|||
/* Suffix is smaller, period is entire prefix so far. */ |
|||
j += k; |
|||
k = 1; |
|||
p = j - max_suffix; |
|||
} |
|||
else if (a == b) |
|||
{ |
|||
/* Advance through repetition of the current period. */ |
|||
if (k != p) |
|||
++k; |
|||
else |
|||
{ |
|||
j += p; |
|||
k = 1; |
|||
} |
|||
} |
|||
else /* b < a */ |
|||
{ |
|||
/* Suffix is larger, start over from current location. */ |
|||
max_suffix = j++; |
|||
k = p = 1; |
|||
} |
|||
} |
|||
*period = p; |
|||
|
|||
/* Perform reverse lexicographic search. */ |
|||
max_suffix_rev = SIZE_MAX; |
|||
j = 0; |
|||
k = p = 1; |
|||
while (j + k < needle_len) |
|||
{ |
|||
a = CANON_ELEMENT (needle[j + k]); |
|||
b = CANON_ELEMENT (needle[max_suffix_rev + k]); |
|||
if (b < a) |
|||
{ |
|||
/* Suffix is smaller, period is entire prefix so far. */ |
|||
j += k; |
|||
k = 1; |
|||
p = j - max_suffix_rev; |
|||
} |
|||
else if (a == b) |
|||
{ |
|||
/* Advance through repetition of the current period. */ |
|||
if (k != p) |
|||
++k; |
|||
else |
|||
{ |
|||
j += p; |
|||
k = 1; |
|||
} |
|||
} |
|||
else /* a < b */ |
|||
{ |
|||
/* Suffix is larger, start over from current location. */ |
|||
max_suffix_rev = j++; |
|||
k = p = 1; |
|||
} |
|||
} |
|||
|
|||
/* Choose the longer suffix. Return the first byte of the right
|
|||
half, rather than the last byte of the left half. */ |
|||
if (max_suffix_rev + 1 < max_suffix + 1) |
|||
return max_suffix + 1; |
|||
*period = p; |
|||
return max_suffix_rev + 1; |
|||
} |
|||
|
|||
/* Return the first location of non-empty NEEDLE within HAYSTACK, or
|
|||
NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This |
|||
method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. |
|||
Performance is guaranteed to be linear, with an initialization cost |
|||
of 2 * NEEDLE_LEN comparisons. |
|||
|
|||
If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at |
|||
most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. |
|||
If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * |
|||
HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ |
|||
static RETURN_TYPE |
|||
two_way_short_needle (const unsigned char *haystack, size_t haystack_len, |
|||
const unsigned char *needle, size_t needle_len) |
|||
{ |
|||
size_t i; /* Index into current byte of NEEDLE. */ |
|||
size_t j; /* Index into current window of HAYSTACK. */ |
|||
size_t period; /* The period of the right half of needle. */ |
|||
size_t suffix; /* The index of the right half of needle. */ |
|||
|
|||
/* Factor the needle into two halves, such that the left half is
|
|||
smaller than the global period, and the right half is |
|||
periodic (with a period as large as NEEDLE_LEN - suffix). */ |
|||
suffix = critical_factorization (needle, needle_len, &period); |
|||
|
|||
/* Perform the search. Each iteration compares the right half
|
|||
first. */ |
|||
if (CMP_FUNC (needle, needle + period, suffix) == 0) |
|||
{ |
|||
/* Entire needle is periodic; a mismatch can only advance by the
|
|||
period, so use memory to avoid rescanning known occurrences |
|||
of the period. */ |
|||
size_t memory = 0; |
|||
j = 0; |
|||
while (AVAILABLE (haystack, haystack_len, j, needle_len)) |
|||
{ |
|||
/* Scan for matches in right half. */ |
|||
i = MAX (suffix, memory); |
|||
while (i < needle_len && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
++i; |
|||
if (needle_len <= i) |
|||
{ |
|||
/* Scan for matches in left half. */ |
|||
i = suffix - 1; |
|||
while (memory < i + 1 && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
--i; |
|||
if (i + 1 < memory + 1) |
|||
return (RETURN_TYPE) (haystack + j); |
|||
/* No match, so remember how many repetitions of period
|
|||
on the right half were scanned. */ |
|||
j += period; |
|||
memory = needle_len - period; |
|||
} |
|||
else |
|||
{ |
|||
j += i - suffix + 1; |
|||
memory = 0; |
|||
} |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
/* The two halves of needle are distinct; no extra memory is
|
|||
required, and any mismatch results in a maximal shift. */ |
|||
period = MAX (suffix, needle_len - suffix) + 1; |
|||
j = 0; |
|||
while (AVAILABLE (haystack, haystack_len, j, needle_len)) |
|||
{ |
|||
/* Scan for matches in right half. */ |
|||
i = suffix; |
|||
while (i < needle_len && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
++i; |
|||
if (needle_len <= i) |
|||
{ |
|||
/* Scan for matches in left half. */ |
|||
i = suffix - 1; |
|||
while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
--i; |
|||
if (i == SIZE_MAX) |
|||
return (RETURN_TYPE) (haystack + j); |
|||
j += period; |
|||
} |
|||
else |
|||
j += i - suffix + 1; |
|||
} |
|||
} |
|||
return NULL; |
|||
} |
|||
|
|||
/* Return the first location of non-empty NEEDLE within HAYSTACK, or
|
|||
NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This |
|||
method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. |
|||
Performance is guaranteed to be linear, with an initialization cost |
|||
of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. |
|||
|
|||
If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at |
|||
most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, |
|||
and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. |
|||
If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * |
|||
HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and |
|||
sublinear performance is not possible. */ |
|||
static RETURN_TYPE |
|||
two_way_long_needle (const unsigned char *haystack, size_t haystack_len, |
|||
const unsigned char *needle, size_t needle_len) |
|||
{ |
|||
size_t i; /* Index into current byte of NEEDLE. */ |
|||
size_t j; /* Index into current window of HAYSTACK. */ |
|||
size_t period; /* The period of the right half of needle. */ |
|||
size_t suffix; /* The index of the right half of needle. */ |
|||
size_t shift_table[1U << CHAR_BIT]; /* See below. */ |
|||
|
|||
/* Factor the needle into two halves, such that the left half is
|
|||
smaller than the global period, and the right half is |
|||
periodic (with a period as large as NEEDLE_LEN - suffix). */ |
|||
suffix = critical_factorization (needle, needle_len, &period); |
|||
|
|||
/* Populate shift_table. For each possible byte value c,
|
|||
shift_table[c] is the distance from the last occurrence of c to |
|||
the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. |
|||
shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ |
|||
for (i = 0; i < 1U << CHAR_BIT; i++) |
|||
shift_table[i] = needle_len; |
|||
for (i = 0; i < needle_len; i++) |
|||
shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; |
|||
|
|||
/* Perform the search. Each iteration compares the right half
|
|||
first. */ |
|||
if (CMP_FUNC (needle, needle + period, suffix) == 0) |
|||
{ |
|||
/* Entire needle is periodic; a mismatch can only advance by the
|
|||
period, so use memory to avoid rescanning known occurrences |
|||
of the period. */ |
|||
size_t memory = 0; |
|||
size_t shift; |
|||
j = 0; |
|||
while (AVAILABLE (haystack, haystack_len, j, needle_len)) |
|||
{ |
|||
/* Check the last byte first; if it does not match, then
|
|||
shift to the next possible match location. */ |
|||
shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; |
|||
if (0 < shift) |
|||
{ |
|||
if (memory && shift < period) |
|||
{ |
|||
/* Since needle is periodic, but the last period has
|
|||
a byte out of place, there can be no match until |
|||
after the mismatch. */ |
|||
shift = needle_len - period; |
|||
memory = 0; |
|||
} |
|||
j += shift; |
|||
continue; |
|||
} |
|||
/* Scan for matches in right half. The last byte has
|
|||
already been matched, by virtue of the shift table. */ |
|||
i = MAX (suffix, memory); |
|||
while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
++i; |
|||
if (needle_len - 1 <= i) |
|||
{ |
|||
/* Scan for matches in left half. */ |
|||
i = suffix - 1; |
|||
while (memory < i + 1 && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
--i; |
|||
if (i + 1 < memory + 1) |
|||
return (RETURN_TYPE) (haystack + j); |
|||
/* No match, so remember how many repetitions of period
|
|||
on the right half were scanned. */ |
|||
j += period; |
|||
memory = needle_len - period; |
|||
} |
|||
else |
|||
{ |
|||
j += i - suffix + 1; |
|||
memory = 0; |
|||
} |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
/* The two halves of needle are distinct; no extra memory is
|
|||
required, and any mismatch results in a maximal shift. */ |
|||
size_t shift; |
|||
period = MAX (suffix, needle_len - suffix) + 1; |
|||
j = 0; |
|||
while (AVAILABLE (haystack, haystack_len, j, needle_len)) |
|||
{ |
|||
/* Check the last byte first; if it does not match, then
|
|||
shift to the next possible match location. */ |
|||
shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; |
|||
if (0 < shift) |
|||
{ |
|||
j += shift; |
|||
continue; |
|||
} |
|||
/* Scan for matches in right half. The last byte has
|
|||
already been matched, by virtue of the shift table. */ |
|||
i = suffix; |
|||
while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
++i; |
|||
if (needle_len - 1 <= i) |
|||
{ |
|||
/* Scan for matches in left half. */ |
|||
i = suffix - 1; |
|||
while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) |
|||
== CANON_ELEMENT (haystack[i + j]))) |
|||
--i; |
|||
if (i == SIZE_MAX) |
|||
return (RETURN_TYPE) (haystack + j); |
|||
j += period; |
|||
} |
|||
else |
|||
j += i - suffix + 1; |
|||
} |
|||
} |
|||
return NULL; |
|||
} |
|||
|
|||
#undef AVAILABLE |
|||
#undef CANON_ELEMENT |
|||
#undef CMP_FUNC |
|||
#undef MAX |
|||
#undef RETURN_TYPE |
|||
@ -0,0 +1,569 @@ |
|||
/* A GNU-like <string.h>.
|
|||
|
|||
Copyright (C) 1995-1996, 2001-2008 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, 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, write to the Free Software Foundation, |
|||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
|||
|
|||
#ifndef _GL_STRING_H |
|||
|
|||
/* The include_next requires a split double-inclusion guard. */ |
|||
#@INCLUDE_NEXT@ @NEXT_STRING_H@ |
|||
|
|||
#ifndef _GL_STRING_H |
|||
#define _GL_STRING_H |
|||
|
|||
|
|||
#ifndef __attribute__ |
|||
/* This feature is available in gcc versions 2.5 and later. */ |
|||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) |
|||
# define __attribute__(Spec) /* empty */ |
|||
# endif |
|||
/* The attribute __pure__ was added in gcc 2.96. */ |
|||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) |
|||
# define __pure__ /* empty */ |
|||
# endif |
|||
#endif |
|||
|
|||
|
|||
/* The definition of GL_LINK_WARNING is copied here. */ |
|||
|
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
|
|||
/* Return the first occurrence of NEEDLE in HAYSTACK. */ |
|||
#if @GNULIB_MEMMEM@ |
|||
# if @REPLACE_MEMMEM@ |
|||
# define memmem rpl_memmem |
|||
# endif |
|||
# if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@ |
|||
extern void *memmem (void const *__haystack, size_t __haystack_len, |
|||
void const *__needle, size_t __needle_len) |
|||
__attribute__ ((__pure__)); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef memmem |
|||
# define memmem(a,al,b,bl) \ |
|||
(GL_LINK_WARNING ("memmem is unportable and often quadratic - " \ |
|||
"use gnulib module memmem-simple for portability, " \ |
|||
"and module memmem for speed" ), \ |
|||
memmem (a, al, b, bl)) |
|||
#endif |
|||
|
|||
/* Copy N bytes of SRC to DEST, return pointer to bytes after the
|
|||
last written byte. */ |
|||
#if @GNULIB_MEMPCPY@ |
|||
# if ! @HAVE_MEMPCPY@ |
|||
extern void *mempcpy (void *restrict __dest, void const *restrict __src, |
|||
size_t __n); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef mempcpy |
|||
# define mempcpy(a,b,n) \ |
|||
(GL_LINK_WARNING ("mempcpy is unportable - " \ |
|||
"use gnulib module mempcpy for portability"), \ |
|||
mempcpy (a, b, n)) |
|||
#endif |
|||
|
|||
/* Search backwards through a block for a byte (specified as an int). */ |
|||
#if @GNULIB_MEMRCHR@ |
|||
# if ! @HAVE_DECL_MEMRCHR@ |
|||
extern void *memrchr (void const *, int, size_t) |
|||
__attribute__ ((__pure__)); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef memrchr |
|||
# define memrchr(a,b,c) \ |
|||
(GL_LINK_WARNING ("memrchr is unportable - " \ |
|||
"use gnulib module memrchr for portability"), \ |
|||
memrchr (a, b, c)) |
|||
#endif |
|||
|
|||
/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ |
|||
#if @GNULIB_STPCPY@ |
|||
# if ! @HAVE_STPCPY@ |
|||
extern char *stpcpy (char *restrict __dst, char const *restrict __src); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef stpcpy |
|||
# define stpcpy(a,b) \ |
|||
(GL_LINK_WARNING ("stpcpy is unportable - " \ |
|||
"use gnulib module stpcpy for portability"), \ |
|||
stpcpy (a, b)) |
|||
#endif |
|||
|
|||
/* Copy no more than N bytes of SRC to DST, returning a pointer past the
|
|||
last non-NUL byte written into DST. */ |
|||
#if @GNULIB_STPNCPY@ |
|||
# if ! @HAVE_STPNCPY@ |
|||
# define stpncpy gnu_stpncpy |
|||
extern char *stpncpy (char *restrict __dst, char const *restrict __src, |
|||
size_t __n); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef stpncpy |
|||
# define stpncpy(a,b,n) \ |
|||
(GL_LINK_WARNING ("stpncpy is unportable - " \ |
|||
"use gnulib module stpncpy for portability"), \ |
|||
stpncpy (a, b, n)) |
|||
#endif |
|||
|
|||
#if defined GNULIB_POSIXCHECK |
|||
/* strchr() does not work with multibyte strings if the locale encoding is
|
|||
GB18030 and the character to be searched is a digit. */ |
|||
# undef strchr |
|||
# define strchr(s,c) \ |
|||
(GL_LINK_WARNING ("strchr cannot work correctly on character strings " \ |
|||
"in some multibyte locales - " \ |
|||
"use mbschr if you care about internationalization"), \ |
|||
strchr (s, c)) |
|||
#endif |
|||
|
|||
/* Find the first occurrence of C in S or the final NUL byte. */ |
|||
#if @GNULIB_STRCHRNUL@ |
|||
# if ! @HAVE_STRCHRNUL@ |
|||
extern char *strchrnul (char const *__s, int __c_in) |
|||
__attribute__ ((__pure__)); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strchrnul |
|||
# define strchrnul(a,b) \ |
|||
(GL_LINK_WARNING ("strchrnul is unportable - " \ |
|||
"use gnulib module strchrnul for portability"), \ |
|||
strchrnul (a, b)) |
|||
#endif |
|||
|
|||
/* Duplicate S, returning an identical malloc'd string. */ |
|||
#if @GNULIB_STRDUP@ |
|||
# if ! @HAVE_DECL_STRDUP@ && ! defined strdup |
|||
extern char *strdup (char const *__s); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strdup |
|||
# define strdup(a) \ |
|||
(GL_LINK_WARNING ("strdup is unportable - " \ |
|||
"use gnulib module strdup for portability"), \ |
|||
strdup (a)) |
|||
#endif |
|||
|
|||
/* Return a newly allocated copy of at most N bytes of STRING. */ |
|||
#if @GNULIB_STRNDUP@ |
|||
# if ! @HAVE_STRNDUP@ |
|||
# undef strndup |
|||
# define strndup rpl_strndup |
|||
# endif |
|||
# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@ |
|||
extern char *strndup (char const *__string, size_t __n); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strndup |
|||
# define strndup(a,n) \ |
|||
(GL_LINK_WARNING ("strndup is unportable - " \ |
|||
"use gnulib module strndup for portability"), \ |
|||
strndup (a, n)) |
|||
#endif |
|||
|
|||
/* Find the length (number of bytes) of STRING, but scan at most
|
|||
MAXLEN bytes. If no '\0' terminator is found in that many bytes, |
|||
return MAXLEN. */ |
|||
#if @GNULIB_STRNLEN@ |
|||
# if ! @HAVE_DECL_STRNLEN@ |
|||
extern size_t strnlen (char const *__string, size_t __maxlen) |
|||
__attribute__ ((__pure__)); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strnlen |
|||
# define strnlen(a,n) \ |
|||
(GL_LINK_WARNING ("strnlen is unportable - " \ |
|||
"use gnulib module strnlen for portability"), \ |
|||
strnlen (a, n)) |
|||
#endif |
|||
|
|||
#if defined GNULIB_POSIXCHECK |
|||
/* strcspn() assumes the second argument is a list of single-byte characters.
|
|||
Even in this simple case, it does not work with multibyte strings if the |
|||
locale encoding is GB18030 and one of the characters to be searched is a |
|||
digit. */ |
|||
# undef strcspn |
|||
# define strcspn(s,a) \ |
|||
(GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \ |
|||
"in multibyte locales - " \ |
|||
"use mbscspn if you care about internationalization"), \ |
|||
strcspn (s, a)) |
|||
#endif |
|||
|
|||
/* Find the first occurrence in S of any character in ACCEPT. */ |
|||
#if @GNULIB_STRPBRK@ |
|||
# if ! @HAVE_STRPBRK@ |
|||
extern char *strpbrk (char const *__s, char const *__accept) |
|||
__attribute__ ((__pure__)); |
|||
# endif |
|||
# if defined GNULIB_POSIXCHECK |
|||
/* strpbrk() assumes the second argument is a list of single-byte characters.
|
|||
Even in this simple case, it does not work with multibyte strings if the |
|||
locale encoding is GB18030 and one of the characters to be searched is a |
|||
digit. */ |
|||
# undef strpbrk |
|||
# define strpbrk(s,a) \ |
|||
(GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \ |
|||
"in multibyte locales - " \ |
|||
"use mbspbrk if you care about internationalization"), \ |
|||
strpbrk (s, a)) |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strpbrk |
|||
# define strpbrk(s,a) \ |
|||
(GL_LINK_WARNING ("strpbrk is unportable - " \ |
|||
"use gnulib module strpbrk for portability"), \ |
|||
strpbrk (s, a)) |
|||
#endif |
|||
|
|||
#if defined GNULIB_POSIXCHECK |
|||
/* strspn() assumes the second argument is a list of single-byte characters.
|
|||
Even in this simple case, it cannot work with multibyte strings. */ |
|||
# undef strspn |
|||
# define strspn(s,a) \ |
|||
(GL_LINK_WARNING ("strspn cannot work correctly on character strings " \ |
|||
"in multibyte locales - " \ |
|||
"use mbsspn if you care about internationalization"), \ |
|||
strspn (s, a)) |
|||
#endif |
|||
|
|||
#if defined GNULIB_POSIXCHECK |
|||
/* strrchr() does not work with multibyte strings if the locale encoding is
|
|||
GB18030 and the character to be searched is a digit. */ |
|||
# undef strrchr |
|||
# define strrchr(s,c) \ |
|||
(GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \ |
|||
"in some multibyte locales - " \ |
|||
"use mbsrchr if you care about internationalization"), \ |
|||
strrchr (s, c)) |
|||
#endif |
|||
|
|||
/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
|
|||
If one is found, overwrite it with a NUL, and advance *STRINGP |
|||
to point to the next char after it. Otherwise, set *STRINGP to NULL. |
|||
If *STRINGP was already NULL, nothing happens. |
|||
Return the old value of *STRINGP. |
|||
|
|||
This is a variant of strtok() that is multithread-safe and supports |
|||
empty fields. |
|||
|
|||
Caveat: It modifies the original string. |
|||
Caveat: These functions cannot be used on constant strings. |
|||
Caveat: The identity of the delimiting character is lost. |
|||
Caveat: It doesn't work with multibyte strings unless all of the delimiter |
|||
characters are ASCII characters < 0x30. |
|||
|
|||
See also strtok_r(). */ |
|||
#if @GNULIB_STRSEP@ |
|||
# if ! @HAVE_STRSEP@ |
|||
extern char *strsep (char **restrict __stringp, char const *restrict __delim); |
|||
# endif |
|||
# if defined GNULIB_POSIXCHECK |
|||
# undef strsep |
|||
# define strsep(s,d) \ |
|||
(GL_LINK_WARNING ("strsep cannot work correctly on character strings " \ |
|||
"in multibyte locales - " \ |
|||
"use mbssep if you care about internationalization"), \ |
|||
strsep (s, d)) |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strsep |
|||
# define strsep(s,d) \ |
|||
(GL_LINK_WARNING ("strsep is unportable - " \ |
|||
"use gnulib module strsep for portability"), \ |
|||
strsep (s, d)) |
|||
#endif |
|||
|
|||
#if @GNULIB_STRSTR@ |
|||
# if @REPLACE_STRSTR@ |
|||
# define strstr rpl_strstr |
|||
char *strstr (const char *haystack, const char *needle) |
|||
__attribute__ ((__pure__)); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
/* strstr() does not work with multibyte strings if the locale encoding is
|
|||
different from UTF-8: |
|||
POSIX says that it operates on "strings", and "string" in POSIX is defined |
|||
as a sequence of bytes, not of characters. */ |
|||
# undef strstr |
|||
# define strstr(a,b) \ |
|||
(GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \ |
|||
"work correctly on character strings in most " \ |
|||
"multibyte locales - " \ |
|||
"use mbsstr if you care about internationalization, " \ |
|||
"or use strstr if you care about speed"), \ |
|||
strstr (a, b)) |
|||
#endif |
|||
|
|||
/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
|
|||
comparison. */ |
|||
#if @GNULIB_STRCASESTR@ |
|||
# if @REPLACE_STRCASESTR@ |
|||
# define strcasestr rpl_strcasestr |
|||
# endif |
|||
# if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@ |
|||
extern char *strcasestr (const char *haystack, const char *needle) |
|||
__attribute__ ((__pure__)); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
/* strcasestr() does not work with multibyte strings:
|
|||
It is a glibc extension, and glibc implements it only for unibyte |
|||
locales. */ |
|||
# undef strcasestr |
|||
# define strcasestr(a,b) \ |
|||
(GL_LINK_WARNING ("strcasestr does work correctly on character strings " \ |
|||
"in multibyte locales - " \ |
|||
"use mbscasestr if you care about " \ |
|||
"internationalization, or use c-strcasestr if you want " \ |
|||
"a locale independent function"), \ |
|||
strcasestr (a, b)) |
|||
#endif |
|||
|
|||
/* Parse S into tokens separated by characters in DELIM.
|
|||
If S is NULL, the saved pointer in SAVE_PTR is used as |
|||
the next starting point. For example: |
|||
char s[] = "-abc-=-def"; |
|||
char *sp; |
|||
x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def"
|
|||
x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL
|
|||
x = strtok_r(NULL, "=", &sp); // x = NULL
|
|||
// s = "abc\0-def\0"
|
|||
|
|||
This is a variant of strtok() that is multithread-safe. |
|||
|
|||
For the POSIX documentation for this function, see: |
|||
http://www.opengroup.org/susv3xsh/strtok.html
|
|||
|
|||
Caveat: It modifies the original string. |
|||
Caveat: These functions cannot be used on constant strings. |
|||
Caveat: The identity of the delimiting character is lost. |
|||
Caveat: It doesn't work with multibyte strings unless all of the delimiter |
|||
characters are ASCII characters < 0x30. |
|||
|
|||
See also strsep(). */ |
|||
#if @GNULIB_STRTOK_R@ |
|||
# if ! @HAVE_DECL_STRTOK_R@ |
|||
extern char *strtok_r (char *restrict s, char const *restrict delim, |
|||
char **restrict save_ptr); |
|||
# endif |
|||
# if defined GNULIB_POSIXCHECK |
|||
# undef strtok_r |
|||
# define strtok_r(s,d,p) \ |
|||
(GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \ |
|||
"in multibyte locales - " \ |
|||
"use mbstok_r if you care about internationalization"), \ |
|||
strtok_r (s, d, p)) |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strtok_r |
|||
# define strtok_r(s,d,p) \ |
|||
(GL_LINK_WARNING ("strtok_r is unportable - " \ |
|||
"use gnulib module strtok_r for portability"), \ |
|||
strtok_r (s, d, p)) |
|||
#endif |
|||
|
|||
|
|||
/* The following functions are not specified by POSIX. They are gnulib
|
|||
extensions. */ |
|||
|
|||
#if @GNULIB_MBSLEN@ |
|||
/* Return the number of multibyte characters in the character string STRING.
|
|||
This considers multibyte characters, unlike strlen, which counts bytes. */ |
|||
extern size_t mbslen (const char *string); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSNLEN@ |
|||
/* Return the number of multibyte characters in the character string starting
|
|||
at STRING and ending at STRING + LEN. */ |
|||
extern size_t mbsnlen (const char *string, size_t len); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSCHR@ |
|||
/* Locate the first single-byte character C in the character string STRING,
|
|||
and return a pointer to it. Return NULL if C is not found in STRING. |
|||
Unlike strchr(), this function works correctly in multibyte locales with |
|||
encodings such as GB18030. */ |
|||
# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ |
|||
extern char * mbschr (const char *string, int c); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSRCHR@ |
|||
/* Locate the last single-byte character C in the character string STRING,
|
|||
and return a pointer to it. Return NULL if C is not found in STRING. |
|||
Unlike strrchr(), this function works correctly in multibyte locales with |
|||
encodings such as GB18030. */ |
|||
# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ |
|||
extern char * mbsrchr (const char *string, int c); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSSTR@ |
|||
/* Find the first occurrence of the character string NEEDLE in the character
|
|||
string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. |
|||
Unlike strstr(), this function works correctly in multibyte locales with |
|||
encodings different from UTF-8. */ |
|||
extern char * mbsstr (const char *haystack, const char *needle); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSCASECMP@ |
|||
/* Compare the character strings S1 and S2, ignoring case, returning less than,
|
|||
equal to or greater than zero if S1 is lexicographically less than, equal to |
|||
or greater than S2. |
|||
Note: This function may, in multibyte locales, return 0 for strings of |
|||
different lengths! |
|||
Unlike strcasecmp(), this function works correctly in multibyte locales. */ |
|||
extern int mbscasecmp (const char *s1, const char *s2); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSNCASECMP@ |
|||
/* Compare the initial segment of the character string S1 consisting of at most
|
|||
N characters with the initial segment of the character string S2 consisting |
|||
of at most N characters, ignoring case, returning less than, equal to or |
|||
greater than zero if the initial segment of S1 is lexicographically less |
|||
than, equal to or greater than the initial segment of S2. |
|||
Note: This function may, in multibyte locales, return 0 for initial segments |
|||
of different lengths! |
|||
Unlike strncasecmp(), this function works correctly in multibyte locales. |
|||
But beware that N is not a byte count but a character count! */ |
|||
extern int mbsncasecmp (const char *s1, const char *s2, size_t n); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSPCASECMP@ |
|||
/* Compare the initial segment of the character string STRING consisting of
|
|||
at most mbslen (PREFIX) characters with the character string PREFIX, |
|||
ignoring case, returning less than, equal to or greater than zero if this |
|||
initial segment is lexicographically less than, equal to or greater than |
|||
PREFIX. |
|||
Note: This function may, in multibyte locales, return 0 if STRING is of |
|||
smaller length than PREFIX! |
|||
Unlike strncasecmp(), this function works correctly in multibyte |
|||
locales. */ |
|||
extern char * mbspcasecmp (const char *string, const char *prefix); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSCASESTR@ |
|||
/* Find the first occurrence of the character string NEEDLE in the character
|
|||
string HAYSTACK, using case-insensitive comparison. |
|||
Note: This function may, in multibyte locales, return success even if |
|||
strlen (haystack) < strlen (needle) ! |
|||
Unlike strcasestr(), this function works correctly in multibyte locales. */ |
|||
extern char * mbscasestr (const char *haystack, const char *needle); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSCSPN@ |
|||
/* Find the first occurrence in the character string STRING of any character
|
|||
in the character string ACCEPT. Return the number of bytes from the |
|||
beginning of the string to this occurrence, or to the end of the string |
|||
if none exists. |
|||
Unlike strcspn(), this function works correctly in multibyte locales. */ |
|||
extern size_t mbscspn (const char *string, const char *accept); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSPBRK@ |
|||
/* Find the first occurrence in the character string STRING of any character
|
|||
in the character string ACCEPT. Return the pointer to it, or NULL if none |
|||
exists. |
|||
Unlike strpbrk(), this function works correctly in multibyte locales. */ |
|||
# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ |
|||
extern char * mbspbrk (const char *string, const char *accept); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSSPN@ |
|||
/* Find the first occurrence in the character string STRING of any character
|
|||
not in the character string REJECT. Return the number of bytes from the |
|||
beginning of the string to this occurrence, or to the end of the string |
|||
if none exists. |
|||
Unlike strspn(), this function works correctly in multibyte locales. */ |
|||
extern size_t mbsspn (const char *string, const char *reject); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSSEP@ |
|||
/* Search the next delimiter (multibyte character listed in the character
|
|||
string DELIM) starting at the character string *STRINGP. |
|||
If one is found, overwrite it with a NUL, and advance *STRINGP to point |
|||
to the next multibyte character after it. Otherwise, set *STRINGP to NULL. |
|||
If *STRINGP was already NULL, nothing happens. |
|||
Return the old value of *STRINGP. |
|||
|
|||
This is a variant of mbstok_r() that supports empty fields. |
|||
|
|||
Caveat: It modifies the original string. |
|||
Caveat: These functions cannot be used on constant strings. |
|||
Caveat: The identity of the delimiting character is lost. |
|||
|
|||
See also mbstok_r(). */ |
|||
extern char * mbssep (char **stringp, const char *delim); |
|||
#endif |
|||
|
|||
#if @GNULIB_MBSTOK_R@ |
|||
/* Parse the character string STRING into tokens separated by characters in
|
|||
the character string DELIM. |
|||
If STRING is NULL, the saved pointer in SAVE_PTR is used as |
|||
the next starting point. For example: |
|||
char s[] = "-abc-=-def"; |
|||
char *sp; |
|||
x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def"
|
|||
x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL
|
|||
x = mbstok_r(NULL, "=", &sp); // x = NULL
|
|||
// s = "abc\0-def\0"
|
|||
|
|||
Caveat: It modifies the original string. |
|||
Caveat: These functions cannot be used on constant strings. |
|||
Caveat: The identity of the delimiting character is lost. |
|||
|
|||
See also mbssep(). */ |
|||
extern char * mbstok_r (char *string, const char *delim, char **save_ptr); |
|||
#endif |
|||
|
|||
/* Map any int, typically from errno, into an error message. */ |
|||
#if @GNULIB_STRERROR@ |
|||
# if @REPLACE_STRERROR@ |
|||
# undef strerror |
|||
# define strerror rpl_strerror |
|||
extern char *strerror (int); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strerror |
|||
# define strerror(e) \ |
|||
(GL_LINK_WARNING ("strerror is unportable - " \ |
|||
"use gnulib module strerror to guarantee non-NULL result"), \ |
|||
strerror (e)) |
|||
#endif |
|||
|
|||
#if @GNULIB_STRSIGNAL@ |
|||
# if @REPLACE_STRSIGNAL@ |
|||
# define strsignal rpl_strsignal |
|||
# endif |
|||
# if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@ |
|||
extern char *strsignal (int __sig); |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef strsignal |
|||
# define strsignal(a) \ |
|||
(GL_LINK_WARNING ("strsignal is unportable - " \ |
|||
"use gnulib module strsignal for portability"), \ |
|||
strsignal (a)) |
|||
#endif |
|||
|
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* _GL_STRING_H */ |
|||
#endif /* _GL_STRING_H */ |
|||
@ -0,0 +1,82 @@ |
|||
/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
|
|||
|
|||
Copyright (C) 2007 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, 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, write to the Free Software Foundation, |
|||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
|||
|
|||
/* Written by Eric Blake. */ |
|||
|
|||
/*
|
|||
* ISO C 99 <wchar.h> for platforms that have issues. |
|||
* <http://www.opengroup.org/susv3xbd/wchar.h.html>
|
|||
* |
|||
* For now, this just ensures proper prerequisite inclusion order and |
|||
* the declaration of wcwidth(). |
|||
*/ |
|||
|
|||
#ifndef _GL_WCHAR_H |
|||
|
|||
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
|
|||
<wchar.h>. |
|||
BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be |
|||
included before <wchar.h>. */ |
|||
#include <stddef.h> |
|||
#include <stdio.h> |
|||
#include <time.h> |
|||
|
|||
/* Include the original <wchar.h> if it exists.
|
|||
Some builds of uClibc lack it. */ |
|||
/* The include_next requires a split double-inclusion guard. */ |
|||
#if @HAVE_WCHAR_H@ |
|||
# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ |
|||
#endif |
|||
|
|||
#ifndef _GL_WCHAR_H |
|||
#define _GL_WCHAR_H |
|||
|
|||
/* The definition of GL_LINK_WARNING is copied here. */ |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
|
|||
/* Return the number of screen columns needed for WC. */ |
|||
#if @GNULIB_WCWIDTH@ |
|||
# if @REPLACE_WCWIDTH@ |
|||
# undef wcwidth |
|||
# define wcwidth rpl_wcwidth |
|||
extern int wcwidth (wchar_t); |
|||
# else |
|||
# if !defined wcwidth && !@HAVE_DECL_WCWIDTH@ |
|||
/* wcwidth exists but is not declared. */ |
|||
extern int wcwidth (int /* actually wchar_t */); |
|||
# endif |
|||
# endif |
|||
#elif defined GNULIB_POSIXCHECK |
|||
# undef wcwidth |
|||
# define wcwidth(w) \ |
|||
(GL_LINK_WARNING ("wcwidth is unportable - " \ |
|||
"use gnulib module wcwidth for portability"), \ |
|||
wcwidth (w)) |
|||
#endif |
|||
|
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* _GL_WCHAR_H */ |
|||
#endif /* _GL_WCHAR_H */ |
|||
Loading…
Reference in new issue