mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Add Gnulib-provided files for convenience.
These come from Gnulib's Git commit ae3a0d62f26d8156b403e40d6007475006f3136f, dated 2008-08-19.
This commit is contained in:
parent
417566ebc9
commit
103dc4d4d2
20 changed files with 1606 additions and 20 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2008-08-21 Ludovic Courtès <ludo@gnu.org>
|
||||||
|
|
||||||
|
* autogen.sh: Don't use `gnulib-tool', use the Gnulib files
|
||||||
|
available in the repository.
|
||||||
|
|
||||||
2008-08-07 Neil Jerram <neil@ossau.uklinux.net>
|
2008-08-07 Neil Jerram <neil@ossau.uklinux.net>
|
||||||
|
|
||||||
* configure.in (SCM_I_GSC_STACK_GROWS_UP): Remove use of
|
* configure.in (SCM_I_GSC_STACK_GROWS_UP): Remove use of
|
||||||
|
|
|
@ -19,13 +19,10 @@ libtool --version
|
||||||
echo ""
|
echo ""
|
||||||
${M4:-/usr/bin/m4} --version
|
${M4:-/usr/bin/m4} --version
|
||||||
echo ""
|
echo ""
|
||||||
gnulib-tool --version
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
### update infrastructure
|
### update infrastructure
|
||||||
|
|
||||||
gnulib-tool --update && \
|
|
||||||
autoreconf -i --force --verbose
|
autoreconf -i --force --verbose
|
||||||
|
|
||||||
echo "guile-readline..."
|
echo "guile-readline..."
|
||||||
|
|
28
build-aux/link-warning.h
Normal file
28
build-aux/link-warning.h
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* GL_LINK_WARNING("literal string") arranges to emit the literal string as
|
||||||
|
a linker warning on most glibc systems.
|
||||||
|
We use a linker warning rather than a preprocessor warning, because
|
||||||
|
#warning cannot be used inside macros. */
|
||||||
|
#ifndef GL_LINK_WARNING
|
||||||
|
/* This works on platforms with GNU ld and ELF object format.
|
||||||
|
Testing __GLIBC__ is sufficient for asserting that GNU ld is in use.
|
||||||
|
Testing __ELF__ guarantees the ELF object format.
|
||||||
|
Testing __GNUC__ is necessary for the compound expression syntax. */
|
||||||
|
# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__
|
||||||
|
# define GL_LINK_WARNING(message) \
|
||||||
|
GL_LINK_WARNING1 (__FILE__, __LINE__, message)
|
||||||
|
# define GL_LINK_WARNING1(file, line, message) \
|
||||||
|
GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */
|
||||||
|
# define GL_LINK_WARNING2(file, line, message) \
|
||||||
|
GL_LINK_WARNING3 (file ":" #line ": warning: " message)
|
||||||
|
# define GL_LINK_WARNING3(message) \
|
||||||
|
({ static const char warning[sizeof (message)] \
|
||||||
|
__attribute__ ((__unused__, \
|
||||||
|
__section__ (".gnu.warning"), \
|
||||||
|
__aligned__ (1))) \
|
||||||
|
= message "\n"; \
|
||||||
|
(void)0; \
|
||||||
|
})
|
||||||
|
# else
|
||||||
|
# define GL_LINK_WARNING(message) ((void) 0)
|
||||||
|
# endif
|
||||||
|
#endif
|
7
lib/.gitignore
vendored
7
lib/.gitignore
vendored
|
@ -1,7 +0,0 @@
|
||||||
Makefile.am
|
|
||||||
alloca.c
|
|
||||||
alloca.in.h
|
|
||||||
dummy.c
|
|
||||||
strcasecmp.c
|
|
||||||
strings.in.h
|
|
||||||
strncasecmp.c
|
|
119
lib/Makefile.am
Normal file
119
lib/Makefile.am
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
## DO NOT EDIT! GENERATED AUTOMATICALLY!
|
||||||
|
## Process this file with automake to produce Makefile.in.
|
||||||
|
# Copyright (C) 2002-2008 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=lib --m4-base=m4 --doc-base=doc --aux-dir=build-aux --lgpl --libtool --macro-prefix=gl alloca extensions strcase
|
||||||
|
|
||||||
|
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_LTLIBRARIES += libgnu.la
|
||||||
|
|
||||||
|
libgnu_la_SOURCES =
|
||||||
|
libgnu_la_LIBADD = $(gl_LTLIBOBJS)
|
||||||
|
libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
|
||||||
|
EXTRA_libgnu_la_SOURCES =
|
||||||
|
libgnu_la_LDFLAGS = $(AM_LDFLAGS)
|
||||||
|
|
||||||
|
## begin gnulib module alloca
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += alloca.c
|
||||||
|
|
||||||
|
EXTRA_libgnu_la_SOURCES += alloca.c
|
||||||
|
|
||||||
|
libgnu_la_LIBADD += @LTALLOCA@
|
||||||
|
libgnu_la_DEPENDENCIES += @LTALLOCA@
|
||||||
|
## end gnulib module alloca
|
||||||
|
|
||||||
|
## begin gnulib module alloca-opt
|
||||||
|
|
||||||
|
BUILT_SOURCES += $(ALLOCA_H)
|
||||||
|
|
||||||
|
# We need the following in order to create <alloca.h> when the system
|
||||||
|
# doesn't have one that works with the given compiler.
|
||||||
|
alloca.h: alloca.in.h
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
cat $(srcdir)/alloca.in.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv -f $@-t $@
|
||||||
|
MOSTLYCLEANFILES += alloca.h alloca.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += alloca.in.h
|
||||||
|
|
||||||
|
## end gnulib module alloca-opt
|
||||||
|
|
||||||
|
## begin gnulib module link-warning
|
||||||
|
|
||||||
|
LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h
|
||||||
|
|
||||||
|
EXTRA_DIST += $(top_srcdir)/build-aux/link-warning.h
|
||||||
|
|
||||||
|
## end gnulib module link-warning
|
||||||
|
|
||||||
|
## begin gnulib module strcase
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += strcasecmp.c strncasecmp.c
|
||||||
|
|
||||||
|
EXTRA_libgnu_la_SOURCES += strcasecmp.c strncasecmp.c
|
||||||
|
|
||||||
|
## end gnulib module strcase
|
||||||
|
|
||||||
|
## begin gnulib module strings
|
||||||
|
|
||||||
|
BUILT_SOURCES += strings.h
|
||||||
|
|
||||||
|
# We need the following in order to create <strings.h> when the system
|
||||||
|
# doesn't have one that works with the given compiler.
|
||||||
|
strings.h: strings.in.h
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
||||||
|
-e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
|
||||||
|
-e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
|
||||||
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
|
< $(srcdir)/strings.in.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += strings.h strings.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += strings.in.h
|
||||||
|
|
||||||
|
## end gnulib module strings
|
||||||
|
|
||||||
|
## begin gnulib module dummy
|
||||||
|
|
||||||
|
libgnu_la_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; \
|
||||||
|
:
|
489
lib/alloca.c
Normal file
489
lib/alloca.c
Normal file
|
@ -0,0 +1,489 @@
|
||||||
|
/* alloca.c -- allocate automatically reclaimed memory
|
||||||
|
(Mostly) portable public-domain implementation -- D A Gwyn
|
||||||
|
|
||||||
|
This implementation of the PWB library alloca function,
|
||||||
|
which is used to allocate space off the run-time stack so
|
||||||
|
that it is automatically reclaimed upon procedure exit,
|
||||||
|
was inspired by discussions with J. Q. Johnson of Cornell.
|
||||||
|
J.Otto Tennant <jot@cray.com> contributed the Cray support.
|
||||||
|
|
||||||
|
There are some preprocessor constants that can
|
||||||
|
be defined when compiling for your specific system, for
|
||||||
|
improved efficiency; however, the defaults should be okay.
|
||||||
|
|
||||||
|
The general concept of this implementation is to keep
|
||||||
|
track of all alloca-allocated blocks, and reclaim any
|
||||||
|
that are found to be deeper in the stack than the current
|
||||||
|
invocation. This heuristic does not reclaim storage as
|
||||||
|
soon as it becomes invalid, but it will do so eventually.
|
||||||
|
|
||||||
|
As a special case, alloca(0) reclaims storage without
|
||||||
|
allocating any. It is a good idea to use alloca(0) in
|
||||||
|
your main control loop, etc. to force garbage collection. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <alloca.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifdef emacs
|
||||||
|
# include "lisp.h"
|
||||||
|
# include "blockinput.h"
|
||||||
|
# ifdef EMACS_FREE
|
||||||
|
# undef free
|
||||||
|
# define free EMACS_FREE
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define memory_full() abort ()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* If compiling with GCC 2, this file's not needed. */
|
||||||
|
#if !defined (__GNUC__) || __GNUC__ < 2
|
||||||
|
|
||||||
|
/* If someone has defined alloca as a macro,
|
||||||
|
there must be some other way alloca is supposed to work. */
|
||||||
|
# ifndef alloca
|
||||||
|
|
||||||
|
# ifdef emacs
|
||||||
|
# ifdef static
|
||||||
|
/* actually, only want this if static is defined as ""
|
||||||
|
-- this is for usg, in which emacs must undefine static
|
||||||
|
in order to make unexec workable
|
||||||
|
*/
|
||||||
|
# ifndef STACK_DIRECTION
|
||||||
|
you
|
||||||
|
lose
|
||||||
|
-- must know STACK_DIRECTION at compile-time
|
||||||
|
/* Using #error here is not wise since this file should work for
|
||||||
|
old and obscure compilers. */
|
||||||
|
# endif /* STACK_DIRECTION undefined */
|
||||||
|
# endif /* static */
|
||||||
|
# endif /* emacs */
|
||||||
|
|
||||||
|
/* If your stack is a linked list of frames, you have to
|
||||||
|
provide an "address metric" ADDRESS_FUNCTION macro. */
|
||||||
|
|
||||||
|
# if defined (CRAY) && defined (CRAY_STACKSEG_END)
|
||||||
|
long i00afunc ();
|
||||||
|
# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
|
||||||
|
# else
|
||||||
|
# define ADDRESS_FUNCTION(arg) &(arg)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Define STACK_DIRECTION if you know the direction of stack
|
||||||
|
growth for your system; otherwise it will be automatically
|
||||||
|
deduced at run-time.
|
||||||
|
|
||||||
|
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||||
|
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||||
|
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||||
|
|
||||||
|
# ifndef STACK_DIRECTION
|
||||||
|
# define STACK_DIRECTION 0 /* Direction unknown. */
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if STACK_DIRECTION != 0
|
||||||
|
|
||||||
|
# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
|
||||||
|
|
||||||
|
# else /* STACK_DIRECTION == 0; need run-time code. */
|
||||||
|
|
||||||
|
static int stack_dir; /* 1 or -1 once known. */
|
||||||
|
# define STACK_DIR stack_dir
|
||||||
|
|
||||||
|
static void
|
||||||
|
find_stack_direction (void)
|
||||||
|
{
|
||||||
|
static char *addr = NULL; /* Address of first `dummy', once known. */
|
||||||
|
auto char dummy; /* To get stack address. */
|
||||||
|
|
||||||
|
if (addr == NULL)
|
||||||
|
{ /* Initial entry. */
|
||||||
|
addr = ADDRESS_FUNCTION (dummy);
|
||||||
|
|
||||||
|
find_stack_direction (); /* Recurse once. */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Second entry. */
|
||||||
|
if (ADDRESS_FUNCTION (dummy) > addr)
|
||||||
|
stack_dir = 1; /* Stack grew upward. */
|
||||||
|
else
|
||||||
|
stack_dir = -1; /* Stack grew downward. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endif /* STACK_DIRECTION == 0 */
|
||||||
|
|
||||||
|
/* An "alloca header" is used to:
|
||||||
|
(a) chain together all alloca'ed blocks;
|
||||||
|
(b) keep track of stack depth.
|
||||||
|
|
||||||
|
It is very important that sizeof(header) agree with malloc
|
||||||
|
alignment chunk size. The following default should work okay. */
|
||||||
|
|
||||||
|
# ifndef ALIGN_SIZE
|
||||||
|
# define ALIGN_SIZE sizeof(double)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
typedef union hdr
|
||||||
|
{
|
||||||
|
char align[ALIGN_SIZE]; /* To force sizeof(header). */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
union hdr *next; /* For chaining headers. */
|
||||||
|
char *deep; /* For stack depth measure. */
|
||||||
|
} h;
|
||||||
|
} header;
|
||||||
|
|
||||||
|
static header *last_alloca_header = NULL; /* -> last alloca header. */
|
||||||
|
|
||||||
|
/* Return a pointer to at least SIZE bytes of storage,
|
||||||
|
which will be automatically reclaimed upon exit from
|
||||||
|
the procedure that called alloca. Originally, this space
|
||||||
|
was supposed to be taken from the current stack frame of the
|
||||||
|
caller, but that method cannot be made to work for some
|
||||||
|
implementations of C, for example under Gould's UTX/32. */
|
||||||
|
|
||||||
|
void *
|
||||||
|
alloca (size_t size)
|
||||||
|
{
|
||||||
|
auto char probe; /* Probes stack depth: */
|
||||||
|
register char *depth = ADDRESS_FUNCTION (probe);
|
||||||
|
|
||||||
|
# if STACK_DIRECTION == 0
|
||||||
|
if (STACK_DIR == 0) /* Unknown growth direction. */
|
||||||
|
find_stack_direction ();
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Reclaim garbage, defined as all alloca'd storage that
|
||||||
|
was allocated from deeper in the stack than currently. */
|
||||||
|
|
||||||
|
{
|
||||||
|
register header *hp; /* Traverses linked list. */
|
||||||
|
|
||||||
|
# ifdef emacs
|
||||||
|
BLOCK_INPUT;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
for (hp = last_alloca_header; hp != NULL;)
|
||||||
|
if ((STACK_DIR > 0 && hp->h.deep > depth)
|
||||||
|
|| (STACK_DIR < 0 && hp->h.deep < depth))
|
||||||
|
{
|
||||||
|
register header *np = hp->h.next;
|
||||||
|
|
||||||
|
free (hp); /* Collect garbage. */
|
||||||
|
|
||||||
|
hp = np; /* -> next header. */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break; /* Rest are not deeper. */
|
||||||
|
|
||||||
|
last_alloca_header = hp; /* -> last valid storage. */
|
||||||
|
|
||||||
|
# ifdef emacs
|
||||||
|
UNBLOCK_INPUT;
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == 0)
|
||||||
|
return NULL; /* No allocation required. */
|
||||||
|
|
||||||
|
/* Allocate combined header + user data storage. */
|
||||||
|
|
||||||
|
{
|
||||||
|
/* Address of header. */
|
||||||
|
register header *new;
|
||||||
|
|
||||||
|
size_t combined_size = sizeof (header) + size;
|
||||||
|
if (combined_size < sizeof (header))
|
||||||
|
memory_full ();
|
||||||
|
|
||||||
|
new = malloc (combined_size);
|
||||||
|
|
||||||
|
if (! new)
|
||||||
|
memory_full ();
|
||||||
|
|
||||||
|
new->h.next = last_alloca_header;
|
||||||
|
new->h.deep = depth;
|
||||||
|
|
||||||
|
last_alloca_header = new;
|
||||||
|
|
||||||
|
/* User storage begins just after header. */
|
||||||
|
|
||||||
|
return (void *) (new + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# if defined (CRAY) && defined (CRAY_STACKSEG_END)
|
||||||
|
|
||||||
|
# ifdef DEBUG_I00AFUNC
|
||||||
|
# include <stdio.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifndef CRAY_STACK
|
||||||
|
# define CRAY_STACK
|
||||||
|
# ifndef CRAY2
|
||||||
|
/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
|
||||||
|
struct stack_control_header
|
||||||
|
{
|
||||||
|
long shgrow:32; /* Number of times stack has grown. */
|
||||||
|
long shaseg:32; /* Size of increments to stack. */
|
||||||
|
long shhwm:32; /* High water mark of stack. */
|
||||||
|
long shsize:32; /* Current size of stack (all segments). */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The stack segment linkage control information occurs at
|
||||||
|
the high-address end of a stack segment. (The stack
|
||||||
|
grows from low addresses to high addresses.) The initial
|
||||||
|
part of the stack segment linkage control information is
|
||||||
|
0200 (octal) words. This provides for register storage
|
||||||
|
for the routine which overflows the stack. */
|
||||||
|
|
||||||
|
struct stack_segment_linkage
|
||||||
|
{
|
||||||
|
long ss[0200]; /* 0200 overflow words. */
|
||||||
|
long sssize:32; /* Number of words in this segment. */
|
||||||
|
long ssbase:32; /* Offset to stack base. */
|
||||||
|
long:32;
|
||||||
|
long sspseg:32; /* Offset to linkage control of previous
|
||||||
|
segment of stack. */
|
||||||
|
long:32;
|
||||||
|
long sstcpt:32; /* Pointer to task common address block. */
|
||||||
|
long sscsnm; /* Private control structure number for
|
||||||
|
microtasking. */
|
||||||
|
long ssusr1; /* Reserved for user. */
|
||||||
|
long ssusr2; /* Reserved for user. */
|
||||||
|
long sstpid; /* Process ID for pid based multi-tasking. */
|
||||||
|
long ssgvup; /* Pointer to multitasking thread giveup. */
|
||||||
|
long sscray[7]; /* Reserved for Cray Research. */
|
||||||
|
long ssa0;
|
||||||
|
long ssa1;
|
||||||
|
long ssa2;
|
||||||
|
long ssa3;
|
||||||
|
long ssa4;
|
||||||
|
long ssa5;
|
||||||
|
long ssa6;
|
||||||
|
long ssa7;
|
||||||
|
long sss0;
|
||||||
|
long sss1;
|
||||||
|
long sss2;
|
||||||
|
long sss3;
|
||||||
|
long sss4;
|
||||||
|
long sss5;
|
||||||
|
long sss6;
|
||||||
|
long sss7;
|
||||||
|
};
|
||||||
|
|
||||||
|
# else /* CRAY2 */
|
||||||
|
/* The following structure defines the vector of words
|
||||||
|
returned by the STKSTAT library routine. */
|
||||||
|
struct stk_stat
|
||||||
|
{
|
||||||
|
long now; /* Current total stack size. */
|
||||||
|
long maxc; /* Amount of contiguous space which would
|
||||||
|
be required to satisfy the maximum
|
||||||
|
stack demand to date. */
|
||||||
|
long high_water; /* Stack high-water mark. */
|
||||||
|
long overflows; /* Number of stack overflow ($STKOFEN) calls. */
|
||||||
|
long hits; /* Number of internal buffer hits. */
|
||||||
|
long extends; /* Number of block extensions. */
|
||||||
|
long stko_mallocs; /* Block allocations by $STKOFEN. */
|
||||||
|
long underflows; /* Number of stack underflow calls ($STKRETN). */
|
||||||
|
long stko_free; /* Number of deallocations by $STKRETN. */
|
||||||
|
long stkm_free; /* Number of deallocations by $STKMRET. */
|
||||||
|
long segments; /* Current number of stack segments. */
|
||||||
|
long maxs; /* Maximum number of stack segments so far. */
|
||||||
|
long pad_size; /* Stack pad size. */
|
||||||
|
long current_address; /* Current stack segment address. */
|
||||||
|
long current_size; /* Current stack segment size. This
|
||||||
|
number is actually corrupted by STKSTAT to
|
||||||
|
include the fifteen word trailer area. */
|
||||||
|
long initial_address; /* Address of initial segment. */
|
||||||
|
long initial_size; /* Size of initial segment. */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The following structure describes the data structure which trails
|
||||||
|
any stack segment. I think that the description in 'asdef' is
|
||||||
|
out of date. I only describe the parts that I am sure about. */
|
||||||
|
|
||||||
|
struct stk_trailer
|
||||||
|
{
|
||||||
|
long this_address; /* Address of this block. */
|
||||||
|
long this_size; /* Size of this block (does not include
|
||||||
|
this trailer). */
|
||||||
|
long unknown2;
|
||||||
|
long unknown3;
|
||||||
|
long link; /* Address of trailer block of previous
|
||||||
|
segment. */
|
||||||
|
long unknown5;
|
||||||
|
long unknown6;
|
||||||
|
long unknown7;
|
||||||
|
long unknown8;
|
||||||
|
long unknown9;
|
||||||
|
long unknown10;
|
||||||
|
long unknown11;
|
||||||
|
long unknown12;
|
||||||
|
long unknown13;
|
||||||
|
long unknown14;
|
||||||
|
};
|
||||||
|
|
||||||
|
# endif /* CRAY2 */
|
||||||
|
# endif /* not CRAY_STACK */
|
||||||
|
|
||||||
|
# ifdef CRAY2
|
||||||
|
/* Determine a "stack measure" for an arbitrary ADDRESS.
|
||||||
|
I doubt that "lint" will like this much. */
|
||||||
|
|
||||||
|
static long
|
||||||
|
i00afunc (long *address)
|
||||||
|
{
|
||||||
|
struct stk_stat status;
|
||||||
|
struct stk_trailer *trailer;
|
||||||
|
long *block, size;
|
||||||
|
long result = 0;
|
||||||
|
|
||||||
|
/* We want to iterate through all of the segments. The first
|
||||||
|
step is to get the stack status structure. We could do this
|
||||||
|
more quickly and more directly, perhaps, by referencing the
|
||||||
|
$LM00 common block, but I know that this works. */
|
||||||
|
|
||||||
|
STKSTAT (&status);
|
||||||
|
|
||||||
|
/* Set up the iteration. */
|
||||||
|
|
||||||
|
trailer = (struct stk_trailer *) (status.current_address
|
||||||
|
+ status.current_size
|
||||||
|
- 15);
|
||||||
|
|
||||||
|
/* There must be at least one stack segment. Therefore it is
|
||||||
|
a fatal error if "trailer" is null. */
|
||||||
|
|
||||||
|
if (trailer == 0)
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
/* Discard segments that do not contain our argument address. */
|
||||||
|
|
||||||
|
while (trailer != 0)
|
||||||
|
{
|
||||||
|
block = (long *) trailer->this_address;
|
||||||
|
size = trailer->this_size;
|
||||||
|
if (block == 0 || size == 0)
|
||||||
|
abort ();
|
||||||
|
trailer = (struct stk_trailer *) trailer->link;
|
||||||
|
if ((block <= address) && (address < (block + size)))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the result to the offset in this segment and add the sizes
|
||||||
|
of all predecessor segments. */
|
||||||
|
|
||||||
|
result = address - block;
|
||||||
|
|
||||||
|
if (trailer == 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (trailer->this_size <= 0)
|
||||||
|
abort ();
|
||||||
|
result += trailer->this_size;
|
||||||
|
trailer = (struct stk_trailer *) trailer->link;
|
||||||
|
}
|
||||||
|
while (trailer != 0);
|
||||||
|
|
||||||
|
/* We are done. Note that if you present a bogus address (one
|
||||||
|
not in any segment), you will get a different number back, formed
|
||||||
|
from subtracting the address of the first block. This is probably
|
||||||
|
not what you want. */
|
||||||
|
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
# else /* not CRAY2 */
|
||||||
|
/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
|
||||||
|
Determine the number of the cell within the stack,
|
||||||
|
given the address of the cell. The purpose of this
|
||||||
|
routine is to linearize, in some sense, stack addresses
|
||||||
|
for alloca. */
|
||||||
|
|
||||||
|
static long
|
||||||
|
i00afunc (long address)
|
||||||
|
{
|
||||||
|
long stkl = 0;
|
||||||
|
|
||||||
|
long size, pseg, this_segment, stack;
|
||||||
|
long result = 0;
|
||||||
|
|
||||||
|
struct stack_segment_linkage *ssptr;
|
||||||
|
|
||||||
|
/* Register B67 contains the address of the end of the
|
||||||
|
current stack segment. If you (as a subprogram) store
|
||||||
|
your registers on the stack and find that you are past
|
||||||
|
the contents of B67, you have overflowed the segment.
|
||||||
|
|
||||||
|
B67 also points to the stack segment linkage control
|
||||||
|
area, which is what we are really interested in. */
|
||||||
|
|
||||||
|
stkl = CRAY_STACKSEG_END ();
|
||||||
|
ssptr = (struct stack_segment_linkage *) stkl;
|
||||||
|
|
||||||
|
/* If one subtracts 'size' from the end of the segment,
|
||||||
|
one has the address of the first word of the segment.
|
||||||
|
|
||||||
|
If this is not the first segment, 'pseg' will be
|
||||||
|
nonzero. */
|
||||||
|
|
||||||
|
pseg = ssptr->sspseg;
|
||||||
|
size = ssptr->sssize;
|
||||||
|
|
||||||
|
this_segment = stkl - size;
|
||||||
|
|
||||||
|
/* It is possible that calling this routine itself caused
|
||||||
|
a stack overflow. Discard stack segments which do not
|
||||||
|
contain the target address. */
|
||||||
|
|
||||||
|
while (!(this_segment <= address && address <= stkl))
|
||||||
|
{
|
||||||
|
# ifdef DEBUG_I00AFUNC
|
||||||
|
fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
|
||||||
|
# endif
|
||||||
|
if (pseg == 0)
|
||||||
|
break;
|
||||||
|
stkl = stkl - pseg;
|
||||||
|
ssptr = (struct stack_segment_linkage *) stkl;
|
||||||
|
size = ssptr->sssize;
|
||||||
|
pseg = ssptr->sspseg;
|
||||||
|
this_segment = stkl - size;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = address - this_segment;
|
||||||
|
|
||||||
|
/* If you subtract pseg from the current end of the stack,
|
||||||
|
you get the address of the previous stack segment's end.
|
||||||
|
This seems a little convoluted to me, but I'll bet you save
|
||||||
|
a cycle somewhere. */
|
||||||
|
|
||||||
|
while (pseg != 0)
|
||||||
|
{
|
||||||
|
# ifdef DEBUG_I00AFUNC
|
||||||
|
fprintf (stderr, "%011o %011o\n", pseg, size);
|
||||||
|
# endif
|
||||||
|
stkl = stkl - pseg;
|
||||||
|
ssptr = (struct stack_segment_linkage *) stkl;
|
||||||
|
size = ssptr->sssize;
|
||||||
|
pseg = ssptr->sspseg;
|
||||||
|
result += size;
|
||||||
|
}
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
# endif /* not CRAY2 */
|
||||||
|
# endif /* CRAY */
|
||||||
|
|
||||||
|
# endif /* no alloca */
|
||||||
|
#endif /* not GCC version 2 */
|
56
lib/alloca.in.h
Normal file
56
lib/alloca.in.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/* Memory allocation on the stack.
|
||||||
|
|
||||||
|
Copyright (C) 1995, 1999, 2001-2004, 2006-2008 Free Software
|
||||||
|
Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Lesser General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, 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 Lesser 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. */
|
||||||
|
|
||||||
|
/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
|
||||||
|
means there is a real alloca function. */
|
||||||
|
#ifndef _GL_ALLOCA_H
|
||||||
|
#define _GL_ALLOCA_H
|
||||||
|
|
||||||
|
/* alloca (N) returns a pointer to N bytes of memory
|
||||||
|
allocated on the stack, which will last until the function returns.
|
||||||
|
Use of alloca should be avoided:
|
||||||
|
- inside arguments of function calls - undefined behaviour,
|
||||||
|
- in inline functions - the allocation may actually last until the
|
||||||
|
calling function returns,
|
||||||
|
- for huge N (say, N >= 65536) - you never know how large (or small)
|
||||||
|
the stack is, and when the stack cannot fulfill the memory allocation
|
||||||
|
request, the program just crashes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef alloca
|
||||||
|
# ifdef __GNUC__
|
||||||
|
# define alloca __builtin_alloca
|
||||||
|
# elif defined _AIX
|
||||||
|
# define alloca __alloca
|
||||||
|
# elif defined _MSC_VER
|
||||||
|
# include <malloc.h>
|
||||||
|
# define alloca _alloca
|
||||||
|
# elif defined __DECC && defined __VMS
|
||||||
|
# define alloca __ALLOCA
|
||||||
|
# else
|
||||||
|
# include <stddef.h>
|
||||||
|
# ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
# endif
|
||||||
|
void *alloca (size_t);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_ALLOCA_H */
|
42
lib/dummy.c
Normal file
42
lib/dummy.c
Normal file
|
@ -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 Lesser 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 Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser 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
|
63
lib/strcasecmp.c
Normal file
63
lib/strcasecmp.c
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/* Case-insensitive string comparison function.
|
||||||
|
Copyright (C) 1998-1999, 2005-2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser 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. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
|
||||||
|
|
||||||
|
/* Compare 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 does not work with multibyte strings! */
|
||||||
|
|
||||||
|
int
|
||||||
|
strcasecmp (const char *s1, const char *s2)
|
||||||
|
{
|
||||||
|
const unsigned char *p1 = (const unsigned char *) s1;
|
||||||
|
const unsigned char *p2 = (const unsigned char *) s2;
|
||||||
|
unsigned char c1, c2;
|
||||||
|
|
||||||
|
if (p1 == p2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
c1 = TOLOWER (*p1);
|
||||||
|
c2 = TOLOWER (*p2);
|
||||||
|
|
||||||
|
if (c1 == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
++p1;
|
||||||
|
++p2;
|
||||||
|
}
|
||||||
|
while (c1 == c2);
|
||||||
|
|
||||||
|
if (UCHAR_MAX <= INT_MAX)
|
||||||
|
return c1 - c2;
|
||||||
|
else
|
||||||
|
/* On machines where 'char' and 'int' are types of the same size, the
|
||||||
|
difference of two 'unsigned char' values - including the sign bit -
|
||||||
|
doesn't fit in an 'int'. */
|
||||||
|
return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
|
||||||
|
}
|
86
lib/strings.in.h
Normal file
86
lib/strings.in.h
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/* A substitute <strings.h>.
|
||||||
|
|
||||||
|
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 Lesser General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser 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_STRINGS_H
|
||||||
|
|
||||||
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
|
#@INCLUDE_NEXT@ @NEXT_STRINGS_H@
|
||||||
|
|
||||||
|
#ifndef _GL_STRINGS_H
|
||||||
|
#define _GL_STRINGS_H
|
||||||
|
|
||||||
|
|
||||||
|
/* The definition of GL_LINK_WARNING is copied here. */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Compare 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 does not work in multibyte locales. */
|
||||||
|
#if ! @HAVE_STRCASECMP@
|
||||||
|
extern int strcasecmp (char const *s1, char const *s2);
|
||||||
|
#endif
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strcasecmp() does not work with multibyte strings:
|
||||||
|
POSIX says that it operates on "strings", and "string" in POSIX is defined
|
||||||
|
as a sequence of bytes, not of characters. */
|
||||||
|
# undef strcasecmp
|
||||||
|
# define strcasecmp(a,b) \
|
||||||
|
(GL_LINK_WARNING ("strcasecmp cannot work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbscasecmp if you care about " \
|
||||||
|
"internationalization, or use c_strcasecmp (from " \
|
||||||
|
"gnulib module c-strcase) if you want a locale " \
|
||||||
|
"independent function"), \
|
||||||
|
strcasecmp (a, b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Compare no more than N bytes of 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 cannot work correctly in multibyte locales. */
|
||||||
|
#if ! @HAVE_DECL_STRNCASECMP@
|
||||||
|
extern int strncasecmp (char const *s1, char const *s2, size_t n);
|
||||||
|
#endif
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strncasecmp() does not work with multibyte strings:
|
||||||
|
POSIX says that it operates on "strings", and "string" in POSIX is defined
|
||||||
|
as a sequence of bytes, not of characters. */
|
||||||
|
# undef strncasecmp
|
||||||
|
# define strncasecmp(a,b,n) \
|
||||||
|
(GL_LINK_WARNING ("strncasecmp cannot work correctly on character " \
|
||||||
|
"strings in multibyte locales - " \
|
||||||
|
"use mbsncasecmp or mbspcasecmp if you care about " \
|
||||||
|
"internationalization, or use c_strncasecmp (from " \
|
||||||
|
"gnulib module c-strcase) if you want a locale " \
|
||||||
|
"independent function"), \
|
||||||
|
strncasecmp (a, b, n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_STRING_H */
|
||||||
|
#endif /* _GL_STRING_H */
|
63
lib/strncasecmp.c
Normal file
63
lib/strncasecmp.c
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/* strncasecmp.c -- case insensitive string comparator
|
||||||
|
Copyright (C) 1998-1999, 2005-2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser 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. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
|
||||||
|
|
||||||
|
/* Compare no more than N bytes of 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 cannot work correctly in multibyte locales. */
|
||||||
|
|
||||||
|
int
|
||||||
|
strncasecmp (const char *s1, const char *s2, size_t n)
|
||||||
|
{
|
||||||
|
register const unsigned char *p1 = (const unsigned char *) s1;
|
||||||
|
register const unsigned char *p2 = (const unsigned char *) s2;
|
||||||
|
unsigned char c1, c2;
|
||||||
|
|
||||||
|
if (p1 == p2 || n == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
c1 = TOLOWER (*p1);
|
||||||
|
c2 = TOLOWER (*p2);
|
||||||
|
|
||||||
|
if (--n == 0 || c1 == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
++p1;
|
||||||
|
++p2;
|
||||||
|
}
|
||||||
|
while (c1 == c2);
|
||||||
|
|
||||||
|
if (UCHAR_MAX <= INT_MAX)
|
||||||
|
return c1 - c2;
|
||||||
|
else
|
||||||
|
/* On machines where 'char' and 'int' are types of the same size, the
|
||||||
|
difference of two 'unsigned char' values - including the sign bit -
|
||||||
|
doesn't fit in an 'int'. */
|
||||||
|
return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
|
||||||
|
}
|
10
m4/.gitignore
vendored
10
m4/.gitignore
vendored
|
@ -1,10 +0,0 @@
|
||||||
alloca.m4
|
|
||||||
extensions.m4
|
|
||||||
gnulib-common.m4
|
|
||||||
gnulib-tool.m4
|
|
||||||
include_next.m4
|
|
||||||
onceonly_2_57.m4
|
|
||||||
strcase.m4
|
|
||||||
strings_h.m4
|
|
||||||
gnulib-comp.m4
|
|
||||||
onceonly.m4
|
|
46
m4/alloca.m4
Normal file
46
m4/alloca.m4
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
# alloca.m4 serial 8
|
||||||
|
dnl Copyright (C) 2002-2004, 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.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FUNC_ALLOCA],
|
||||||
|
[
|
||||||
|
dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57.
|
||||||
|
AC_REQUIRE([AC_PROG_CPP])
|
||||||
|
AC_REQUIRE([AC_PROG_EGREP])
|
||||||
|
|
||||||
|
AC_REQUIRE([AC_FUNC_ALLOCA])
|
||||||
|
if test $ac_cv_func_alloca_works = no; then
|
||||||
|
gl_PREREQ_ALLOCA
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define an additional variable used in the Makefile substitution.
|
||||||
|
if test $ac_cv_working_alloca_h = yes; then
|
||||||
|
AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [
|
||||||
|
AC_EGREP_CPP([Need own alloca], [
|
||||||
|
#if defined __GNUC__ || defined _AIX || defined _MSC_VER
|
||||||
|
Need own alloca
|
||||||
|
#endif
|
||||||
|
], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no])
|
||||||
|
])
|
||||||
|
if test $gl_cv_rpl_alloca = yes; then
|
||||||
|
dnl OK, alloca can be implemented through a compiler built-in.
|
||||||
|
AC_DEFINE([HAVE_ALLOCA], 1,
|
||||||
|
[Define to 1 if you have 'alloca' after including <alloca.h>,
|
||||||
|
a header that may be supplied by this distribution.])
|
||||||
|
ALLOCA_H=alloca.h
|
||||||
|
else
|
||||||
|
dnl alloca exists as a library function, i.e. it is slow and probably
|
||||||
|
dnl a memory leak. Don't define HAVE_ALLOCA in this case.
|
||||||
|
ALLOCA_H=
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ALLOCA_H=alloca.h
|
||||||
|
fi
|
||||||
|
AC_SUBST([ALLOCA_H])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/alloca.c.
|
||||||
|
# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
|
||||||
|
AC_DEFUN([gl_PREREQ_ALLOCA], [:])
|
82
m4/extensions.m4
Normal file
82
m4/extensions.m4
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
# serial 5 -*- Autoconf -*-
|
||||||
|
# Enable extensions on systems that normally disable them.
|
||||||
|
|
||||||
|
# Copyright (C) 2003, 2006-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.
|
||||||
|
|
||||||
|
# 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])])
|
91
m4/gnulib-common.m4
Normal file
91
m4/gnulib-common.m4
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
# gnulib-common.m4 serial 5
|
||||||
|
dnl Copyright (C) 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.
|
||||||
|
|
||||||
|
# gl_COMMON
|
||||||
|
# is expanded unconditionally through gnulib-tool magic.
|
||||||
|
AC_DEFUN([gl_COMMON], [
|
||||||
|
dnl Use AC_REQUIRE here, so that the code is expanded once only.
|
||||||
|
AC_REQUIRE([gl_COMMON_BODY])
|
||||||
|
])
|
||||||
|
AC_DEFUN([gl_COMMON_BODY], [
|
||||||
|
AH_VERBATIM([isoc99_inline],
|
||||||
|
[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
|
||||||
|
the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
|
||||||
|
earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
|
||||||
|
__APPLE__ && __MACH__ test for MacOS X.
|
||||||
|
__APPLE_CC__ tests for the Apple compiler and its version.
|
||||||
|
__STDC_VERSION__ tests for the C99 mode. */
|
||||||
|
#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
|
||||||
|
# define __GNUC_STDC_INLINE__ 1
|
||||||
|
#endif])
|
||||||
|
])
|
||||||
|
|
||||||
|
# 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[.])
|
||||||
|
])
|
||||||
|
|
||||||
|
# m4_foreach_w
|
||||||
|
# is a backport of autoconf-2.59c's m4_foreach_w.
|
||||||
|
# Remove this macro when we can assume autoconf >= 2.60.
|
||||||
|
m4_ifndef([m4_foreach_w],
|
||||||
|
[m4_define([m4_foreach_w],
|
||||||
|
[m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
|
||||||
|
|
||||||
|
# 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
|
||||||
|
])
|
192
m4/gnulib-comp.m4
Normal file
192
m4/gnulib-comp.m4
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
# DO NOT EDIT! GENERATED AUTOMATICALLY!
|
||||||
|
# Copyright (C) 2002-2008 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.in, 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.in, in the section
|
||||||
|
# "Check for header files, types and library functions".
|
||||||
|
AC_DEFUN([gl_INIT],
|
||||||
|
[
|
||||||
|
AM_CONDITIONAL([GL_COND_LIBTOOL], [true])
|
||||||
|
gl_cond_libtool=true
|
||||||
|
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]))
|
||||||
|
m4_pushdef([gl_LIBSOURCES_LIST], [])
|
||||||
|
m4_pushdef([gl_LIBSOURCES_DIR], [])
|
||||||
|
gl_COMMON
|
||||||
|
gl_source_base='lib'
|
||||||
|
changequote(,)dnl
|
||||||
|
LTALLOCA=`echo "$ALLOCA" | sed 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'`
|
||||||
|
changequote([, ])dnl
|
||||||
|
AC_SUBST([LTALLOCA])
|
||||||
|
gl_FUNC_ALLOCA
|
||||||
|
gl_STRCASE
|
||||||
|
gl_HEADER_STRINGS_H
|
||||||
|
m4_ifval(gl_LIBSOURCES_LIST, [
|
||||||
|
m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
|
||||||
|
for gl_file in ]gl_LIBSOURCES_LIST[ ; do
|
||||||
|
if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
|
||||||
|
echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done])dnl
|
||||||
|
m4_if(m4_sysval, [0], [],
|
||||||
|
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
|
||||||
|
])
|
||||||
|
m4_popdef([gl_LIBSOURCES_DIR])
|
||||||
|
m4_popdef([gl_LIBSOURCES_LIST])
|
||||||
|
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]))
|
||||||
|
m4_pushdef([gltests_LIBSOURCES_LIST], [])
|
||||||
|
m4_pushdef([gltests_LIBSOURCES_DIR], [])
|
||||||
|
gl_COMMON
|
||||||
|
gl_source_base='tests'
|
||||||
|
m4_ifval(gltests_LIBSOURCES_LIST, [
|
||||||
|
m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
|
||||||
|
for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
|
||||||
|
if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
|
||||||
|
echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done])dnl
|
||||||
|
m4_if(m4_sysval, [0], [],
|
||||||
|
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
|
||||||
|
])
|
||||||
|
m4_popdef([gltests_LIBSOURCES_DIR])
|
||||||
|
m4_popdef([gltests_LIBSOURCES_LIST])
|
||||||
|
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])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
])
|
||||||
|
|
||||||
|
# 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 parameterization,
|
||||||
|
# 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_define([gl_LIBSOURCES_DIR], [lib])
|
||||||
|
m4_append([gl_LIBSOURCES_LIST], _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"
|
||||||
|
])
|
||||||
|
|
||||||
|
# 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 parameterization,
|
||||||
|
# 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_define([gltests_LIBSOURCES_DIR], [tests])
|
||||||
|
m4_append([gltests_LIBSOURCES_LIST], _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/alloca.c
|
||||||
|
lib/alloca.in.h
|
||||||
|
lib/dummy.c
|
||||||
|
lib/strcasecmp.c
|
||||||
|
lib/strings.in.h
|
||||||
|
lib/strncasecmp.c
|
||||||
|
m4/alloca.m4
|
||||||
|
m4/extensions.m4
|
||||||
|
m4/gnulib-common.m4
|
||||||
|
m4/include_next.m4
|
||||||
|
m4/strcase.m4
|
||||||
|
m4/strings_h.m4
|
||||||
|
])
|
57
m4/gnulib-tool.m4
Normal file
57
m4/gnulib-tool.m4
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# gnulib-tool.m4 serial 2
|
||||||
|
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_LOCAL_DIR([DIR])
|
||||||
|
AC_DEFUN([gl_LOCAL_DIR], [])
|
||||||
|
|
||||||
|
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_PO_BASE([DIR])
|
||||||
|
AC_DEFUN([gl_PO_BASE], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_DOC_BASE([DIR])
|
||||||
|
AC_DEFUN([gl_DOC_BASE], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_TESTS_BASE([DIR])
|
||||||
|
AC_DEFUN([gl_TESTS_BASE], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_WITH_TESTS
|
||||||
|
AC_DEFUN([gl_WITH_TESTS], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_LIB([LIBNAME])
|
||||||
|
AC_DEFUN([gl_LIB], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_LGPL or gl_LGPL([VERSION])
|
||||||
|
AC_DEFUN([gl_LGPL], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_MAKEFILE_NAME([FILENAME])
|
||||||
|
AC_DEFUN([gl_MAKEFILE_NAME], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_LIBTOOL
|
||||||
|
AC_DEFUN([gl_LIBTOOL], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_MACRO_PREFIX([PREFIX])
|
||||||
|
AC_DEFUN([gl_MACRO_PREFIX], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_PO_DOMAIN([DOMAIN])
|
||||||
|
AC_DEFUN([gl_PO_DOMAIN], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_VC_FILES([BOOLEAN])
|
||||||
|
AC_DEFUN([gl_VC_FILES], [])
|
110
m4/include_next.m4
Normal file
110
m4/include_next.m4
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
# include_next.m4 serial 6
|
||||||
|
dnl Copyright (C) 2006-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 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.
|
||||||
|
# Note: This macro assumes that the header file is not empty after
|
||||||
|
# preprocessing, i.e. it does not only define preprocessor macros but also
|
||||||
|
# provides some type/enum definitions or function/variable declarations.
|
||||||
|
AC_DEFUN([gl_CHECK_NEXT_HEADERS],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_INCLUDE_NEXT])
|
||||||
|
AC_CHECK_HEADERS_ONCE([$1])
|
||||||
|
|
||||||
|
m4_foreach_w([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])])
|
||||||
|
])
|
44
m4/strcase.m4
Normal file
44
m4/strcase.m4
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
# strcase.m4 serial 9
|
||||||
|
dnl Copyright (C) 2002, 2005-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.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STRCASE],
|
||||||
|
[
|
||||||
|
gl_FUNC_STRCASECMP
|
||||||
|
gl_FUNC_STRNCASECMP
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FUNC_STRCASECMP],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
|
||||||
|
AC_REPLACE_FUNCS(strcasecmp)
|
||||||
|
if test $ac_cv_func_strcasecmp = no; then
|
||||||
|
HAVE_STRCASECMP=0
|
||||||
|
gl_PREREQ_STRCASECMP
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FUNC_STRNCASECMP],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
|
||||||
|
AC_REPLACE_FUNCS(strncasecmp)
|
||||||
|
if test $ac_cv_func_strncasecmp = no; then
|
||||||
|
gl_PREREQ_STRNCASECMP
|
||||||
|
fi
|
||||||
|
AC_CHECK_DECLS(strncasecmp)
|
||||||
|
if test $ac_cv_have_decl_strncasecmp = no; then
|
||||||
|
HAVE_DECL_STRNCASECMP=0
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/strcasecmp.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_STRCASECMP], [
|
||||||
|
:
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/strncasecmp.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_STRNCASECMP], [
|
||||||
|
:
|
||||||
|
])
|
33
m4/strings_h.m4
Normal file
33
m4/strings_h.m4
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# Configure a replacement for <string.h>.
|
||||||
|
|
||||||
|
# Copyright (C) 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.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_STRINGS_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_STRINGS_H_BODY])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_STRINGS_H_BODY],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
|
||||||
|
gl_CHECK_NEXT_HEADERS([strings.h])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STRINGS_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||||
|
AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
|
||||||
|
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_STRINGS_H_DEFAULTS],
|
||||||
|
[
|
||||||
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP])
|
||||||
|
HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP])
|
||||||
|
])
|
Loading…
Add table
Add a link
Reference in a new issue