--- /dev/null
+diff -urN popt-for-windows/lib/alloca.c popt-for-windows-gnulib/lib/alloca.c
+--- popt-for-windows/lib/alloca.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/alloca.c 2008-10-25 15:17:05.000000000 +0100
+@@ -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 3 */
+diff -urN popt-for-windows/lib/alloca.in.h popt-for-windows-gnulib/lib/alloca.in.h
+--- popt-for-windows/lib/alloca.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/alloca.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -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 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. */
++
++/* 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 */
+diff -urN popt-for-windows/lib/.cvsignore popt-for-windows-gnulib/lib/.cvsignore
+--- popt-for-windows/lib/.cvsignore 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/.cvsignore 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,25 @@
++.deps
++.dirstamp
++Makefile.am
++alloca.c
++alloca.in.h
++dirent.in.h
++dirfd.c
++dummy.c
++fnmatch.c
++fnmatch.in.h
++fnmatch_loop.c
++getlogin_r.c
++glob-libc.h
++glob.c
++glob.in.h
++malloc.c
++mempcpy.c
++stdbool.in.h
++stdlib.in.h
++strdup.c
++string.in.h
++sys_stat.in.h
++unistd.in.h
++wchar.in.h
++wctype.in.h
+diff -urN popt-for-windows/lib/dirent.in.h popt-for-windows-gnulib/lib/dirent.in.h
+--- popt-for-windows/lib/dirent.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/dirent.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,67 @@
++/* A GNU-like <dirent.h>.
++ Copyright (C) 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 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/>. */
++
++#ifndef _GL_DIRENT_H
++
++#if __GNUC__ >= 3
++@PRAGMA_SYSTEM_HEADER@
++#endif
++
++/* The include_next requires a split double-inclusion guard. */
++#@INCLUDE_NEXT@ @NEXT_DIRENT_H@
++
++#ifndef _GL_DIRENT_H
++#define _GL_DIRENT_H
++
++/* The definition of GL_LINK_WARNING is copied here. */
++
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* Declare overridden functions. */
++
++#if @REPLACE_FCHDIR@
++# define opendir rpl_opendir
++extern DIR * opendir (const char *);
++# define closedir rpl_closedir
++extern int closedir (DIR *);
++#endif
++
++/* Declare GNU extensions. */
++
++#if @GNULIB_DIRFD@
++# if !@HAVE_DECL_DIRFD@ && !defined dirfd
++/* Return the file descriptor associated with the given directory stream,
++ or -1 if none exists. */
++extern int dirfd (DIR const *dir);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef dirfd
++# define dirfd(d) \
++ (GL_LINK_WARNING ("dirfd is unportable - " \
++ "use gnulib module dirfd for portability"), \
++ dirfd (d))
++#endif
++
++#ifdef __cplusplus
++}
++#endif
++
++
++#endif /* _GL_DIRENT_H */
++#endif /* _GL_DIRENT_H */
+diff -urN popt-for-windows/lib/dirfd.c popt-for-windows-gnulib/lib/dirfd.c
+--- popt-for-windows/lib/dirfd.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/dirfd.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,28 @@
++/* dirfd.c -- return the file descriptor associated with an open DIR*
++
++ Copyright (C) 2001, 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 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/>. */
++
++/* Written by Jim Meyering. */
++
++#include <config.h>
++
++#include <dirent.h>
++
++int
++dirfd (DIR const *dir_p)
++{
++ return DIR_TO_FD (dir_p);
++}
+diff -urN popt-for-windows/lib/dummy.c popt-for-windows-gnulib/lib/dummy.c
+--- popt-for-windows/lib/dummy.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/dummy.c 2008-10-25 15:17:05.000000000 +0100
+@@ -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
+diff -urN popt-for-windows/lib/fnmatch.c popt-for-windows-gnulib/lib/fnmatch.c
+--- popt-for-windows/lib/fnmatch.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/fnmatch.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,354 @@
++/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,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. */
++
++#ifndef _LIBC
++# include <config.h>
++#endif
++
++/* Enable GNU extensions in fnmatch.h. */
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
++
++#if ! defined __builtin_expect && __GNUC__ < 3
++# define __builtin_expect(expr, expected) (expr)
++#endif
++
++#include <fnmatch.h>
++
++#include <alloca.h>
++#include <assert.h>
++#include <ctype.h>
++#include <errno.h>
++#include <stddef.h>
++#include <stdbool.h>
++#include <stdlib.h>
++#include <string.h>
++
++#define WIDE_CHAR_SUPPORT \
++ (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \
++ && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY))
++
++/* For platform which support the ISO C amendement 1 functionality we
++ support user defined character classes. */
++#if defined _LIBC || WIDE_CHAR_SUPPORT
++# include <wctype.h>
++# include <wchar.h>
++#endif
++
++/* We need some of the locale data (the collation sequence information)
++ but there is no interface to get this information in general. Therefore
++ we support a correct implementation only in glibc. */
++#ifdef _LIBC
++# include "../locale/localeinfo.h"
++# include "../locale/elem-hash.h"
++# include "../locale/coll-lookup.h"
++# include <shlib-compat.h>
++
++# define CONCAT(a,b) __CONCAT(a,b)
++# define mbsrtowcs __mbsrtowcs
++# define fnmatch __fnmatch
++extern int fnmatch (const char *pattern, const char *string, int flags);
++#endif
++
++#ifndef SIZE_MAX
++# define SIZE_MAX ((size_t) -1)
++#endif
++
++/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */
++#define NO_LEADING_PERIOD(flags) \
++ ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD))
++
++/* Comment out all this code if we are using the GNU C Library, and are not
++ actually compiling the library itself, and have not detected a bug
++ in the library. This code is part of the GNU C
++ Library, but also included in many other GNU distributions. Compiling
++ and linking in this code is a waste when using the GNU C library
++ (especially if it is a shared library). Rather than having every GNU
++ program understand `configure --with-gnu-libc' and omit the object files,
++ it is simpler to just do this in the source for each such file. */
++
++#if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU
++
++
++# if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK))
++# define isblank(c) ((c) == ' ' || (c) == '\t')
++# endif
++
++# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
++
++# if defined _LIBC || WIDE_CHAR_SUPPORT
++/* The GNU C library provides support for user-defined character classes
++ and the functions from ISO C amendement 1. */
++# ifdef CHARCLASS_NAME_MAX
++# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
++# else
++/* This shouldn't happen but some implementation might still have this
++ problem. Use a reasonable default value. */
++# define CHAR_CLASS_MAX_LENGTH 256
++# endif
++
++# ifdef _LIBC
++# define IS_CHAR_CLASS(string) __wctype (string)
++# else
++# define IS_CHAR_CLASS(string) wctype (string)
++# endif
++
++# ifdef _LIBC
++# define ISWCTYPE(WC, WT) __iswctype (WC, WT)
++# else
++# define ISWCTYPE(WC, WT) iswctype (WC, WT)
++# endif
++
++# if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC
++/* In this case we are implementing the multibyte character handling. */
++# define HANDLE_MULTIBYTE 1
++# endif
++
++# else
++# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
++
++# define IS_CHAR_CLASS(string) \
++ (STREQ (string, "alpha") || STREQ (string, "upper") \
++ || STREQ (string, "lower") || STREQ (string, "digit") \
++ || STREQ (string, "alnum") || STREQ (string, "xdigit") \
++ || STREQ (string, "space") || STREQ (string, "print") \
++ || STREQ (string, "punct") || STREQ (string, "graph") \
++ || STREQ (string, "cntrl") || STREQ (string, "blank"))
++# endif
++
++/* Avoid depending on library functions or files
++ whose names are inconsistent. */
++
++/* Global variable. */
++static int posixly_correct;
++
++# ifndef internal_function
++/* Inside GNU libc we mark some function in a special way. In other
++ environments simply ignore the marking. */
++# define internal_function
++# endif
++
++/* Note that this evaluates C many times. */
++# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
++# define CHAR char
++# define UCHAR unsigned char
++# define INT int
++# define FCT internal_fnmatch
++# define EXT ext_match
++# define END end_pattern
++# define L_(CS) CS
++# ifdef _LIBC
++# define BTOWC(C) __btowc (C)
++# else
++# define BTOWC(C) btowc (C)
++# endif
++# define STRLEN(S) strlen (S)
++# define STRCAT(D, S) strcat (D, S)
++# ifdef _LIBC
++# define MEMPCPY(D, S, N) __mempcpy (D, S, N)
++# else
++# if HAVE_MEMPCPY
++# define MEMPCPY(D, S, N) mempcpy (D, S, N)
++# else
++# define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
++# endif
++# endif
++# define MEMCHR(S, C, N) memchr (S, C, N)
++# define STRCOLL(S1, S2) strcoll (S1, S2)
++# include "fnmatch_loop.c"
++
++
++# if HANDLE_MULTIBYTE
++# define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c))
++# define CHAR wchar_t
++# define UCHAR wint_t
++# define INT wint_t
++# define FCT internal_fnwmatch
++# define EXT ext_wmatch
++# define END end_wpattern
++# define L_(CS) L##CS
++# define BTOWC(C) (C)
++# ifdef _LIBC
++# define STRLEN(S) __wcslen (S)
++# define STRCAT(D, S) __wcscat (D, S)
++# define MEMPCPY(D, S, N) __wmempcpy (D, S, N)
++# else
++# define STRLEN(S) wcslen (S)
++# define STRCAT(D, S) wcscat (D, S)
++# if HAVE_WMEMPCPY
++# define MEMPCPY(D, S, N) wmempcpy (D, S, N)
++# else
++# define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N))
++# endif
++# endif
++# define MEMCHR(S, C, N) wmemchr (S, C, N)
++# define STRCOLL(S1, S2) wcscoll (S1, S2)
++# define WIDE_CHAR_VERSION 1
++
++# undef IS_CHAR_CLASS
++/* We have to convert the wide character string in a multibyte string. But
++ we know that the character class names consist of alphanumeric characters
++ from the portable character set, and since the wide character encoding
++ for a member of the portable character set is the same code point as
++ its single-byte encoding, we can use a simplified method to convert the
++ string to a multibyte character string. */
++static wctype_t
++is_char_class (const wchar_t *wcs)
++{
++ char s[CHAR_CLASS_MAX_LENGTH + 1];
++ char *cp = s;
++
++ do
++ {
++ /* Test for a printable character from the portable character set. */
++# ifdef _LIBC
++ if (*wcs < 0x20 || *wcs > 0x7e
++ || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60)
++ return (wctype_t) 0;
++# else
++ switch (*wcs)
++ {
++ case L' ': case L'!': case L'"': case L'#': case L'%':
++ case L'&': case L'\'': case L'(': case L')': case L'*':
++ case L'+': case L',': case L'-': case L'.': case L'/':
++ case L'0': case L'1': case L'2': case L'3': case L'4':
++ case L'5': case L'6': case L'7': case L'8': case L'9':
++ case L':': case L';': case L'<': case L'=': case L'>':
++ case L'?':
++ case L'A': case L'B': case L'C': case L'D': case L'E':
++ case L'F': case L'G': case L'H': case L'I': case L'J':
++ case L'K': case L'L': case L'M': case L'N': case L'O':
++ case L'P': case L'Q': case L'R': case L'S': case L'T':
++ case L'U': case L'V': case L'W': case L'X': case L'Y':
++ case L'Z':
++ case L'[': case L'\\': case L']': case L'^': case L'_':
++ case L'a': case L'b': case L'c': case L'd': case L'e':
++ case L'f': case L'g': case L'h': case L'i': case L'j':
++ case L'k': case L'l': case L'm': case L'n': case L'o':
++ case L'p': case L'q': case L'r': case L's': case L't':
++ case L'u': case L'v': case L'w': case L'x': case L'y':
++ case L'z': case L'{': case L'|': case L'}': case L'~':
++ break;
++ default:
++ return (wctype_t) 0;
++ }
++# endif
++
++ /* Avoid overrunning the buffer. */
++ if (cp == s + CHAR_CLASS_MAX_LENGTH)
++ return (wctype_t) 0;
++
++ *cp++ = (char) *wcs++;
++ }
++ while (*wcs != L'\0');
++
++ *cp = '\0';
++
++# ifdef _LIBC
++ return __wctype (s);
++# else
++ return wctype (s);
++# endif
++}
++# define IS_CHAR_CLASS(string) is_char_class (string)
++
++# include "fnmatch_loop.c"
++# endif
++
++
++int
++fnmatch (const char *pattern, const char *string, int flags)
++{
++# if HANDLE_MULTIBYTE
++# define ALLOCA_LIMIT 2000
++ if (__builtin_expect (MB_CUR_MAX, 1) != 1)
++ {
++ mbstate_t ps;
++ size_t patsize;
++ size_t strsize;
++ size_t totsize;
++ wchar_t *wpattern;
++ wchar_t *wstring;
++ int res;
++
++ /* Calculate the size needed to convert the strings to
++ wide characters. */
++ memset (&ps, '\0', sizeof (ps));
++ patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1;
++ if (__builtin_expect (patsize != 0, 1))
++ {
++ assert (mbsinit (&ps));
++ strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1;
++ if (__builtin_expect (strsize != 0, 1))
++ {
++ assert (mbsinit (&ps));
++ totsize = patsize + strsize;
++ if (__builtin_expect (! (patsize <= totsize
++ && totsize <= SIZE_MAX / sizeof (wchar_t)),
++ 0))
++ {
++ errno = ENOMEM;
++ return -1;
++ }
++
++ /* Allocate room for the wide characters. */
++ if (__builtin_expect (totsize < ALLOCA_LIMIT, 1))
++ wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t));
++ else
++ {
++ wpattern = malloc (totsize * sizeof (wchar_t));
++ if (__builtin_expect (! wpattern, 0))
++ {
++ errno = ENOMEM;
++ return -1;
++ }
++ }
++ wstring = wpattern + patsize;
++
++ /* Convert the strings into wide characters. */
++ mbsrtowcs (wpattern, &pattern, patsize, &ps);
++ assert (mbsinit (&ps));
++ mbsrtowcs (wstring, &string, strsize, &ps);
++
++ res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1,
++ flags & FNM_PERIOD, flags);
++
++ if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0))
++ free (wpattern);
++ return res;
++ }
++ }
++ }
++
++# endif /* HANDLE_MULTIBYTE */
++
++ return internal_fnmatch (pattern, string, string + strlen (string),
++ flags & FNM_PERIOD, flags);
++}
++
++# ifdef _LIBC
++# undef fnmatch
++versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3);
++# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3)
++strong_alias (__fnmatch, __fnmatch_old)
++compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0);
++# endif
++libc_hidden_ver (__fnmatch, fnmatch)
++# endif
++
++#endif /* _LIBC or not __GNU_LIBRARY__. */
+diff -urN popt-for-windows/lib/fnmatch.in.h popt-for-windows-gnulib/lib/fnmatch.in.h
+--- popt-for-windows/lib/fnmatch.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/fnmatch.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,65 @@
++/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
++ 2005, 2007 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. */
++
++#ifndef _FNMATCH_H
++#define _FNMATCH_H 1
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* We #undef these before defining them because some losing systems
++ (HP-UX A.08.07 for example) define these in <unistd.h>. */
++#undef FNM_PATHNAME
++#undef FNM_NOESCAPE
++#undef FNM_PERIOD
++
++/* Bits set in the FLAGS argument to `fnmatch'. */
++#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */
++#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */
++#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */
++
++#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
++# define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */
++# define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */
++# define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */
++# define FNM_EXTMATCH (1 << 5) /* Use ksh-like extended matching. */
++#endif
++
++/* Value returned by `fnmatch' if STRING does not match PATTERN. */
++#define FNM_NOMATCH 1
++
++/* This value is returned if the implementation does not support
++ `fnmatch'. Since this is not the case here it will never be
++ returned but the conformance test suites still require the symbol
++ to be defined. */
++#ifdef _XOPEN_SOURCE
++# define FNM_NOSYS (-1)
++#endif
++
++/* Match NAME against the file name pattern PATTERN,
++ returning zero if it matches, FNM_NOMATCH if not. */
++extern int fnmatch (const char *__pattern, const char *__name,
++ int __flags);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* fnmatch.h */
+diff -urN popt-for-windows/lib/fnmatch_loop.c popt-for-windows-gnulib/lib/fnmatch_loop.c
+--- popt-for-windows/lib/fnmatch_loop.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/fnmatch_loop.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,1210 @@
++/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006
++ 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. */
++
++/* Match STRING against the file name pattern PATTERN, returning zero if
++ it matches, nonzero if not. */
++static int EXT (INT opt, const CHAR *pattern, const CHAR *string,
++ const CHAR *string_end, bool no_leading_period, int flags)
++ internal_function;
++static const CHAR *END (const CHAR *patternp) internal_function;
++
++static int
++internal_function
++FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
++ bool no_leading_period, int flags)
++{
++ register const CHAR *p = pattern, *n = string;
++ register UCHAR c;
++#ifdef _LIBC
++# if WIDE_CHAR_VERSION
++ const char *collseq = (const char *)
++ _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC);
++# else
++ const UCHAR *collseq = (const UCHAR *)
++ _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQMB);
++# endif
++#endif
++
++ while ((c = *p++) != L_('\0'))
++ {
++ bool new_no_leading_period = false;
++ c = FOLD (c);
++
++ switch (c)
++ {
++ case L_('?'):
++ if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
++ {
++ int res;
++
++ res = EXT (c, p, n, string_end, no_leading_period,
++ flags);
++ if (res != -1)
++ return res;
++ }
++
++ if (n == string_end)
++ return FNM_NOMATCH;
++ else if (*n == L_('/') && (flags & FNM_FILE_NAME))
++ return FNM_NOMATCH;
++ else if (*n == L_('.') && no_leading_period)
++ return FNM_NOMATCH;
++ break;
++
++ case L_('\\'):
++ if (!(flags & FNM_NOESCAPE))
++ {
++ c = *p++;
++ if (c == L_('\0'))
++ /* Trailing \ loses. */
++ return FNM_NOMATCH;
++ c = FOLD (c);
++ }
++ if (n == string_end || FOLD ((UCHAR) *n) != c)
++ return FNM_NOMATCH;
++ break;
++
++ case L_('*'):
++ if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
++ {
++ int res;
++
++ res = EXT (c, p, n, string_end, no_leading_period,
++ flags);
++ if (res != -1)
++ return res;
++ }
++
++ if (n != string_end && *n == L_('.') && no_leading_period)
++ return FNM_NOMATCH;
++
++ for (c = *p++; c == L_('?') || c == L_('*'); c = *p++)
++ {
++ if (*p == L_('(') && (flags & FNM_EXTMATCH) != 0)
++ {
++ const CHAR *endp = END (p);
++ if (endp != p)
++ {
++ /* This is a pattern. Skip over it. */
++ p = endp;
++ continue;
++ }
++ }
++
++ if (c == L_('?'))
++ {
++ /* A ? needs to match one character. */
++ if (n == string_end)
++ /* There isn't another character; no match. */
++ return FNM_NOMATCH;
++ else if (*n == L_('/')
++ && __builtin_expect (flags & FNM_FILE_NAME, 0))
++ /* A slash does not match a wildcard under
++ FNM_FILE_NAME. */
++ return FNM_NOMATCH;
++ else
++ /* One character of the string is consumed in matching
++ this ? wildcard, so *??? won't match if there are
++ less than three characters. */
++ ++n;
++ }
++ }
++
++ if (c == L_('\0'))
++ /* The wildcard(s) is/are the last element of the pattern.
++ If the name is a file name and contains another slash
++ this means it cannot match, unless the FNM_LEADING_DIR
++ flag is set. */
++ {
++ int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH;
++
++ if (flags & FNM_FILE_NAME)
++ {
++ if (flags & FNM_LEADING_DIR)
++ result = 0;
++ else
++ {
++ if (MEMCHR (n, L_('/'), string_end - n) == NULL)
++ result = 0;
++ }
++ }
++
++ return result;
++ }
++ else
++ {
++ const CHAR *endp;
++
++ endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'),
++ string_end - n);
++ if (endp == NULL)
++ endp = string_end;
++
++ if (c == L_('[')
++ || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0
++ && (c == L_('@') || c == L_('+') || c == L_('!'))
++ && *p == L_('(')))
++ {
++ int flags2 = ((flags & FNM_FILE_NAME)
++ ? flags : (flags & ~FNM_PERIOD));
++ bool no_leading_period2 = no_leading_period;
++
++ for (--p; n < endp; ++n, no_leading_period2 = false)
++ if (FCT (p, n, string_end, no_leading_period2, flags2)
++ == 0)
++ return 0;
++ }
++ else if (c == L_('/') && (flags & FNM_FILE_NAME))
++ {
++ while (n < string_end && *n != L_('/'))
++ ++n;
++ if (n < string_end && *n == L_('/')
++ && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags)
++ == 0))
++ return 0;
++ }
++ else
++ {
++ int flags2 = ((flags & FNM_FILE_NAME)
++ ? flags : (flags & ~FNM_PERIOD));
++ int no_leading_period2 = no_leading_period;
++
++ if (c == L_('\\') && !(flags & FNM_NOESCAPE))
++ c = *p;
++ c = FOLD (c);
++ for (--p; n < endp; ++n, no_leading_period2 = false)
++ if (FOLD ((UCHAR) *n) == c
++ && (FCT (p, n, string_end, no_leading_period2, flags2)
++ == 0))
++ return 0;
++ }
++ }
++
++ /* If we come here no match is possible with the wildcard. */
++ return FNM_NOMATCH;
++
++ case L_('['):
++ {
++ /* Nonzero if the sense of the character class is inverted. */
++ register bool not;
++ CHAR cold;
++ UCHAR fn;
++
++ if (posixly_correct == 0)
++ posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
++
++ if (n == string_end)
++ return FNM_NOMATCH;
++
++ if (*n == L_('.') && no_leading_period)
++ return FNM_NOMATCH;
++
++ if (*n == L_('/') && (flags & FNM_FILE_NAME))
++ /* `/' cannot be matched. */
++ return FNM_NOMATCH;
++
++ not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^')));
++ if (not)
++ ++p;
++
++ fn = FOLD ((UCHAR) *n);
++
++ c = *p++;
++ for (;;)
++ {
++ if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
++ {
++ if (*p == L_('\0'))
++ return FNM_NOMATCH;
++ c = FOLD ((UCHAR) *p);
++ ++p;
++
++ goto normal_bracket;
++ }
++ else if (c == L_('[') && *p == L_(':'))
++ {
++ /* Leave room for the null. */
++ CHAR str[CHAR_CLASS_MAX_LENGTH + 1];
++ size_t c1 = 0;
++#if defined _LIBC || WIDE_CHAR_SUPPORT
++ wctype_t wt;
++#endif
++ const CHAR *startp = p;
++
++ for (;;)
++ {
++ if (c1 == CHAR_CLASS_MAX_LENGTH)
++ /* The name is too long and therefore the pattern
++ is ill-formed. */
++ return FNM_NOMATCH;
++
++ c = *++p;
++ if (c == L_(':') && p[1] == L_(']'))
++ {
++ p += 2;
++ break;
++ }
++ if (c < L_('a') || c >= L_('z'))
++ {
++ /* This cannot possibly be a character class name.
++ Match it as a normal range. */
++ p = startp;
++ c = L_('[');
++ goto normal_bracket;
++ }
++ str[c1++] = c;
++ }
++ str[c1] = L_('\0');
++
++#if defined _LIBC || WIDE_CHAR_SUPPORT
++ wt = IS_CHAR_CLASS (str);
++ if (wt == 0)
++ /* Invalid character class name. */
++ return FNM_NOMATCH;
++
++# if defined _LIBC && ! WIDE_CHAR_VERSION
++ /* The following code is glibc specific but does
++ there a good job in speeding up the code since
++ we can avoid the btowc() call. */
++ if (_ISCTYPE ((UCHAR) *n, wt))
++ goto matched;
++# else
++ if (ISWCTYPE (BTOWC ((UCHAR) *n), wt))
++ goto matched;
++# endif
++#else
++ if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n))
++ || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n))
++ || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n))
++ || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n))
++ || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n))
++ || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n))
++ || (STREQ (str, L_("lower")) && islower ((UCHAR) *n))
++ || (STREQ (str, L_("print")) && isprint ((UCHAR) *n))
++ || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n))
++ || (STREQ (str, L_("space")) && isspace ((UCHAR) *n))
++ || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n))
++ || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n)))
++ goto matched;
++#endif
++ c = *p++;
++ }
++#ifdef _LIBC
++ else if (c == L_('[') && *p == L_('='))
++ {
++ UCHAR str[1];
++ uint32_t nrules =
++ _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
++ const CHAR *startp = p;
++
++ c = *++p;
++ if (c == L_('\0'))
++ {
++ p = startp;
++ c = L_('[');
++ goto normal_bracket;
++ }
++ str[0] = c;
++
++ c = *++p;
++ if (c != L_('=') || p[1] != L_(']'))
++ {
++ p = startp;
++ c = L_('[');
++ goto normal_bracket;
++ }
++ p += 2;
++
++ if (nrules == 0)
++ {
++ if ((UCHAR) *n == str[0])
++ goto matched;
++ }
++ else
++ {
++ const int32_t *table;
++# if WIDE_CHAR_VERSION
++ const int32_t *weights;
++ const int32_t *extra;
++# else
++ const unsigned char *weights;
++ const unsigned char *extra;
++# endif
++ const int32_t *indirect;
++ int32_t idx;
++ const UCHAR *cp = (const UCHAR *) str;
++
++ /* This #include defines a local function! */
++# if WIDE_CHAR_VERSION
++# include <locale/weightwc.h>
++# else
++# include <locale/weight.h>
++# endif
++
++# if WIDE_CHAR_VERSION
++ table = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC);
++ weights = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC);
++ extra = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC);
++ indirect = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC);
++# else
++ table = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
++ weights = (const unsigned char *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
++ extra = (const unsigned char *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
++ indirect = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
++# endif
++
++ idx = findidx (&cp);
++ if (idx != 0)
++ {
++ /* We found a table entry. Now see whether the
++ character we are currently at has the same
++ equivalance class value. */
++ int len = weights[idx];
++ int32_t idx2;
++ const UCHAR *np = (const UCHAR *) n;
++
++ idx2 = findidx (&np);
++ if (idx2 != 0 && len == weights[idx2])
++ {
++ int cnt = 0;
++
++ while (cnt < len
++ && (weights[idx + 1 + cnt]
++ == weights[idx2 + 1 + cnt]))
++ ++cnt;
++
++ if (cnt == len)
++ goto matched;
++ }
++ }
++ }
++
++ c = *p++;
++ }
++#endif
++ else if (c == L_('\0'))
++ /* [ (unterminated) loses. */
++ return FNM_NOMATCH;
++ else
++ {
++ bool is_range = false;
++
++#ifdef _LIBC
++ bool is_seqval = false;
++
++ if (c == L_('[') && *p == L_('.'))
++ {
++ uint32_t nrules =
++ _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
++ const CHAR *startp = p;
++ size_t c1 = 0;
++
++ while (1)
++ {
++ c = *++p;
++ if (c == L_('.') && p[1] == L_(']'))
++ {
++ p += 2;
++ break;
++ }
++ if (c == '\0')
++ return FNM_NOMATCH;
++ ++c1;
++ }
++
++ /* We have to handling the symbols differently in
++ ranges since then the collation sequence is
++ important. */
++ is_range = *p == L_('-') && p[1] != L_('\0');
++
++ if (nrules == 0)
++ {
++ /* There are no names defined in the collation
++ data. Therefore we only accept the trivial
++ names consisting of the character itself. */
++ if (c1 != 1)
++ return FNM_NOMATCH;
++
++ if (!is_range && *n == startp[1])
++ goto matched;
++
++ cold = startp[1];
++ c = *p++;
++ }
++ else
++ {
++ int32_t table_size;
++ const int32_t *symb_table;
++# ifdef WIDE_CHAR_VERSION
++ char str[c1];
++ size_t strcnt;
++# else
++# define str (startp + 1)
++# endif
++ const unsigned char *extra;
++ int32_t idx;
++ int32_t elem;
++ int32_t second;
++ int32_t hash;
++
++# ifdef WIDE_CHAR_VERSION
++ /* We have to convert the name to a single-byte
++ string. This is possible since the names
++ consist of ASCII characters and the internal
++ representation is UCS4. */
++ for (strcnt = 0; strcnt < c1; ++strcnt)
++ str[strcnt] = startp[1 + strcnt];
++# endif
++
++ table_size =
++ _NL_CURRENT_WORD (LC_COLLATE,
++ _NL_COLLATE_SYMB_HASH_SIZEMB);
++ symb_table = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE,
++ _NL_COLLATE_SYMB_TABLEMB);
++ extra = (const unsigned char *)
++ _NL_CURRENT (LC_COLLATE,
++ _NL_COLLATE_SYMB_EXTRAMB);
++
++ /* Locate the character in the hashing table. */
++ hash = elem_hash (str, c1);
++
++ idx = 0;
++ elem = hash % table_size;
++ if (symb_table[2 * elem] != 0)
++ {
++ second = hash % (table_size - 2) + 1;
++
++ do
++ {
++ /* First compare the hashing value. */
++ if (symb_table[2 * elem] == hash
++ && (c1
++ == extra[symb_table[2 * elem + 1]])
++ && memcmp (str,
++ &extra[symb_table[2 * elem
++ + 1]
++ + 1], c1) == 0)
++ {
++ /* Yep, this is the entry. */
++ idx = symb_table[2 * elem + 1];
++ idx += 1 + extra[idx];
++ break;
++ }
++
++ /* Next entry. */
++ elem += second;
++ }
++ while (symb_table[2 * elem] != 0);
++ }
++
++ if (symb_table[2 * elem] != 0)
++ {
++ /* Compare the byte sequence but only if
++ this is not part of a range. */
++# ifdef WIDE_CHAR_VERSION
++ int32_t *wextra;
++
++ idx += 1 + extra[idx];
++ /* Adjust for the alignment. */
++ idx = (idx + 3) & ~3;
++
++ wextra = (int32_t *) &extra[idx + 4];
++# endif
++
++ if (! is_range)
++ {
++# ifdef WIDE_CHAR_VERSION
++ for (c1 = 0;
++ (int32_t) c1 < wextra[idx];
++ ++c1)
++ if (n[c1] != wextra[1 + c1])
++ break;
++
++ if ((int32_t) c1 == wextra[idx])
++ goto matched;
++# else
++ for (c1 = 0; c1 < extra[idx]; ++c1)
++ if (n[c1] != extra[1 + c1])
++ break;
++
++ if (c1 == extra[idx])
++ goto matched;
++# endif
++ }
++
++ /* Get the collation sequence value. */
++ is_seqval = true;
++# ifdef WIDE_CHAR_VERSION
++ cold = wextra[1 + wextra[idx]];
++# else
++ /* Adjust for the alignment. */
++ idx += 1 + extra[idx];
++ idx = (idx + 3) & ~4;
++ cold = *((int32_t *) &extra[idx]);
++# endif
++
++ c = *p++;
++ }
++ else if (c1 == 1)
++ {
++ /* No valid character. Match it as a
++ single byte. */
++ if (!is_range && *n == str[0])
++ goto matched;
++
++ cold = str[0];
++ c = *p++;
++ }
++ else
++ return FNM_NOMATCH;
++ }
++ }
++ else
++# undef str
++#endif
++ {
++ c = FOLD (c);
++ normal_bracket:
++
++ /* We have to handling the symbols differently in
++ ranges since then the collation sequence is
++ important. */
++ is_range = (*p == L_('-') && p[1] != L_('\0')
++ && p[1] != L_(']'));
++
++ if (!is_range && c == fn)
++ goto matched;
++
++#if _LIBC
++ /* This is needed if we goto normal_bracket; from
++ outside of is_seqval's scope. */
++ is_seqval = false;
++#endif
++
++ cold = c;
++ c = *p++;
++ }
++
++ if (c == L_('-') && *p != L_(']'))
++ {
++#if _LIBC
++ /* We have to find the collation sequence
++ value for C. Collation sequence is nothing
++ we can regularly access. The sequence
++ value is defined by the order in which the
++ definitions of the collation values for the
++ various characters appear in the source
++ file. A strange concept, nowhere
++ documented. */
++ uint32_t fcollseq;
++ uint32_t lcollseq;
++ UCHAR cend = *p++;
++
++# ifdef WIDE_CHAR_VERSION
++ /* Search in the `names' array for the characters. */
++ fcollseq = __collseq_table_lookup (collseq, fn);
++ if (fcollseq == ~((uint32_t) 0))
++ /* XXX We don't know anything about the character
++ we are supposed to match. This means we are
++ failing. */
++ goto range_not_matched;
++
++ if (is_seqval)
++ lcollseq = cold;
++ else
++ lcollseq = __collseq_table_lookup (collseq, cold);
++# else
++ fcollseq = collseq[fn];
++ lcollseq = is_seqval ? cold : collseq[(UCHAR) cold];
++# endif
++
++ is_seqval = false;
++ if (cend == L_('[') && *p == L_('.'))
++ {
++ uint32_t nrules =
++ _NL_CURRENT_WORD (LC_COLLATE,
++ _NL_COLLATE_NRULES);
++ const CHAR *startp = p;
++ size_t c1 = 0;
++
++ while (1)
++ {
++ c = *++p;
++ if (c == L_('.') && p[1] == L_(']'))
++ {
++ p += 2;
++ break;
++ }
++ if (c == '\0')
++ return FNM_NOMATCH;
++ ++c1;
++ }
++
++ if (nrules == 0)
++ {
++ /* There are no names defined in the
++ collation data. Therefore we only
++ accept the trivial names consisting
++ of the character itself. */
++ if (c1 != 1)
++ return FNM_NOMATCH;
++
++ cend = startp[1];
++ }
++ else
++ {
++ int32_t table_size;
++ const int32_t *symb_table;
++# ifdef WIDE_CHAR_VERSION
++ char str[c1];
++ size_t strcnt;
++# else
++# define str (startp + 1)
++# endif
++ const unsigned char *extra;
++ int32_t idx;
++ int32_t elem;
++ int32_t second;
++ int32_t hash;
++
++# ifdef WIDE_CHAR_VERSION
++ /* We have to convert the name to a single-byte
++ string. This is possible since the names
++ consist of ASCII characters and the internal
++ representation is UCS4. */
++ for (strcnt = 0; strcnt < c1; ++strcnt)
++ str[strcnt] = startp[1 + strcnt];
++# endif
++
++ table_size =
++ _NL_CURRENT_WORD (LC_COLLATE,
++ _NL_COLLATE_SYMB_HASH_SIZEMB);
++ symb_table = (const int32_t *)
++ _NL_CURRENT (LC_COLLATE,
++ _NL_COLLATE_SYMB_TABLEMB);
++ extra = (const unsigned char *)
++ _NL_CURRENT (LC_COLLATE,
++ _NL_COLLATE_SYMB_EXTRAMB);
++
++ /* Locate the character in the hashing
++ table. */
++ hash = elem_hash (str, c1);
++
++ idx = 0;
++ elem = hash % table_size;
++ if (symb_table[2 * elem] != 0)
++ {
++ second = hash % (table_size - 2) + 1;
++
++ do
++ {
++ /* First compare the hashing value. */
++ if (symb_table[2 * elem] == hash
++ && (c1
++ == extra[symb_table[2 * elem + 1]])
++ && memcmp (str,
++ &extra[symb_table[2 * elem + 1]
++ + 1], c1) == 0)
++ {
++ /* Yep, this is the entry. */
++ idx = symb_table[2 * elem + 1];
++ idx += 1 + extra[idx];
++ break;
++ }
++
++ /* Next entry. */
++ elem += second;
++ }
++ while (symb_table[2 * elem] != 0);
++ }
++
++ if (symb_table[2 * elem] != 0)
++ {
++ /* Compare the byte sequence but only if
++ this is not part of a range. */
++# ifdef WIDE_CHAR_VERSION
++ int32_t *wextra;
++
++ idx += 1 + extra[idx];
++ /* Adjust for the alignment. */
++ idx = (idx + 3) & ~4;
++
++ wextra = (int32_t *) &extra[idx + 4];
++# endif
++ /* Get the collation sequence value. */
++ is_seqval = true;
++# ifdef WIDE_CHAR_VERSION
++ cend = wextra[1 + wextra[idx]];
++# else
++ /* Adjust for the alignment. */
++ idx += 1 + extra[idx];
++ idx = (idx + 3) & ~4;
++ cend = *((int32_t *) &extra[idx]);
++# endif
++ }
++ else if (symb_table[2 * elem] != 0 && c1 == 1)
++ {
++ cend = str[0];
++ c = *p++;
++ }
++ else
++ return FNM_NOMATCH;
++ }
++# undef str
++ }
++ else
++ {
++ if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
++ cend = *p++;
++ if (cend == L_('\0'))
++ return FNM_NOMATCH;
++ cend = FOLD (cend);
++ }
++
++ /* XXX It is not entirely clear to me how to handle
++ characters which are not mentioned in the
++ collation specification. */
++ if (
++# ifdef WIDE_CHAR_VERSION
++ lcollseq == 0xffffffff ||
++# endif
++ lcollseq <= fcollseq)
++ {
++ /* We have to look at the upper bound. */
++ uint32_t hcollseq;
++
++ if (is_seqval)
++ hcollseq = cend;
++ else
++ {
++# ifdef WIDE_CHAR_VERSION
++ hcollseq =
++ __collseq_table_lookup (collseq, cend);
++ if (hcollseq == ~((uint32_t) 0))
++ {
++ /* Hum, no information about the upper
++ bound. The matching succeeds if the
++ lower bound is matched exactly. */
++ if (lcollseq != fcollseq)
++ goto range_not_matched;
++
++ goto matched;
++ }
++# else
++ hcollseq = collseq[cend];
++# endif
++ }
++
++ if (lcollseq <= hcollseq && fcollseq <= hcollseq)
++ goto matched;
++ }
++# ifdef WIDE_CHAR_VERSION
++ range_not_matched:
++# endif
++#else
++ /* We use a boring value comparison of the character
++ values. This is better than comparing using
++ `strcoll' since the latter would have surprising
++ and sometimes fatal consequences. */
++ UCHAR cend = *p++;
++
++ if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
++ cend = *p++;
++ if (cend == L_('\0'))
++ return FNM_NOMATCH;
++
++ /* It is a range. */
++ if (cold <= fn && fn <= cend)
++ goto matched;
++#endif
++
++ c = *p++;
++ }
++ }
++
++ if (c == L_(']'))
++ break;
++ }
++
++ if (!not)
++ return FNM_NOMATCH;
++ break;
++
++ matched:
++ /* Skip the rest of the [...] that already matched. */
++ do
++ {
++ ignore_next:
++ c = *p++;
++
++ if (c == L_('\0'))
++ /* [... (unterminated) loses. */
++ return FNM_NOMATCH;
++
++ if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
++ {
++ if (*p == L_('\0'))
++ return FNM_NOMATCH;
++ /* XXX 1003.2d11 is unclear if this is right. */
++ ++p;
++ }
++ else if (c == L_('[') && *p == L_(':'))
++ {
++ int c1 = 0;
++ const CHAR *startp = p;
++
++ while (1)
++ {
++ c = *++p;
++ if (++c1 == CHAR_CLASS_MAX_LENGTH)
++ return FNM_NOMATCH;
++
++ if (*p == L_(':') && p[1] == L_(']'))
++ break;
++
++ if (c < L_('a') || c >= L_('z'))
++ {
++ p = startp;
++ goto ignore_next;
++ }
++ }
++ p += 2;
++ c = *p++;
++ }
++ else if (c == L_('[') && *p == L_('='))
++ {
++ c = *++p;
++ if (c == L_('\0'))
++ return FNM_NOMATCH;
++ c = *++p;
++ if (c != L_('=') || p[1] != L_(']'))
++ return FNM_NOMATCH;
++ p += 2;
++ c = *p++;
++ }
++ else if (c == L_('[') && *p == L_('.'))
++ {
++ ++p;
++ while (1)
++ {
++ c = *++p;
++ if (c == '\0')
++ return FNM_NOMATCH;
++
++ if (*p == L_('.') && p[1] == L_(']'))
++ break;
++ }
++ p += 2;
++ c = *p++;
++ }
++ }
++ while (c != L_(']'));
++ if (not)
++ return FNM_NOMATCH;
++ }
++ break;
++
++ case L_('+'):
++ case L_('@'):
++ case L_('!'):
++ if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
++ {
++ int res;
++
++ res = EXT (c, p, n, string_end, no_leading_period, flags);
++ if (res != -1)
++ return res;
++ }
++ goto normal_match;
++
++ case L_('/'):
++ if (NO_LEADING_PERIOD (flags))
++ {
++ if (n == string_end || c != (UCHAR) *n)
++ return FNM_NOMATCH;
++
++ new_no_leading_period = true;
++ break;
++ }
++ /* FALLTHROUGH */
++ default:
++ normal_match:
++ if (n == string_end || c != FOLD ((UCHAR) *n))
++ return FNM_NOMATCH;
++ }
++
++ no_leading_period = new_no_leading_period;
++ ++n;
++ }
++
++ if (n == string_end)
++ return 0;
++
++ if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L_('/'))
++ /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */
++ return 0;
++
++ return FNM_NOMATCH;
++}
++
++
++static const CHAR *
++internal_function
++END (const CHAR *pattern)
++{
++ const CHAR *p = pattern;
++
++ while (1)
++ if (*++p == L_('\0'))
++ /* This is an invalid pattern. */
++ return pattern;
++ else if (*p == L_('['))
++ {
++ /* Handle brackets special. */
++ if (posixly_correct == 0)
++ posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
++
++ /* Skip the not sign. We have to recognize it because of a possibly
++ following ']'. */
++ if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
++ ++p;
++ /* A leading ']' is recognized as such. */
++ if (*p == L_(']'))
++ ++p;
++ /* Skip over all characters of the list. */
++ while (*p != L_(']'))
++ if (*p++ == L_('\0'))
++ /* This is no valid pattern. */
++ return pattern;
++ }
++ else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
++ || *p == L_('!')) && p[1] == L_('('))
++ p = END (p + 1);
++ else if (*p == L_(')'))
++ break;
++
++ return p + 1;
++}
++
++
++static int
++internal_function
++EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
++ bool no_leading_period, int flags)
++{
++ const CHAR *startp;
++ size_t level;
++ struct patternlist
++ {
++ struct patternlist *next;
++ CHAR str[1];
++ } *list = NULL;
++ struct patternlist **lastp = &list;
++ size_t pattern_len = STRLEN (pattern);
++ const CHAR *p;
++ const CHAR *rs;
++ enum { ALLOCA_LIMIT = 8000 };
++
++ /* Parse the pattern. Store the individual parts in the list. */
++ level = 0;
++ for (startp = p = pattern + 1; ; ++p)
++ if (*p == L_('\0'))
++ /* This is an invalid pattern. */
++ return -1;
++ else if (*p == L_('['))
++ {
++ /* Handle brackets special. */
++ if (posixly_correct == 0)
++ posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
++
++ /* Skip the not sign. We have to recognize it because of a possibly
++ following ']'. */
++ if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
++ ++p;
++ /* A leading ']' is recognized as such. */
++ if (*p == L_(']'))
++ ++p;
++ /* Skip over all characters of the list. */
++ while (*p != L_(']'))
++ if (*p++ == L_('\0'))
++ /* This is no valid pattern. */
++ return -1;
++ }
++ else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
++ || *p == L_('!')) && p[1] == L_('('))
++ /* Remember the nesting level. */
++ ++level;
++ else if (*p == L_(')'))
++ {
++ if (level-- == 0)
++ {
++ /* This means we found the end of the pattern. */
++#define NEW_PATTERN \
++ struct patternlist *newp; \
++ size_t plen; \
++ size_t plensize; \
++ size_t newpsize; \
++ \
++ plen = (opt == L_('?') || opt == L_('@') \
++ ? pattern_len \
++ : p - startp + 1); \
++ plensize = plen * sizeof (CHAR); \
++ newpsize = offsetof (struct patternlist, str) + plensize; \
++ if ((size_t) -1 / sizeof (CHAR) < plen \
++ || newpsize < offsetof (struct patternlist, str) \
++ || ALLOCA_LIMIT <= newpsize) \
++ return -1; \
++ newp = (struct patternlist *) alloca (newpsize); \
++ *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0'); \
++ newp->next = NULL; \
++ *lastp = newp; \
++ lastp = &newp->next
++ NEW_PATTERN;
++ break;
++ }
++ }
++ else if (*p == L_('|'))
++ {
++ if (level == 0)
++ {
++ NEW_PATTERN;
++ startp = p + 1;
++ }
++ }
++ assert (list != NULL);
++ assert (p[-1] == L_(')'));
++#undef NEW_PATTERN
++
++ switch (opt)
++ {
++ case L_('*'):
++ if (FCT (p, string, string_end, no_leading_period, flags) == 0)
++ return 0;
++ /* FALLTHROUGH */
++
++ case L_('+'):
++ do
++ {
++ for (rs = string; rs <= string_end; ++rs)
++ /* First match the prefix with the current pattern with the
++ current pattern. */
++ if (FCT (list->str, string, rs, no_leading_period,
++ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0
++ /* This was successful. Now match the rest with the rest
++ of the pattern. */
++ && (FCT (p, rs, string_end,
++ rs == string
++ ? no_leading_period
++ : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
++ flags & FNM_FILE_NAME
++ ? flags : flags & ~FNM_PERIOD) == 0
++ /* This didn't work. Try the whole pattern. */
++ || (rs != string
++ && FCT (pattern - 1, rs, string_end,
++ rs == string
++ ? no_leading_period
++ : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
++ flags & FNM_FILE_NAME
++ ? flags : flags & ~FNM_PERIOD) == 0)))
++ /* It worked. Signal success. */
++ return 0;
++ }
++ while ((list = list->next) != NULL);
++
++ /* None of the patterns lead to a match. */
++ return FNM_NOMATCH;
++
++ case L_('?'):
++ if (FCT (p, string, string_end, no_leading_period, flags) == 0)
++ return 0;
++ /* FALLTHROUGH */
++
++ case L_('@'):
++ do
++ /* I cannot believe it but `strcat' is actually acceptable
++ here. Match the entire string with the prefix from the
++ pattern list and the rest of the pattern following the
++ pattern list. */
++ if (FCT (STRCAT (list->str, p), string, string_end,
++ no_leading_period,
++ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
++ /* It worked. Signal success. */
++ return 0;
++ while ((list = list->next) != NULL);
++
++ /* None of the patterns lead to a match. */
++ return FNM_NOMATCH;
++
++ case L_('!'):
++ for (rs = string; rs <= string_end; ++rs)
++ {
++ struct patternlist *runp;
++
++ for (runp = list; runp != NULL; runp = runp->next)
++ if (FCT (runp->str, string, rs, no_leading_period,
++ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
++ break;
++
++ /* If none of the patterns matched see whether the rest does. */
++ if (runp == NULL
++ && (FCT (p, rs, string_end,
++ rs == string
++ ? no_leading_period
++ : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
++ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD)
++ == 0))
++ /* This is successful. */
++ return 0;
++ }
++
++ /* None of the patterns together with the rest of the pattern
++ lead to a match. */
++ return FNM_NOMATCH;
++
++ default:
++ assert (! "Invalid extended matching operator");
++ break;
++ }
++
++ return -1;
++}
++
++
++#undef FOLD
++#undef CHAR
++#undef UCHAR
++#undef INT
++#undef FCT
++#undef EXT
++#undef END
++#undef MEMPCPY
++#undef MEMCHR
++#undef STRCOLL
++#undef STRLEN
++#undef STRCAT
++#undef L_
++#undef BTOWC
+diff -urN popt-for-windows/lib/getlogin_r.c popt-for-windows-gnulib/lib/getlogin_r.c
+--- popt-for-windows/lib/getlogin_r.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/getlogin_r.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,56 @@
++/* Provide a working getlogin_r for systems which lack it.
++
++ Copyright (C) 2005, 2006, 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 Paul Eggert and Derek Price */
++
++#include <config.h>
++
++/* Specification. */
++#include <unistd.h>
++
++#include <errno.h>
++#include <string.h>
++
++#if !HAVE_DECL_GETLOGIN
++char *getlogin (void);
++#endif
++
++/* See unistd.in.h for documentation. */
++int
++getlogin_r (char *name, size_t size)
++{
++ char *n;
++ size_t nlen;
++
++ errno = 0;
++ n = getlogin ();
++
++ /* A system function like getlogin_r is never supposed to set errno
++ to zero, so make sure errno is nonzero here. ENOENT is a
++ reasonable errno value if getlogin returns NULL. */
++ if (!errno)
++ errno = ENOENT;
++
++ if (!n)
++ return errno;
++ nlen = strlen (n);
++ if (size <= nlen)
++ return ERANGE;
++ memcpy (name, n, nlen + 1);
++ return 0;
++}
+diff -urN popt-for-windows/lib/glob.c popt-for-windows-gnulib/lib/glob.c
+--- popt-for-windows/lib/glob.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/glob.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,1548 @@
++/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library 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.
++
++ The GNU C Library 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 General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _LIBC
++# include <config.h>
++#endif
++
++#include <glob.h>
++
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <stddef.h>
++
++/* Outcomment the following line for production quality code. */
++/* #define NDEBUG 1 */
++#include <assert.h>
++
++#include <stdbool.h>
++
++#include <stdio.h> /* Needed on stupid SunOS for assert. */
++
++#if !defined _LIBC || !defined GLOB_ONLY_P
++
++#include <unistd.h>
++#if !defined POSIX && defined _POSIX_VERSION
++# define POSIX
++#endif
++
++#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
++# define WINDOWS32
++#endif
++
++#ifndef WINDOWS32
++# include <pwd.h>
++#endif
++
++#include <errno.h>
++#ifndef __set_errno
++# define __set_errno(val) errno = (val)
++#endif
++
++#include <dirent.h>
++
++
++/* In GNU systems, <dirent.h> defines this macro for us. */
++#ifndef _D_EXACT_NAMLEN
++# define _D_EXACT_NAMLEN(dirent) strlen ((dirent)->d_name)
++#endif
++
++/* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available
++ if the `d_type' member for `struct dirent' is available.
++ HAVE_STRUCT_DIRENT_D_TYPE plays the same role in GNULIB. */
++#if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE
++/* True if the directory entry D must be of type T. */
++# define DIRENT_MUST_BE(d, t) ((d)->d_type == (t))
++
++/* True if the directory entry D might be a symbolic link. */
++# define DIRENT_MIGHT_BE_SYMLINK(d) \
++ ((d)->d_type == DT_UNKNOWN || (d)->d_type == DT_LNK)
++
++/* True if the directory entry D might be a directory. */
++# define DIRENT_MIGHT_BE_DIR(d) \
++ ((d)->d_type == DT_DIR || DIRENT_MIGHT_BE_SYMLINK (d))
++
++#else /* !HAVE_D_TYPE */
++# define DIRENT_MUST_BE(d, t) false
++# define DIRENT_MIGHT_BE_SYMLINK(d) true
++# define DIRENT_MIGHT_BE_DIR(d) true
++#endif /* HAVE_D_TYPE */
++
++/* If the system has the `struct dirent64' type we use it internally. */
++#if defined _LIBC && !defined COMPILE_GLOB64
++# if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__
++# define CONVERT_D_INO(d64, d32)
++# else
++# define CONVERT_D_INO(d64, d32) \
++ (d64)->d_ino = (d32)->d_ino;
++# endif
++
++# ifdef _DIRENT_HAVE_D_TYPE
++# define CONVERT_D_TYPE(d64, d32) \
++ (d64)->d_type = (d32)->d_type;
++# else
++# define CONVERT_D_TYPE(d64, d32)
++# endif
++
++# define CONVERT_DIRENT_DIRENT64(d64, d32) \
++ memcpy ((d64)->d_name, (d32)->d_name, _D_EXACT_NAMLEN (d32) + 1); \
++ CONVERT_D_INO (d64, d32) \
++ CONVERT_D_TYPE (d64, d32)
++#endif
++
++
++#if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__
++/* Posix does not require that the d_ino field be present, and some
++ systems do not provide it. */
++# define REAL_DIR_ENTRY(dp) 1
++#else
++# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
++#endif /* POSIX */
++
++#include <stdlib.h>
++#include <string.h>
++
++/* NAME_MAX is usually defined in <dirent.h> or <limits.h>. */
++#include <limits.h>
++#ifndef NAME_MAX
++# define NAME_MAX (sizeof (((struct dirent *) 0)->d_name))
++#endif
++
++#include <alloca.h>
++
++#ifdef _LIBC
++# undef strdup
++# define strdup(str) __strdup (str)
++# define sysconf(id) __sysconf (id)
++# define closedir(dir) __closedir (dir)
++# define opendir(name) __opendir (name)
++# define readdir(str) __readdir64 (str)
++# define getpwnam_r(name, bufp, buf, len, res) \
++ __getpwnam_r (name, bufp, buf, len, res)
++# ifndef __stat64
++# define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
++# endif
++# define struct_stat64 struct stat64
++#else /* !_LIBC */
++# define __stat64(fname, buf) stat (fname, buf)
++# define __fxstatat64(_, d, f, st, flag) fstatat (d, f, st, flag)
++# define struct_stat64 struct stat
++# define __stat(fname, buf) stat (fname, buf)
++# define __alloca alloca
++# define __readdir readdir
++# define __readdir64 readdir64
++# define __glob_pattern_p glob_pattern_p
++#endif /* _LIBC */
++
++#include <fnmatch.h>
++
++#ifdef _SC_GETPW_R_SIZE_MAX
++# define GETPW_R_SIZE_MAX() sysconf (_SC_GETPW_R_SIZE_MAX)
++#else
++# define GETPW_R_SIZE_MAX() (-1)
++#endif
++#ifdef _SC_LOGIN_NAME_MAX
++# define GET_LOGIN_NAME_MAX() sysconf (_SC_LOGIN_NAME_MAX)
++#else
++# define GET_LOGIN_NAME_MAX() (-1)
++#endif
++\f
++static const char *next_brace_sub (const char *begin, int flags) __THROW;
++
++#endif /* !defined _LIBC || !defined GLOB_ONLY_P */
++
++#ifndef attribute_hidden
++# define attribute_hidden
++#endif
++
++#ifndef __attribute_noinline__
++# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1)
++# define __attribute_noinline__ /* Ignore */
++#else
++# define __attribute_noinline__ __attribute__ ((__noinline__))
++# endif
++#endif
++
++#if ! defined __builtin_expect && __GNUC__ < 3
++# define __builtin_expect(expr, expected) (expr)
++#endif
++
++#ifndef _LIBC
++/* The results of opendir() in this file are not used with dirfd and fchdir,
++ therefore save some unnecessary work in fchdir.c. */
++# undef opendir
++# undef closedir
++
++# if HAVE_ALLOCA
++/* The OS usually guarantees only one guard page at the bottom of the stack,
++ and a page size can be as small as 4096 bytes. So we cannot safely
++ allocate anything larger than 4096 bytes. Also care for the possibility
++ of a few compiler-allocated temporary stack slots. */
++# define __libc_use_alloca(n) ((n) < 4032)
++# else
++/* alloca is implemented with malloc, so just use malloc. */
++# define __libc_use_alloca(n) 0
++# endif
++#endif
++
++static int glob_in_dir (const char *pattern, const char *directory,
++ int flags, int (*errfunc) (const char *, int),
++ glob_t *pglob);
++extern int __glob_pattern_type (const char *pattern, int quote)
++ attribute_hidden;
++
++#if !defined _LIBC || !defined GLOB_ONLY_P
++static int prefix_array (const char *prefix, char **array, size_t n) __THROW;
++static int collated_compare (const void *, const void *) __THROW;
++
++
++/* Find the end of the sub-pattern in a brace expression. */
++static const char *
++next_brace_sub (const char *cp, int flags)
++{
++ unsigned int depth = 0;
++ while (*cp != '\0')
++ if ((flags & GLOB_NOESCAPE) == 0 && *cp == '\\')
++ {
++ if (*++cp == '\0')
++ break;
++ ++cp;
++ }
++ else
++ {
++ if ((*cp == '}' && depth-- == 0) || (*cp == ',' && depth == 0))
++ break;
++
++ if (*cp++ == '{')
++ depth++;
++ }
++
++ return *cp != '\0' ? cp : NULL;
++}
++
++#endif /* !defined _LIBC || !defined GLOB_ONLY_P */
++
++/* Do glob searching for PATTERN, placing results in PGLOB.
++ The bits defined above may be set in FLAGS.
++ If a directory cannot be opened or read and ERRFUNC is not nil,
++ it is called with the pathname that caused the error, and the
++ `errno' value from the failing call; if it returns non-zero
++ `glob' returns GLOB_ABORTED; if it returns zero, the error is ignored.
++ If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
++ Otherwise, `glob' returns zero. */
++int
++#ifdef GLOB_ATTRIBUTE
++GLOB_ATTRIBUTE
++#endif
++glob (pattern, flags, errfunc, pglob)
++ const char * restrict pattern;
++ int flags;
++ int (*errfunc) (const char *, int);
++ glob_t * restrict pglob;
++{
++ const char *filename;
++ const char *dirname;
++ size_t dirlen;
++ int status;
++ size_t oldcount;
++ int meta;
++ int dirname_modified;
++ glob_t dirs;
++
++ if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0)
++ {
++ __set_errno (EINVAL);
++ return -1;
++ }
++
++ if (!(flags & GLOB_DOOFFS))
++ /* Have to do this so `globfree' knows where to start freeing. It
++ also makes all the code that uses gl_offs simpler. */
++ pglob->gl_offs = 0;
++
++ if (flags & GLOB_BRACE)
++ {
++ const char *begin;
++
++ if (flags & GLOB_NOESCAPE)
++ begin = strchr (pattern, '{');
++ else
++ {
++ begin = pattern;
++ while (1)
++ {
++ if (*begin == '\0')
++ {
++ begin = NULL;
++ break;
++ }
++
++ if (*begin == '\\' && begin[1] != '\0')
++ ++begin;
++ else if (*begin == '{')
++ break;
++
++ ++begin;
++ }
++ }
++
++ if (begin != NULL)
++ {
++ /* Allocate working buffer large enough for our work. Note that
++ we have at least an opening and closing brace. */
++ size_t firstc;
++ char *alt_start;
++ const char *p;
++ const char *next;
++ const char *rest;
++ size_t rest_len;
++#ifdef __GNUC__
++ char onealt[strlen (pattern) - 1];
++#else
++ char *onealt = malloc (strlen (pattern) - 1);
++ if (onealt == NULL)
++ {
++ if (!(flags & GLOB_APPEND))
++ {
++ pglob->gl_pathc = 0;
++ pglob->gl_pathv = NULL;
++ }
++ return GLOB_NOSPACE;
++ }
++#endif
++
++ /* We know the prefix for all sub-patterns. */
++ alt_start = mempcpy (onealt, pattern, begin - pattern);
++
++ /* Find the first sub-pattern and at the same time find the
++ rest after the closing brace. */
++ next = next_brace_sub (begin + 1, flags);
++ if (next == NULL)
++ {
++ /* It is an invalid expression. */
++#ifndef __GNUC__
++ free (onealt);
++#endif
++ return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob);
++ }
++
++ /* Now find the end of the whole brace expression. */
++ rest = next;
++ while (*rest != '}')
++ {
++ rest = next_brace_sub (rest + 1, flags);
++ if (rest == NULL)
++ {
++ /* It is an invalid expression. */
++#ifndef __GNUC__
++ free (onealt);
++#endif
++ return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob);
++ }
++ }
++ /* Please note that we now can be sure the brace expression
++ is well-formed. */
++ rest_len = strlen (++rest) + 1;
++
++ /* We have a brace expression. BEGIN points to the opening {,
++ NEXT points past the terminator of the first element, and END
++ points past the final }. We will accumulate result names from
++ recursive runs for each brace alternative in the buffer using
++ GLOB_APPEND. */
++
++ if (!(flags & GLOB_APPEND))
++ {
++ /* This call is to set a new vector, so clear out the
++ vector so we can append to it. */
++ pglob->gl_pathc = 0;
++ pglob->gl_pathv = NULL;
++ }
++ firstc = pglob->gl_pathc;
++
++ p = begin + 1;
++ while (1)
++ {
++ int result;
++
++ /* Construct the new glob expression. */
++ mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len);
++
++ result = glob (onealt,
++ ((flags & ~(GLOB_NOCHECK | GLOB_NOMAGIC))
++ | GLOB_APPEND), errfunc, pglob);
++
++ /* If we got an error, return it. */
++ if (result && result != GLOB_NOMATCH)
++ {
++#ifndef __GNUC__
++ free (onealt);
++#endif
++ if (!(flags & GLOB_APPEND))
++ {
++ globfree (pglob);
++ pglob->gl_pathc = 0;
++ }
++ return result;
++ }
++
++ if (*next == '}')
++ /* We saw the last entry. */
++ break;
++
++ p = next + 1;
++ next = next_brace_sub (p, flags);
++ assert (next != NULL);
++ }
++
++#ifndef __GNUC__
++ free (onealt);
++#endif
++
++ if (pglob->gl_pathc != firstc)
++ /* We found some entries. */
++ return 0;
++ else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC)))
++ return GLOB_NOMATCH;
++ }
++ }
++
++ /* Find the filename. */
++ filename = strrchr (pattern, '/');
++#if defined __MSDOS__ || defined WINDOWS32
++ /* The case of "d:pattern". Since `:' is not allowed in
++ file names, we can safely assume that wherever it
++ happens in pattern, it signals the filename part. This
++ is so we could some day support patterns like "[a-z]:foo". */
++ if (filename == NULL)
++ filename = strchr (pattern, ':');
++#endif /* __MSDOS__ || WINDOWS32 */
++ dirname_modified = 0;
++ if (filename == NULL)
++ {
++ /* This can mean two things: a simple name or "~name". The latter
++ case is nothing but a notation for a directory. */
++ if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~')
++ {
++ dirname = pattern;
++ dirlen = strlen (pattern);
++
++ /* Set FILENAME to NULL as a special flag. This is ugly but
++ other solutions would require much more code. We test for
++ this special case below. */
++ filename = NULL;
++ }
++ else
++ {
++ filename = pattern;
++#ifdef _AMIGA
++ dirname = "";
++#else
++ dirname = ".";
++#endif
++ dirlen = 0;
++ }
++ }
++ else if (filename == pattern
++ || (filename == pattern + 1 && pattern[0] == '\\'
++ && (flags & GLOB_NOESCAPE) == 0))
++ {
++ /* "/pattern" or "\\/pattern". */
++ dirname = "/";
++ dirlen = 1;
++ ++filename;
++ }
++ else
++ {
++ char *newp;
++ dirlen = filename - pattern;
++#if defined __MSDOS__ || defined WINDOWS32
++ if (*filename == ':'
++ || (filename > pattern + 1 && filename[-1] == ':'))
++ {
++ char *drive_spec;
++
++ ++dirlen;
++ drive_spec = __alloca (dirlen + 1);
++ *((char *) mempcpy (drive_spec, pattern, dirlen)) = '\0';
++ /* For now, disallow wildcards in the drive spec, to
++ prevent infinite recursion in glob. */
++ if (__glob_pattern_p (drive_spec, !(flags & GLOB_NOESCAPE)))
++ return GLOB_NOMATCH;
++ /* If this is "d:pattern", we need to copy `:' to DIRNAME
++ as well. If it's "d:/pattern", don't remove the slash
++ from "d:/", since "d:" and "d:/" are not the same.*/
++ }
++#endif
++ newp = __alloca (dirlen + 1);
++ *((char *) mempcpy (newp, pattern, dirlen)) = '\0';
++ dirname = newp;
++ ++filename;
++
++ if (filename[0] == '\0'
++#if defined __MSDOS__ || defined WINDOWS32
++ && dirname[dirlen - 1] != ':'
++ && (dirlen < 3 || dirname[dirlen - 2] != ':'
++ || dirname[dirlen - 1] != '/')
++#endif
++ && dirlen > 1)
++ /* "pattern/". Expand "pattern", appending slashes. */
++ {
++ int orig_flags = flags;
++ int val;
++ if (!(flags & GLOB_NOESCAPE) && dirname[dirlen - 1] == '\\')
++ {
++ /* "pattern\\/". Remove the final backslash if it hasn't
++ been quoted. */
++ char *p = (char *) &dirname[dirlen - 1];
++
++ while (p > dirname && p[-1] == '\\') --p;
++ if ((&dirname[dirlen] - p) & 1)
++ {
++ *(char *) &dirname[--dirlen] = '\0';
++ flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC);
++ }
++ }
++ val = glob (dirname, flags | GLOB_MARK, errfunc, pglob);
++ if (val == 0)
++ pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK)
++ | (flags & GLOB_MARK));
++ else if (val == GLOB_NOMATCH && flags != orig_flags)
++ {
++ /* Make sure globfree (&dirs); is a nop. */
++ dirs.gl_pathv = NULL;
++ flags = orig_flags;
++ oldcount = pglob->gl_pathc + pglob->gl_offs;
++ goto no_matches;
++ }
++ return val;
++ }
++ }
++
++ if (!(flags & GLOB_APPEND))
++ {
++ pglob->gl_pathc = 0;
++ if (!(flags & GLOB_DOOFFS))
++ pglob->gl_pathv = NULL;
++ else
++ {
++ size_t i;
++ pglob->gl_pathv = malloc ((pglob->gl_offs + 1) * sizeof (char *));
++ if (pglob->gl_pathv == NULL)
++ return GLOB_NOSPACE;
++
++ for (i = 0; i <= pglob->gl_offs; ++i)
++ pglob->gl_pathv[i] = NULL;
++ }
++ }
++
++ oldcount = pglob->gl_pathc + pglob->gl_offs;
++
++ if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~')
++ {
++ if (dirname[1] == '\0' || dirname[1] == '/'
++ || (!(flags & GLOB_NOESCAPE) && dirname[1] == '\\'
++ && (dirname[2] == '\0' || dirname[2] == '/')))
++ {
++ /* Look up home directory. */
++ const char *home_dir = getenv ("HOME");
++# ifdef _AMIGA
++ if (home_dir == NULL || home_dir[0] == '\0')
++ home_dir = "SYS:";
++# else
++# ifdef WINDOWS32
++ /* Windows NT defines HOMEDRIVE and HOMEPATH. But give preference
++ to HOME, because the user can change HOME. */
++ if (home_dir == NULL || home_dir[0] == '\0')
++ {
++ const char *home_drive = getenv ("HOMEDRIVE");
++ const char *home_path = getenv ("HOMEPATH");
++
++ if (home_drive != NULL && home_path != NULL)
++ {
++ size_t home_drive_len = strlen (home_drive);
++ size_t home_path_len = strlen (home_path);
++ char *mem = alloca (home_drive_len + home_path_len + 1);
++
++ memcpy (mem, home_drive, home_drive_len);
++ memcpy (mem + home_drive_len, home_path, home_path_len + 1);
++ home_dir = mem;
++ }
++ else
++ home_dir = "c:/users/default"; /* poor default */
++ }
++# else
++ if (home_dir == NULL || home_dir[0] == '\0')
++ {
++ int success;
++ char *name;
++ size_t buflen = GET_LOGIN_NAME_MAX () + 1;
++
++ if (buflen == 0)
++ /* `sysconf' does not support _SC_LOGIN_NAME_MAX. Try
++ a moderate value. */
++ buflen = 20;
++ name = __alloca (buflen);
++
++ success = getlogin_r (name, buflen) == 0;
++ if (success)
++ {
++ struct passwd *p;
++# if defined HAVE_GETPWNAM_R || defined _LIBC
++ long int pwbuflen = GETPW_R_SIZE_MAX ();
++ char *pwtmpbuf;
++ struct passwd pwbuf;
++ int save = errno;
++
++# ifndef _LIBC
++ if (pwbuflen == -1)
++ /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX.
++ Try a moderate value. */
++ pwbuflen = 1024;
++# endif
++ pwtmpbuf = __alloca (pwbuflen);
++
++ while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p)
++ != 0)
++ {
++ if (errno != ERANGE)
++ {
++ p = NULL;
++ break;
++ }
++# ifdef _LIBC
++ pwtmpbuf = extend_alloca (pwtmpbuf, pwbuflen,
++ 2 * pwbuflen);
++# else
++ pwbuflen *= 2;
++ pwtmpbuf = __alloca (pwbuflen);
++# endif
++ __set_errno (save);
++ }
++# else
++ p = getpwnam (name);
++# endif
++ if (p != NULL)
++ home_dir = p->pw_dir;
++ }
++ }
++ if (home_dir == NULL || home_dir[0] == '\0')
++ {
++ if (flags & GLOB_TILDE_CHECK)
++ return GLOB_NOMATCH;
++ else
++ home_dir = "~"; /* No luck. */
++ }
++# endif /* WINDOWS32 */
++# endif
++ /* Now construct the full directory. */
++ if (dirname[1] == '\0')
++ {
++ dirname = home_dir;
++ dirlen = strlen (dirname);
++ }
++ else
++ {
++ char *newp;
++ size_t home_len = strlen (home_dir);
++ newp = __alloca (home_len + dirlen);
++ mempcpy (mempcpy (newp, home_dir, home_len),
++ &dirname[1], dirlen);
++ dirname = newp;
++ dirlen += home_len - 1;
++ }
++ dirname_modified = 1;
++ }
++# if !defined _AMIGA && !defined WINDOWS32
++ else
++ {
++ char *end_name = strchr (dirname, '/');
++ const char *user_name;
++ const char *home_dir;
++ char *unescape = NULL;
++
++ if (!(flags & GLOB_NOESCAPE))
++ {
++ if (end_name == NULL)
++ {
++ unescape = strchr (dirname, '\\');
++ if (unescape)
++ end_name = strchr (unescape, '\0');
++ }
++ else
++ unescape = memchr (dirname, '\\', end_name - dirname);
++ }
++ if (end_name == NULL)
++ user_name = dirname + 1;
++ else
++ {
++ char *newp;
++ newp = __alloca (end_name - dirname);
++ *((char *) mempcpy (newp, dirname + 1, end_name - dirname))
++ = '\0';
++ if (unescape != NULL)
++ {
++ char *p = mempcpy (newp, dirname + 1,
++ unescape - dirname - 1);
++ char *q = unescape;
++ while (*q != '\0')
++ {
++ if (*q == '\\')
++ {
++ if (q[1] == '\0')
++ {
++ /* "~fo\\o\\" unescape to user_name "foo\\",
++ but "~fo\\o\\/" unescape to user_name
++ "foo". */
++ if (filename == NULL)
++ *p++ = '\\';
++ break;
++ }
++ ++q;
++ }
++ *p++ = *q++;
++ }
++ *p = '\0';
++ }
++ else
++ *((char *) mempcpy (newp, dirname + 1, end_name - dirname))
++ = '\0';
++ user_name = newp;
++ }
++
++ /* Look up specific user's home directory. */
++ {
++ struct passwd *p;
++# if defined HAVE_GETPWNAM_R || defined _LIBC
++ long int buflen = GETPW_R_SIZE_MAX ();
++ char *pwtmpbuf;
++ struct passwd pwbuf;
++ int save = errno;
++
++# ifndef _LIBC
++ if (buflen == -1)
++ /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a
++ moderate value. */
++ buflen = 1024;
++# endif
++ pwtmpbuf = __alloca (buflen);
++
++ while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0)
++ {
++ if (errno != ERANGE)
++ {
++ p = NULL;
++ break;
++ }
++# ifdef _LIBC
++ pwtmpbuf = extend_alloca (pwtmpbuf, buflen, 2 * buflen);
++# else
++ buflen *= 2;
++ pwtmpbuf = __alloca (buflen);
++# endif
++ __set_errno (save);
++ }
++# else
++ p = getpwnam (user_name);
++# endif
++ if (p != NULL)
++ home_dir = p->pw_dir;
++ else
++ home_dir = NULL;
++ }
++ /* If we found a home directory use this. */
++ if (home_dir != NULL)
++ {
++ char *newp;
++ size_t home_len = strlen (home_dir);
++ size_t rest_len = end_name == NULL ? 0 : strlen (end_name);
++ newp = __alloca (home_len + rest_len + 1);
++ *((char *) mempcpy (mempcpy (newp, home_dir, home_len),
++ end_name, rest_len)) = '\0';
++ dirname = newp;
++ dirlen = home_len + rest_len;
++ dirname_modified = 1;
++ }
++ else
++ if (flags & GLOB_TILDE_CHECK)
++ /* We have to regard it as an error if we cannot find the
++ home directory. */
++ return GLOB_NOMATCH;
++ }
++# endif /* Not Amiga && not WINDOWS32. */
++ }
++
++ /* Now test whether we looked for "~" or "~NAME". In this case we
++ can give the answer now. */
++ if (filename == NULL)
++ {
++ struct stat st;
++ struct_stat64 st64;
++
++ /* Return the directory if we don't check for error or if it exists. */
++ if ((flags & GLOB_NOCHECK)
++ || (((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0))
++ ? ((*pglob->gl_stat) (dirname, &st) == 0
++ && S_ISDIR (st.st_mode))
++ : (__stat64 (dirname, &st64) == 0 && S_ISDIR (st64.st_mode)))))
++ {
++ int newcount = pglob->gl_pathc + pglob->gl_offs;
++ char **new_gl_pathv;
++
++ new_gl_pathv
++ = realloc (pglob->gl_pathv, (newcount + 1 + 1) * sizeof (char *));
++ if (new_gl_pathv == NULL)
++ {
++ nospace:
++ free (pglob->gl_pathv);
++ pglob->gl_pathv = NULL;
++ pglob->gl_pathc = 0;
++ return GLOB_NOSPACE;
++ }
++ pglob->gl_pathv = new_gl_pathv;
++
++ if (flags & GLOB_MARK)
++ {
++ char *p;
++ pglob->gl_pathv[newcount] = malloc (dirlen + 2);
++ if (pglob->gl_pathv[newcount] == NULL)
++ goto nospace;
++ p = mempcpy (pglob->gl_pathv[newcount], dirname, dirlen);
++ p[0] = '/';
++ p[1] = '\0';
++ }
++ else
++ {
++ pglob->gl_pathv[newcount] = strdup (dirname);
++ if (pglob->gl_pathv[newcount] == NULL)
++ goto nospace;
++ }
++ pglob->gl_pathv[++newcount] = NULL;
++ ++pglob->gl_pathc;
++ pglob->gl_flags = flags;
++
++ return 0;
++ }
++
++ /* Not found. */
++ return GLOB_NOMATCH;
++ }
++
++ meta = __glob_pattern_type (dirname, !(flags & GLOB_NOESCAPE));
++ /* meta is 1 if correct glob pattern containing metacharacters.
++ If meta has bit (1 << 2) set, it means there was an unterminated
++ [ which we handle the same, using fnmatch. Broken unterminated
++ pattern bracket expressions ought to be rare enough that it is
++ not worth special casing them, fnmatch will do the right thing. */
++ if (meta & 5)
++ {
++ /* The directory name contains metacharacters, so we
++ have to glob for the directory, and then glob for
++ the pattern in each directory found. */
++ size_t i;
++
++ if (!(flags & GLOB_NOESCAPE) && dirlen > 0 && dirname[dirlen - 1] == '\\')
++ {
++ /* "foo\\/bar". Remove the final backslash from dirname
++ if it has not been quoted. */
++ char *p = (char *) &dirname[dirlen - 1];
++
++ while (p > dirname && p[-1] == '\\') --p;
++ if ((&dirname[dirlen] - p) & 1)
++ *(char *) &dirname[--dirlen] = '\0';
++ }
++
++ if (__builtin_expect ((flags & GLOB_ALTDIRFUNC) != 0, 0))
++ {
++ /* Use the alternative access functions also in the recursive
++ call. */
++ dirs.gl_opendir = pglob->gl_opendir;
++ dirs.gl_readdir = pglob->gl_readdir;
++ dirs.gl_closedir = pglob->gl_closedir;
++ dirs.gl_stat = pglob->gl_stat;
++ dirs.gl_lstat = pglob->gl_lstat;
++ }
++
++ status = glob (dirname,
++ ((flags & (GLOB_ERR | GLOB_NOESCAPE
++ | GLOB_ALTDIRFUNC))
++ | GLOB_NOSORT | GLOB_ONLYDIR),
++ errfunc, &dirs);
++ if (status != 0)
++ {
++ if ((flags & GLOB_NOCHECK) == 0 || status != GLOB_NOMATCH)
++ return status;
++ goto no_matches;
++ }
++
++ /* We have successfully globbed the preceding directory name.
++ For each name we found, call glob_in_dir on it and FILENAME,
++ appending the results to PGLOB. */
++ for (i = 0; i < dirs.gl_pathc; ++i)
++ {
++ int old_pathc;
++
++#ifdef SHELL
++ {
++ /* Make globbing interruptible in the bash shell. */
++ extern int interrupt_state;
++
++ if (interrupt_state)
++ {
++ globfree (&dirs);
++ return GLOB_ABORTED;
++ }
++ }
++#endif /* SHELL. */
++
++ old_pathc = pglob->gl_pathc;
++ status = glob_in_dir (filename, dirs.gl_pathv[i],
++ ((flags | GLOB_APPEND)
++ & ~(GLOB_NOCHECK | GLOB_NOMAGIC)),
++ errfunc, pglob);
++ if (status == GLOB_NOMATCH)
++ /* No matches in this directory. Try the next. */
++ continue;
++
++ if (status != 0)
++ {
++ globfree (&dirs);
++ globfree (pglob);
++ pglob->gl_pathc = 0;
++ return status;
++ }
++
++ /* Stick the directory on the front of each name. */
++ if (prefix_array (dirs.gl_pathv[i],
++ &pglob->gl_pathv[old_pathc + pglob->gl_offs],
++ pglob->gl_pathc - old_pathc))
++ {
++ globfree (&dirs);
++ globfree (pglob);
++ pglob->gl_pathc = 0;
++ return GLOB_NOSPACE;
++ }
++ }
++
++ flags |= GLOB_MAGCHAR;
++
++ /* We have ignored the GLOB_NOCHECK flag in the `glob_in_dir' calls.
++ But if we have not found any matching entry and the GLOB_NOCHECK
++ flag was set we must return the input pattern itself. */
++ if (pglob->gl_pathc + pglob->gl_offs == oldcount)
++ {
++ no_matches:
++ /* No matches. */
++ if (flags & GLOB_NOCHECK)
++ {
++ int newcount = pglob->gl_pathc + pglob->gl_offs;
++ char **new_gl_pathv;
++
++ new_gl_pathv = realloc (pglob->gl_pathv,
++ (newcount + 2) * sizeof (char *));
++ if (new_gl_pathv == NULL)
++ {
++ globfree (&dirs);
++ return GLOB_NOSPACE;
++ }
++ pglob->gl_pathv = new_gl_pathv;
++
++ pglob->gl_pathv[newcount] = strdup (pattern);
++ if (pglob->gl_pathv[newcount] == NULL)
++ {
++ globfree (&dirs);
++ globfree (pglob);
++ pglob->gl_pathc = 0;
++ return GLOB_NOSPACE;
++ }
++
++ ++pglob->gl_pathc;
++ ++newcount;
++
++ pglob->gl_pathv[newcount] = NULL;
++ pglob->gl_flags = flags;
++ }
++ else
++ {
++ globfree (&dirs);
++ return GLOB_NOMATCH;
++ }
++ }
++
++ globfree (&dirs);
++ }
++ else
++ {
++ int old_pathc = pglob->gl_pathc;
++ int orig_flags = flags;
++
++ if (meta & 2)
++ {
++ char *p = strchr (dirname, '\\'), *q;
++ /* We need to unescape the dirname string. It is certainly
++ allocated by alloca, as otherwise filename would be NULL
++ or dirname wouldn't contain backslashes. */
++ q = p;
++ do
++ {
++ if (*p == '\\')
++ {
++ *q = *++p;
++ --dirlen;
++ }
++ else
++ *q = *p;
++ ++q;
++ }
++ while (*p++ != '\0');
++ dirname_modified = 1;
++ }
++ if (dirname_modified)
++ flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC);
++ status = glob_in_dir (filename, dirname, flags, errfunc, pglob);
++ if (status != 0)
++ {
++ if (status == GLOB_NOMATCH && flags != orig_flags
++ && pglob->gl_pathc + pglob->gl_offs == oldcount)
++ {
++ /* Make sure globfree (&dirs); is a nop. */
++ dirs.gl_pathv = NULL;
++ flags = orig_flags;
++ goto no_matches;
++ }
++ return status;
++ }
++
++ if (dirlen > 0)
++ {
++ /* Stick the directory on the front of each name. */
++ if (prefix_array (dirname,
++ &pglob->gl_pathv[old_pathc + pglob->gl_offs],
++ pglob->gl_pathc - old_pathc))
++ {
++ globfree (pglob);
++ pglob->gl_pathc = 0;
++ return GLOB_NOSPACE;
++ }
++ }
++ }
++
++ if (flags & GLOB_MARK)
++ {
++ /* Append slashes to directory names. */
++ size_t i;
++ struct stat st;
++ struct_stat64 st64;
++
++ for (i = oldcount; i < pglob->gl_pathc + pglob->gl_offs; ++i)
++ if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)
++ ? ((*pglob->gl_stat) (pglob->gl_pathv[i], &st) == 0
++ && S_ISDIR (st.st_mode))
++ : (__stat64 (pglob->gl_pathv[i], &st64) == 0
++ && S_ISDIR (st64.st_mode))))
++ {
++ size_t len = strlen (pglob->gl_pathv[i]) + 2;
++ char *new = realloc (pglob->gl_pathv[i], len);
++ if (new == NULL)
++ {
++ globfree (pglob);
++ pglob->gl_pathc = 0;
++ return GLOB_NOSPACE;
++ }
++ strcpy (&new[len - 2], "/");
++ pglob->gl_pathv[i] = new;
++ }
++ }
++
++ if (!(flags & GLOB_NOSORT))
++ {
++ /* Sort the vector. */
++ qsort (&pglob->gl_pathv[oldcount],
++ pglob->gl_pathc + pglob->gl_offs - oldcount,
++ sizeof (char *), collated_compare);
++ }
++
++ return 0;
++}
++#if defined _LIBC && !defined glob
++libc_hidden_def (glob)
++#endif
++
++
++#if !defined _LIBC || !defined GLOB_ONLY_P
++
++/* Free storage allocated in PGLOB by a previous `glob' call. */
++void
++globfree (pglob)
++ register glob_t *pglob;
++{
++ if (pglob->gl_pathv != NULL)
++ {
++ size_t i;
++ for (i = 0; i < pglob->gl_pathc; ++i)
++ if (pglob->gl_pathv[pglob->gl_offs + i] != NULL)
++ free (pglob->gl_pathv[pglob->gl_offs + i]);
++ free (pglob->gl_pathv);
++ pglob->gl_pathv = NULL;
++ }
++}
++#if defined _LIBC && !defined globfree
++libc_hidden_def (globfree)
++#endif
++
++
++/* Do a collated comparison of A and B. */
++static int
++collated_compare (const void *a, const void *b)
++{
++ char *const *ps1 = a; char *s1 = *ps1;
++ char *const *ps2 = b; char *s2 = *ps2;
++
++ if (s1 == s2)
++ return 0;
++ if (s1 == NULL)
++ return 1;
++ if (s2 == NULL)
++ return -1;
++ return strcoll (s1, s2);
++}
++
++
++/* Prepend DIRNAME to each of N members of ARRAY, replacing ARRAY's
++ elements in place. Return nonzero if out of memory, zero if successful.
++ A slash is inserted between DIRNAME and each elt of ARRAY,
++ unless DIRNAME is just "/". Each old element of ARRAY is freed. */
++static int
++prefix_array (const char *dirname, char **array, size_t n)
++{
++ register size_t i;
++ size_t dirlen = strlen (dirname);
++#if defined __MSDOS__ || defined WINDOWS32
++ int sep_char = '/';
++# define DIRSEP_CHAR sep_char
++#else
++# define DIRSEP_CHAR '/'
++#endif
++
++ if (dirlen == 1 && dirname[0] == '/')
++ /* DIRNAME is just "/", so normal prepending would get us "//foo".
++ We want "/foo" instead, so don't prepend any chars from DIRNAME. */
++ dirlen = 0;
++#if defined __MSDOS__ || defined WINDOWS32
++ else if (dirlen > 1)
++ {
++ if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':')
++ /* DIRNAME is "d:/". Don't prepend the slash from DIRNAME. */
++ --dirlen;
++ else if (dirname[dirlen - 1] == ':')
++ {
++ /* DIRNAME is "d:". Use `:' instead of `/'. */
++ --dirlen;
++ sep_char = ':';
++ }
++ }
++#endif
++
++ for (i = 0; i < n; ++i)
++ {
++ size_t eltlen = strlen (array[i]) + 1;
++ char *new = malloc (dirlen + 1 + eltlen);
++ if (new == NULL)
++ {
++ while (i > 0)
++ free (array[--i]);
++ return 1;
++ }
++
++ {
++ char *endp = mempcpy (new, dirname, dirlen);
++ *endp++ = DIRSEP_CHAR;
++ mempcpy (endp, array[i], eltlen);
++ }
++ free (array[i]);
++ array[i] = new;
++ }
++
++ return 0;
++}
++
++
++/* We must not compile this function twice. */
++#if !defined _LIBC || !defined NO_GLOB_PATTERN_P
++int
++__glob_pattern_type (pattern, quote)
++ const char *pattern;
++ int quote;
++{
++ register const char *p;
++ int ret = 0;
++
++ for (p = pattern; *p != '\0'; ++p)
++ switch (*p)
++ {
++ case '?':
++ case '*':
++ return 1;
++
++ case '\\':
++ if (quote)
++ {
++ if (p[1] != '\0')
++ ++p;
++ ret |= 2;
++ }
++ break;
++
++ case '[':
++ ret |= 4;
++ break;
++
++ case ']':
++ if (ret & 4)
++ return 1;
++ break;
++ }
++
++ return ret;
++}
++
++/* Return nonzero if PATTERN contains any metacharacters.
++ Metacharacters can be quoted with backslashes if QUOTE is nonzero. */
++int
++__glob_pattern_p (pattern, quote)
++ const char *pattern;
++ int quote;
++{
++ return __glob_pattern_type (pattern, quote) == 1;
++}
++# ifdef _LIBC
++weak_alias (__glob_pattern_p, glob_pattern_p)
++# endif
++#endif
++
++#endif /* !GLOB_ONLY_P */
++
++
++#if !defined _LIBC || !defined GLOB_ONLY_P
++/* We put this in a separate function mainly to allow the memory
++ allocated with alloca to be recycled. */
++static int
++__attribute_noinline__
++link_exists2_p (const char *dir, size_t dirlen, const char *fname,
++ glob_t *pglob
++# if !defined _LIBC && !HAVE_FSTATAT
++ , int flags
++# endif
++ )
++{
++ size_t fnamelen = strlen (fname);
++ char *fullname = __alloca (dirlen + 1 + fnamelen + 1);
++ struct stat st;
++
++ mempcpy (mempcpy (mempcpy (fullname, dir, dirlen), "/", 1),
++ fname, fnamelen + 1);
++
++# if !defined _LIBC && !HAVE_FSTATAT
++ if (__builtin_expect ((flags & GLOB_ALTDIRFUNC) == 0, 1))
++ {
++ struct_stat64 st64;
++ return __stat64 (fullname, &st64) == 0;
++ }
++# endif
++ return (*pglob->gl_stat) (fullname, &st) == 0;
++}
++
++/* Return true if DIR/FNAME exists. */
++static int
++link_exists_p (int dfd, const char *dir, size_t dirlen, const char *fname,
++ glob_t *pglob, int flags)
++{
++# if defined _LIBC || HAVE_FSTATAT
++ if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0))
++ return link_exists2_p (dir, dirlen, fname, pglob);
++ else
++ {
++ struct_stat64 st64;
++ return __fxstatat64 (_STAT_VER, dfd, fname, &st64, 0) == 0;
++ }
++# else
++ return link_exists2_p (dir, dirlen, fname, pglob, flags);
++# endif
++}
++#endif
++
++
++/* Like `glob', but PATTERN is a final pathname component,
++ and matches are searched for in DIRECTORY.
++ The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done.
++ The GLOB_APPEND flag is assumed to be set (always appends). */
++static int
++glob_in_dir (const char *pattern, const char *directory, int flags,
++ int (*errfunc) (const char *, int),
++ glob_t *pglob)
++{
++ size_t dirlen = strlen (directory);
++ void *stream = NULL;
++ struct globnames
++ {
++ struct globnames *next;
++ size_t count;
++ char *name[64];
++ };
++#define INITIAL_COUNT sizeof (init_names.name) / sizeof (init_names.name[0])
++ struct globnames init_names;
++ struct globnames *names = &init_names;
++ struct globnames *names_alloca = &init_names;
++ size_t nfound = 0;
++ size_t allocasize = sizeof (init_names);
++ size_t cur = 0;
++ int meta;
++ int save;
++ int result;
++
++ init_names.next = NULL;
++ init_names.count = INITIAL_COUNT;
++
++ meta = __glob_pattern_type (pattern, !(flags & GLOB_NOESCAPE));
++ if (meta == 0 && (flags & (GLOB_NOCHECK|GLOB_NOMAGIC)))
++ {
++ /* We need not do any tests. The PATTERN contains no meta
++ characters and we must not return an error therefore the
++ result will always contain exactly one name. */
++ flags |= GLOB_NOCHECK;
++ }
++ else if (meta == 0)
++ {
++ /* Since we use the normal file functions we can also use stat()
++ to verify the file is there. */
++ struct stat st;
++ struct_stat64 st64;
++ size_t patlen = strlen (pattern);
++ char *fullname = __alloca (dirlen + 1 + patlen + 1);
++
++ mempcpy (mempcpy (mempcpy (fullname, directory, dirlen),
++ "/", 1),
++ pattern, patlen + 1);
++ if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)
++ ? (*pglob->gl_stat) (fullname, &st)
++ : __stat64 (fullname, &st64)) == 0)
++ /* We found this file to be existing. Now tell the rest
++ of the function to copy this name into the result. */
++ flags |= GLOB_NOCHECK;
++ }
++ else
++ {
++ stream = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)
++ ? (*pglob->gl_opendir) (directory)
++ : opendir (directory));
++ if (stream == NULL)
++ {
++ if (errno != ENOTDIR
++ && ((errfunc != NULL && (*errfunc) (directory, errno))
++ || (flags & GLOB_ERR)))
++ return GLOB_ABORTED;
++ }
++ else
++ {
++ int dfd = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)
++ ? -1 : dirfd ((DIR *) stream));
++ int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0)
++ | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)
++#if defined _AMIGA || defined VMS
++ | FNM_CASEFOLD
++#endif
++ );
++ flags |= GLOB_MAGCHAR;
++
++ while (1)
++ {
++ const char *name;
++ size_t len;
++#if defined _LIBC && !defined COMPILE_GLOB64
++ struct dirent64 *d;
++ union
++ {
++ struct dirent64 d64;
++ char room [offsetof (struct dirent64, d_name[0])
++ + NAME_MAX + 1];
++ }
++ d64buf;
++
++ if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0))
++ {
++ struct dirent *d32 = (*pglob->gl_readdir) (stream);
++ if (d32 != NULL)
++ {
++ CONVERT_DIRENT_DIRENT64 (&d64buf.d64, d32);
++ d = &d64buf.d64;
++ }
++ else
++ d = NULL;
++ }
++ else
++ d = __readdir64 (stream);
++#else
++ struct dirent *d = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)
++ ? ((struct dirent *)
++ (*pglob->gl_readdir) (stream))
++ : __readdir (stream));
++#endif
++ if (d == NULL)
++ break;
++ if (! REAL_DIR_ENTRY (d))
++ continue;
++
++ /* If we shall match only directories use the information
++ provided by the dirent call if possible. */
++ if ((flags & GLOB_ONLYDIR) && !DIRENT_MIGHT_BE_DIR (d))
++ continue;
++
++ name = d->d_name;
++
++ if (fnmatch (pattern, name, fnm_flags) == 0)
++ {
++ /* If the file we found is a symlink we have to
++ make sure the target file exists. */
++ if (!DIRENT_MIGHT_BE_SYMLINK (d)
++ || link_exists_p (dfd, directory, dirlen, name, pglob,
++ flags))
++ {
++ if (cur == names->count)
++ {
++ struct globnames *newnames;
++ size_t count = names->count * 2;
++ size_t size = (sizeof (struct globnames)
++ + ((count - INITIAL_COUNT)
++ * sizeof (char *)));
++ allocasize += size;
++ if (__libc_use_alloca (allocasize))
++ newnames = names_alloca = __alloca (size);
++ else if ((newnames = malloc (size))
++ == NULL)
++ goto memory_error;
++ newnames->count = count;
++ newnames->next = names;
++ names = newnames;
++ cur = 0;
++ }
++ len = _D_EXACT_NAMLEN (d);
++ names->name[cur] = malloc (len + 1);
++ if (names->name[cur] == NULL)
++ goto memory_error;
++ *((char *) mempcpy (names->name[cur++], name, len))
++ = '\0';
++ ++nfound;
++ }
++ }
++ }
++ }
++ }
++
++ if (nfound == 0 && (flags & GLOB_NOCHECK))
++ {
++ size_t len = strlen (pattern);
++ nfound = 1;
++ names->name[cur] = malloc (len + 1);
++ if (names->name[cur] == NULL)
++ goto memory_error;
++ *((char *) mempcpy (names->name[cur++], pattern, len)) = '\0';
++ }
++
++ result = GLOB_NOMATCH;
++ if (nfound != 0)
++ {
++ char **new_gl_pathv
++ = realloc (pglob->gl_pathv,
++ (pglob->gl_pathc + pglob->gl_offs + nfound + 1)
++ * sizeof (char *));
++ result = 0;
++
++ if (new_gl_pathv == NULL)
++ {
++ memory_error:
++ while (1)
++ {
++ struct globnames *old = names;
++ size_t i;
++ for (i = 0; i < cur; ++i)
++ free (names->name[i]);
++ names = names->next;
++ /* NB: we will not leak memory here if we exit without
++ freeing the current block assigned to OLD. At least
++ the very first block is always allocated on the stack
++ and this is the block assigned to OLD here. */
++ if (names == NULL)
++ {
++ assert (old == &init_names);
++ break;
++ }
++ cur = names->count;
++ if (old == names_alloca)
++ names_alloca = names;
++ else
++ free (old);
++ }
++ result = GLOB_NOSPACE;
++ }
++ else
++ {
++ while (1)
++ {
++ struct globnames *old = names;
++ size_t i;
++ for (i = 0; i < cur; ++i)
++ new_gl_pathv[pglob->gl_offs + pglob->gl_pathc++]
++ = names->name[i];
++ names = names->next;
++ /* NB: we will not leak memory here if we exit without
++ freeing the current block assigned to OLD. At least
++ the very first block is always allocated on the stack
++ and this is the block assigned to OLD here. */
++ if (names == NULL)
++ {
++ assert (old == &init_names);
++ break;
++ }
++ cur = names->count;
++ if (old == names_alloca)
++ names_alloca = names;
++ else
++ free (old);
++ }
++
++ pglob->gl_pathv = new_gl_pathv;
++
++ pglob->gl_pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
++
++ pglob->gl_flags = flags;
++ }
++ }
++
++ if (stream != NULL)
++ {
++ save = errno;
++ if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0))
++ (*pglob->gl_closedir) (stream);
++ else
++ closedir (stream);
++ __set_errno (save);
++ }
++
++ return result;
++}
+diff -urN popt-for-windows/lib/glob.in.h popt-for-windows-gnulib/lib/glob.in.h
+--- popt-for-windows/lib/glob.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/glob.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,60 @@
++/* glob.h -- Find a path matching a pattern.
++
++ Copyright (C) 2005-2007 Free Software Foundation, Inc.
++
++ Written by Derek Price <derek@ximbiot.com> & Paul Eggert <eggert@CS.UCLA.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, 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_GLOB_H
++#define _GL_GLOB_H
++
++#if @HAVE_SYS_CDEFS_H@
++# include <sys/cdefs.h>
++#endif
++
++#include <stddef.h>
++
++/* On some systems, such as AIX 5.1, <sys/stat.h> does a "#define stat stat64".
++ Make sure this definition is seen before glob-libc.h defines types that
++ rely on 'struct stat'. */
++#include <sys/stat.h>
++
++#ifndef __BEGIN_DECLS
++# define __BEGIN_DECLS
++# define __END_DECLS
++#endif
++#ifndef __THROW
++# define __THROW
++#endif
++
++#ifndef __size_t
++# define __size_t size_t
++#endif
++#ifndef __USE_GNU
++# define __USE_GNU 1
++#endif
++
++
++#define glob rpl_glob
++#define globfree rpl_globfree
++#define glob_pattern_p rpl_glob_pattern_p
++
++#define __GLOB_GNULIB 1
++
++/* Now the standard GNU C Library header should work. */
++#include "glob-libc.h"
++
++#endif /* _GL_GLOB_H */
+diff -urN popt-for-windows/lib/glob-libc.h popt-for-windows-gnulib/lib/glob-libc.h
+--- popt-for-windows/lib/glob-libc.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/glob-libc.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,211 @@
++/* Copyright (C) 1991,92,95-98,2000,2001,2004-2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library 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.
++
++ The GNU C Library 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 General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _GLOB_H
++#define _GLOB_H 1
++
++#ifndef __GLOB_GNULIB
++# include <sys/cdefs.h>
++#endif
++
++/* GCC 2.95 and later have "__restrict"; C99 compilers have
++ "restrict", and "configure" may have defined "restrict".
++ Other compilers use __restrict, __restrict__, and _Restrict, and
++ 'configure' might #define 'restrict' to those words, so pick a
++ different name. */
++#ifndef _Restrict_
++# if 199901L <= __STDC_VERSION__
++# define _Restrict_ restrict
++# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
++# define _Restrict_ __restrict
++# else
++# define _Restrict_
++# endif
++#endif
++
++__BEGIN_DECLS
++
++/* We need `size_t' for the following definitions. */
++#ifndef __size_t
++# if defined __GNUC__ && __GNUC__ >= 2
++typedef __SIZE_TYPE__ __size_t;
++# ifdef __USE_XOPEN
++typedef __SIZE_TYPE__ size_t;
++# endif
++# else
++# include <stddef.h>
++# ifndef __size_t
++# define __size_t size_t
++# endif
++# endif
++#else
++/* The GNU CC stddef.h version defines __size_t as empty. We need a real
++ definition. */
++# undef __size_t
++# define __size_t size_t
++#endif
++
++/* Bits set in the FLAGS argument to `glob'. */
++#define GLOB_ERR (1 << 0)/* Return on read errors. */
++#define GLOB_MARK (1 << 1)/* Append a slash to each name. */
++#define GLOB_NOSORT (1 << 2)/* Don't sort the names. */
++#define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */
++#define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */
++#define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */
++#define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */
++#define GLOB_PERIOD (1 << 7)/* Leading `.' can be matched by metachars. */
++
++#if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU
++# define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */
++# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */
++# define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */
++# define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */
++# define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */
++# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */
++# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error
++ if the user name is not available. */
++# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
++ GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \
++ GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \
++ GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
++#else
++# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
++ GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \
++ GLOB_PERIOD)
++#endif
++
++/* Error returns from `glob'. */
++#define GLOB_NOSPACE 1 /* Ran out of memory. */
++#define GLOB_ABORTED 2 /* Read error. */
++#define GLOB_NOMATCH 3 /* No matches found. */
++#define GLOB_NOSYS 4 /* Not implemented. */
++#ifdef __USE_GNU
++/* Previous versions of this file defined GLOB_ABEND instead of
++ GLOB_ABORTED. Provide a compatibility definition here. */
++# define GLOB_ABEND GLOB_ABORTED
++#endif
++
++/* Structure describing a globbing run. */
++#ifdef __USE_GNU
++struct stat;
++#endif
++typedef struct
++ {
++ __size_t gl_pathc; /* Count of paths matched by the pattern. */
++ char **gl_pathv; /* List of matched pathnames. */
++ __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */
++ int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */
++
++ /* If the GLOB_ALTDIRFUNC flag is set, the following functions
++ are used instead of the normal file access functions. */
++ void (*gl_closedir) (void *);
++#ifdef __USE_GNU
++ struct dirent *(*gl_readdir) (void *);
++#else
++ void *(*gl_readdir) (void *);
++#endif
++ void *(*gl_opendir) (const char *);
++#ifdef __USE_GNU
++ int (*gl_lstat) (const char *_Restrict_, struct stat *_Restrict_);
++ int (*gl_stat) (const char *_Restrict_, struct stat *_Restrict_);
++#else
++ int (*gl_lstat) (const char *_Restrict_, void *_Restrict_);
++ int (*gl_stat) (const char *_Restrict_, void *_Restrict_);
++#endif
++ } glob_t;
++
++#if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB
++# ifdef __USE_GNU
++struct stat64;
++# endif
++typedef struct
++ {
++ __size_t gl_pathc;
++ char **gl_pathv;
++ __size_t gl_offs;
++ int gl_flags;
++
++ /* If the GLOB_ALTDIRFUNC flag is set, the following functions
++ are used instead of the normal file access functions. */
++ void (*gl_closedir) (void *);
++# ifdef __USE_GNU
++ struct dirent64 *(*gl_readdir) (void *);
++# else
++ void *(*gl_readdir) (void *);
++# endif
++ void *(*gl_opendir) (const char *);
++# ifdef __USE_GNU
++ int (*gl_lstat) (const char *_Restrict_, struct stat64 *_Restrict_);
++ int (*gl_stat) (const char *_Restrict_, struct stat64 *_Restrict_);
++# else
++ int (*gl_lstat) (const char *_Restrict_, void *_Restrict_);
++ int (*gl_stat) (const char *_Restrict_, void *_Restrict_);
++# endif
++ } glob64_t;
++#endif
++
++#if __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined __GLOB_GNULIB
++# define glob glob64
++# define globfree globfree64
++#endif
++
++/* Do glob searching for PATTERN, placing results in PGLOB.
++ The bits defined above may be set in FLAGS.
++ If a directory cannot be opened or read and ERRFUNC is not nil,
++ it is called with the pathname that caused the error, and the
++ `errno' value from the failing call; if it returns non-zero
++ `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
++ If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
++ Otherwise, `glob' returns zero. */
++#if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 || defined __GLOB_GNULIB
++extern int glob (const char *_Restrict_ __pattern, int __flags,
++ int (*__errfunc) (const char *, int),
++ glob_t *_Restrict_ __pglob) __THROW;
++
++/* Free storage allocated in PGLOB by a previous `glob' call. */
++extern void globfree (glob_t *__pglob) __THROW;
++#else
++extern int __REDIRECT_NTH (glob, (const char *_Restrict_ __pattern,
++ int __flags,
++ int (*__errfunc) (const char *, int),
++ glob_t *_Restrict_ __pglob), glob64);
++
++extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
++#endif
++
++#if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB
++extern int glob64 (const char *_Restrict_ __pattern, int __flags,
++ int (*__errfunc) (const char *, int),
++ glob64_t *_Restrict_ __pglob) __THROW;
++
++extern void globfree64 (glob64_t *__pglob) __THROW;
++#endif
++
++
++#ifdef __USE_GNU
++/* Return nonzero if PATTERN contains any metacharacters.
++ Metacharacters can be quoted with backslashes if QUOTE is nonzero.
++
++ This function is not part of the interface specified by POSIX.2
++ but several programs want to use it. */
++extern int glob_pattern_p (const char *__pattern, int __quote) __THROW;
++#endif
++
++__END_DECLS
++
++#endif /* glob.h */
+diff -urN popt-for-windows/lib/Makefile.am popt-for-windows-gnulib/lib/Makefile.am
+--- popt-for-windows/lib/Makefile.am 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/Makefile.am 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,502 @@
++## 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 --tests-base=tests --aux-dir=. --libtool --macro-prefix=gl glob
++
++AUTOMAKE_OPTIONS = 1.5 gnits
++
++SUBDIRS =
++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 dirent
++
++BUILT_SOURCES += $(DIRENT_H)
++
++# We need the following in order to create <dirent.h> when the system
++# doesn't have one that works with the given compiler.
++dirent.h: dirent.in.h
++ rm -f $@-t $@
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
++ sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
++ -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
++ -e 's|@''GNULIB_DIRFD''@|$(GNULIB_DIRFD)|g' \
++ -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \
++ -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
++ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
++ < $(srcdir)/dirent.in.h; \
++ } > $@-t
++ mv $@-t $@
++MOSTLYCLEANFILES += dirent.h dirent.h-t
++
++EXTRA_DIST += dirent.in.h
++
++## end gnulib module dirent
++
++## begin gnulib module dirfd
++
++
++EXTRA_DIST += dirfd.c
++
++EXTRA_libgnu_la_SOURCES += dirfd.c
++
++## end gnulib module dirfd
++
++## begin gnulib module fnmatch
++
++BUILT_SOURCES += $(FNMATCH_H)
++
++# We need the following in order to create <fnmatch.h> when the system
++# doesn't have one that supports the required API.
++fnmatch.h: fnmatch.in.h
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
++ cat $(srcdir)/fnmatch.in.h; \
++ } > $@-t
++ mv -f $@-t $@
++MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
++
++EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c
++
++EXTRA_libgnu_la_SOURCES += fnmatch.c fnmatch_loop.c
++
++## end gnulib module fnmatch
++
++## begin gnulib module getlogin_r
++
++
++EXTRA_DIST += getlogin_r.c
++
++EXTRA_libgnu_la_SOURCES += getlogin_r.c
++
++## end gnulib module getlogin_r
++
++## begin gnulib module glob
++
++BUILT_SOURCES += $(GLOB_H)
++
++# We need the following in order to create <glob.h> when the system
++# doesn't have one that works with the given compiler.
++glob.h: glob.in.h
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
++ sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
++ < $(srcdir)/glob.in.h; \
++ } > $@-t
++ mv -f $@-t $@
++MOSTLYCLEANFILES += glob.h glob.h-t
++
++EXTRA_DIST += glob-libc.h glob.c glob.in.h
++
++EXTRA_libgnu_la_SOURCES += glob.c
++
++## end gnulib module glob
++
++## begin gnulib module link-warning
++
++LINK_WARNING_H=$(top_srcdir)/./link-warning.h
++
++EXTRA_DIST += $(top_srcdir)/./link-warning.h
++
++## end gnulib module link-warning
++
++## begin gnulib module malloc-posix
++
++
++EXTRA_DIST += malloc.c
++
++EXTRA_libgnu_la_SOURCES += malloc.c
++
++## end gnulib module malloc-posix
++
++## begin gnulib module mempcpy
++
++
++EXTRA_DIST += mempcpy.c
++
++EXTRA_libgnu_la_SOURCES += mempcpy.c
++
++## end gnulib module mempcpy
++
++## begin gnulib module stdbool
++
++BUILT_SOURCES += $(STDBOOL_H)
++
++# We need the following in order to create <stdbool.h> when the system
++# doesn't have one that works.
++stdbool.h: stdbool.in.h
++ rm -f $@-t $@
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
++ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
++ } > $@-t
++ mv $@-t $@
++MOSTLYCLEANFILES += stdbool.h stdbool.h-t
++
++EXTRA_DIST += stdbool.in.h
++
++## end gnulib module stdbool
++
++## begin gnulib module stdlib
++
++BUILT_SOURCES += stdlib.h
++
++# We need the following in order to create <stdlib.h> when the system
++# doesn't have one that works with the given compiler.
++stdlib.h: stdlib.in.h
++ rm -f $@-t $@
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
++ sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
++ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
++ -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
++ -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
++ -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
++ -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
++ -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
++ -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
++ -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
++ -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
++ -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
++ -e 's|@''GNULIB_RAND48''@|$(GNULIB_RAND48)|g' \
++ -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
++ -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
++ -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
++ -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
++ -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
++ -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
++ -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
++ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
++ -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
++ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
++ -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
++ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
++ -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
++ -e 's|@''HAVE_RAND48''@|$(HAVE_RAND48)|g' \
++ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
++ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
++ -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
++ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
++ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
++ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
++ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
++ -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
++ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
++ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
++ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
++ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
++ -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
++ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
++ < $(srcdir)/stdlib.in.h; \
++ } > $@-t
++ mv $@-t $@
++MOSTLYCLEANFILES += stdlib.h stdlib.h-t
++
++EXTRA_DIST += stdlib.in.h
++
++## end gnulib module stdlib
++
++## begin gnulib module strdup
++
++
++EXTRA_DIST += strdup.c
++
++EXTRA_libgnu_la_SOURCES += strdup.c
++
++## end gnulib module strdup
++
++## 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|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|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_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|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|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|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_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|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|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
++ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
++ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
++ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|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 sys_stat
++
++BUILT_SOURCES += $(SYS_STAT_H)
++
++# We need the following in order to create <sys/stat.h> when the system
++# has one that is incomplete.
++sys/stat.h: sys_stat.in.h
++ @MKDIR_P@ sys
++ rm -f $@-t $@
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
++ sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
++ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
++ -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
++ -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
++ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
++ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
++ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
++ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
++ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
++ < $(srcdir)/sys_stat.in.h; \
++ } > $@-t
++ mv $@-t $@
++MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
++MOSTLYCLEANDIRS += sys
++
++EXTRA_DIST += sys_stat.in.h
++
++## end gnulib module sys_stat
++
++## begin gnulib module unistd
++
++BUILT_SOURCES += unistd.h
++
++# We need the following in order to create an empty placeholder for
++# <unistd.h> when the system doesn't have one.
++unistd.h: unistd.in.h
++ rm -f $@-t $@
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
++ sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
++ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
++ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
++ -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
++ -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
++ -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
++ -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
++ -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
++ -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
++ -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
++ -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
++ -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
++ -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
++ -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
++ -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
++ -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
++ -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
++ -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
++ -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
++ -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
++ -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
++ -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
++ -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
++ -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
++ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
++ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
++ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
++ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
++ -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
++ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
++ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
++ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
++ -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
++ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
++ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
++ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
++ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
++ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
++ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
++ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
++ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
++ -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
++ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
++ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
++ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
++ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
++ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
++ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
++ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
++ < $(srcdir)/unistd.in.h; \
++ } > $@-t
++ mv $@-t $@
++MOSTLYCLEANFILES += unistd.h unistd.h-t
++
++EXTRA_DIST += unistd.in.h
++
++## end gnulib module unistd
++
++## 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|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|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_WINT_T''@/$(HAVE_WINT_T)/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 wctype
++
++BUILT_SOURCES += $(WCTYPE_H)
++
++# We need the following in order to create <wctype.h> when the system
++# doesn't have one that works with the given compiler.
++wctype.h: wctype.in.h
++ rm -f $@-t $@
++ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
++ sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
++ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
++ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
++ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
++ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
++ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
++ < $(srcdir)/wctype.in.h; \
++ } > $@-t
++ mv $@-t $@
++MOSTLYCLEANFILES += wctype.h wctype.h-t
++
++EXTRA_DIST += wctype.in.h
++
++## end gnulib module wctype
++
++## 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; \
++ :
+diff -urN popt-for-windows/lib/malloc.c popt-for-windows-gnulib/lib/malloc.c
+--- popt-for-windows/lib/malloc.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/malloc.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,57 @@
++/* malloc() function that is glibc compatible.
++
++ Copyright (C) 1997, 1998, 2006, 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 Jim Meyering and Bruno Haible */
++
++#include <config.h>
++/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */
++#ifdef malloc
++# define NEED_MALLOC_GNU
++# undef malloc
++#endif
++
++/* Specification. */
++#include <stdlib.h>
++
++#include <errno.h>
++
++/* Call the system's malloc below. */
++#undef malloc
++
++/* Allocate an N-byte block of memory from the heap.
++ If N is zero, allocate a 1-byte block. */
++
++void *
++rpl_malloc (size_t n)
++{
++ void *result;
++
++#ifdef NEED_MALLOC_GNU
++ if (n == 0)
++ n = 1;
++#endif
++
++ result = malloc (n);
++
++#if !HAVE_MALLOC_POSIX
++ if (result == NULL)
++ errno = ENOMEM;
++#endif
++
++ return result;
++}
+diff -urN popt-for-windows/lib/mempcpy.c popt-for-windows-gnulib/lib/mempcpy.c
+--- popt-for-windows/lib/mempcpy.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/mempcpy.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,29 @@
++/* Copy memory area and return pointer after last written byte.
++ Copyright (C) 2003, 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. */
++
++#include <config.h>
++
++/* Specification. */
++#include <string.h>
++
++/* Copy N bytes of SRC to DEST, return pointer to bytes after the
++ last written byte. */
++void *
++mempcpy (void *dest, const void *src, size_t n)
++{
++ return (char *) memcpy (dest, src, n) + n;
++}
+diff -urN popt-for-windows/lib/stdbool.in.h popt-for-windows-gnulib/lib/stdbool.in.h
+--- popt-for-windows/lib/stdbool.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/stdbool.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,119 @@
++/* Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc.
++ Written by Bruno Haible <haible@clisp.cons.org>, 2001.
++
++ 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_STDBOOL_H
++#define _GL_STDBOOL_H
++
++/* ISO C 99 <stdbool.h> for platforms that lack it. */
++
++/* Usage suggestions:
++
++ Programs that use <stdbool.h> should be aware of some limitations
++ and standards compliance issues.
++
++ Standards compliance:
++
++ - <stdbool.h> must be #included before 'bool', 'false', 'true'
++ can be used.
++
++ - You cannot assume that sizeof (bool) == 1.
++
++ - Programs should not undefine the macros bool, true, and false,
++ as C99 lists that as an "obsolescent feature".
++
++ Limitations of this substitute, when used in a C89 environment:
++
++ - <stdbool.h> must be #included before the '_Bool' type can be used.
++
++ - You cannot assume that _Bool is a typedef; it might be a macro.
++
++ - Bit-fields of type 'bool' are not supported. Portable code
++ should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
++
++ - In C99, casts and automatic conversions to '_Bool' or 'bool' are
++ performed in such a way that every nonzero value gets converted
++ to 'true', and zero gets converted to 'false'. This doesn't work
++ with this substitute. With this substitute, only the values 0 and 1
++ give the expected result when converted to _Bool' or 'bool'.
++
++ Also, it is suggested that programs use 'bool' rather than '_Bool';
++ this isn't required, but 'bool' is more common. */
++
++
++/* 7.16. Boolean type and values */
++
++/* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same
++ definitions below, but temporarily we have to #undef them. */
++#if defined __BEOS__ && !defined __HAIKU__
++# include <OS.h> /* defines bool but not _Bool */
++# undef false
++# undef true
++#endif
++
++/* For the sake of symbolic names in gdb, we define true and false as
++ enum constants, not only as macros.
++ It is tempting to write
++ typedef enum { false = 0, true = 1 } _Bool;
++ so that gdb prints values of type 'bool' symbolically. But if we do
++ this, values of type '_Bool' may promote to 'int' or 'unsigned int'
++ (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
++ (see ISO C 99 6.3.1.1.(2)). So we add a negative value to the
++ enum; this ensures that '_Bool' promotes to 'int'. */
++#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__)
++ /* A compiler known to have 'bool'. */
++ /* If the compiler already has both 'bool' and '_Bool', we can assume they
++ are the same types. */
++# if !@HAVE__BOOL@
++typedef bool _Bool;
++# endif
++#else
++# if !defined __GNUC__
++ /* If @HAVE__BOOL@:
++ Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
++ the built-in _Bool type is used. See
++ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
++ Similar bugs are likely with other compilers as well; this file
++ wouldn't be used if <stdbool.h> was working.
++ So we override the _Bool type.
++ If !@HAVE__BOOL@:
++ Need to define _Bool ourselves. As 'signed char' or as an enum type?
++ Use of a typedef, with SunPRO C, leads to a stupid
++ "warning: _Bool is a keyword in ISO C99".
++ Use of an enum type, with IRIX cc, leads to a stupid
++ "warning(1185): enumerated type mixed with another type".
++ Even the existence of an enum type, without a typedef,
++ "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
++ The only benefit of the enum, debuggability, is not important
++ with these compilers. So use 'signed char' and no enum. */
++# define _Bool signed char
++# else
++ /* With this compiler, trust the _Bool type if the compiler has it. */
++# if !@HAVE__BOOL@
++typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
++# endif
++# endif
++#endif
++#define bool _Bool
++
++/* The other macros must be usable in preprocessor directives. */
++#define false 0
++#define true 1
++#define __bool_true_false_are_defined 1
++
++#endif /* _GL_STDBOOL_H */
+diff -urN popt-for-windows/lib/stdlib.in.h popt-for-windows-gnulib/lib/stdlib.in.h
+--- popt-for-windows/lib/stdlib.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/stdlib.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,486 @@
++/* A GNU-like <stdlib.h>.
++
++ Copyright (C) 1995, 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 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/>. */
++
++#if __GNUC__ >= 3
++@PRAGMA_SYSTEM_HEADER@
++#endif
++
++#if defined __need_malloc_and_calloc
++/* Special invocation convention inside glibc header files. */
++
++#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
++
++#else
++/* Normal invocation convention. */
++
++#ifndef _GL_STDLIB_H
++
++/* The include_next requires a split double-inclusion guard. */
++#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
++
++#ifndef _GL_STDLIB_H
++#define _GL_STDLIB_H
++
++
++/* Solaris declares getloadavg() in <sys/loadavg.h>. */
++#if @GNULIB_GETLOADAVG@ && @HAVE_SYS_LOADAVG_H@
++# include <sys/loadavg.h>
++#endif
++
++/* The definition of GL_LINK_WARNING is copied here. */
++
++
++/* Some systems do not define EXIT_*, despite otherwise supporting C89. */
++#ifndef EXIT_SUCCESS
++# define EXIT_SUCCESS 0
++#endif
++/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
++ with proper operation of xargs. */
++#ifndef EXIT_FAILURE
++# define EXIT_FAILURE 1
++#elif EXIT_FAILURE != 1
++# undef EXIT_FAILURE
++# define EXIT_FAILURE 1
++#endif
++
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#if @GNULIB_MALLOC_POSIX@
++# if !@HAVE_MALLOC_POSIX@
++# undef malloc
++# define malloc rpl_malloc
++extern void * malloc (size_t size);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef malloc
++# define malloc(s) \
++ (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \
++ "use gnulib module malloc-posix for portability"), \
++ malloc (s))
++#endif
++
++
++#if @GNULIB_REALLOC_POSIX@
++# if !@HAVE_REALLOC_POSIX@
++# undef realloc
++# define realloc rpl_realloc
++extern void * realloc (void *ptr, size_t size);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef realloc
++# define realloc(p,s) \
++ (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \
++ "use gnulib module realloc-posix for portability"), \
++ realloc (p, s))
++#endif
++
++
++#if @GNULIB_CALLOC_POSIX@
++# if !@HAVE_CALLOC_POSIX@
++# undef calloc
++# define calloc rpl_calloc
++extern void * calloc (size_t nmemb, size_t size);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef calloc
++# define calloc(n,s) \
++ (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \
++ "use gnulib module calloc-posix for portability"), \
++ calloc (n, s))
++#endif
++
++
++#if @GNULIB_ATOLL@
++# if !@HAVE_ATOLL@
++/* Parse a signed decimal integer.
++ Returns the value of the integer. Errors are not detected. */
++extern long long atoll (const char *string);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef atoll
++# define atoll(s) \
++ (GL_LINK_WARNING ("atoll is unportable - " \
++ "use gnulib module atoll for portability"), \
++ atoll (s))
++#endif
++
++
++#if @GNULIB_GETLOADAVG@
++# if !@HAVE_DECL_GETLOADAVG@
++/* Store max(NELEM,3) load average numbers in LOADAVG[].
++ The three numbers are the load average of the last 1 minute, the last 5
++ minutes, and the last 15 minutes, respectively.
++ LOADAVG is an array of NELEM numbers. */
++extern int getloadavg (double loadavg[], int nelem);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getloadavg
++# define getloadavg(l,n) \
++ (GL_LINK_WARNING ("getloadavg is not portable - " \
++ "use gnulib module getloadavg for portability"), \
++ getloadavg (l, n))
++#endif
++
++
++#if @GNULIB_GETSUBOPT@
++/* Assuming *OPTIONP is a comma separated list of elements of the form
++ "token" or "token=value", getsubopt parses the first of these elements.
++ If the first element refers to a "token" that is member of the given
++ NULL-terminated array of tokens:
++ - It replaces the comma with a NUL byte, updates *OPTIONP to point past
++ the first option and the comma, sets *VALUEP to the value of the
++ element (or NULL if it doesn't contain an "=" sign),
++ - It returns the index of the "token" in the given array of tokens.
++ Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
++ For more details see the POSIX:2001 specification.
++ http://www.opengroup.org/susv3xsh/getsubopt.html */
++# if !@HAVE_GETSUBOPT@
++extern int getsubopt (char **optionp, char *const *tokens, char **valuep);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getsubopt
++# define getsubopt(o,t,v) \
++ (GL_LINK_WARNING ("getsubopt is unportable - " \
++ "use gnulib module getsubopt for portability"), \
++ getsubopt (o, t, v))
++#endif
++
++
++#if @GNULIB_MKDTEMP@
++# if !@HAVE_MKDTEMP@
++/* Create a unique temporary directory from TEMPLATE.
++ The last six characters of TEMPLATE must be "XXXXXX";
++ they are replaced with a string that makes the directory name unique.
++ Returns TEMPLATE, or a null pointer if it cannot get a unique name.
++ The directory is created mode 700. */
++extern char * mkdtemp (char * /*template*/);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef mkdtemp
++# define mkdtemp(t) \
++ (GL_LINK_WARNING ("mkdtemp is unportable - " \
++ "use gnulib module mkdtemp for portability"), \
++ mkdtemp (t))
++#endif
++
++
++#if @GNULIB_MKSTEMP@
++# if @REPLACE_MKSTEMP@
++/* Create a unique temporary file from TEMPLATE.
++ The last six characters of TEMPLATE must be "XXXXXX";
++ they are replaced with a string that makes the file name unique.
++ The file is then created, ensuring it didn't exist before.
++ The file is created read-write (mask at least 0600 & ~umask), but it may be
++ world-readable and world-writable (mask 0666 & ~umask), depending on the
++ implementation.
++ Returns the open file descriptor if successful, otherwise -1 and errno
++ set. */
++# define mkstemp rpl_mkstemp
++extern int mkstemp (char * /*template*/);
++# else
++/* On MacOS X 10.3, only <unistd.h> declares mkstemp. */
++# include <unistd.h>
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef mkstemp
++# define mkstemp(t) \
++ (GL_LINK_WARNING ("mkstemp is unportable - " \
++ "use gnulib module mkstemp for portability"), \
++ mkstemp (t))
++#endif
++
++
++#if @GNULIB_PUTENV@
++# if @REPLACE_PUTENV@
++# undef putenv
++# define putenv rpl_putenv
++extern int putenv (char *string);
++# endif
++#endif
++
++
++#if @GNULIB_RAND48@
++# if !@HAVE_RAND48@
++
++struct drand48_data
++ {
++ unsigned short int __x[3]; /* Current state. */
++ unsigned short int __old_x[3]; /* Old state. */
++ unsigned short int __c; /* Additive const. in congruential formula. */
++ unsigned short int __init; /* Flag for initializing. */
++ unsigned long long int __a; /* Factor in congruential formula. */
++ };
++
++double drand48 (void);
++int drand48_r (struct drand48_data *buffer, double *result);
++double erand48 ( unsigned short int xsubi[3]);
++int erand48_r (unsigned short int xsubi[3], struct drand48_data *buffer, double *result);
++long int jrand48 (unsigned short int xsubi[3]);
++int jrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer, long int *result);
++void lcong48 (unsigned short int param[7]);
++int lcong48_r (unsigned short int param[7], struct drand48_data *buffer);
++long int lrand48 ();
++int lrand48_r (struct drand48_data *buffer, long int *result);
++long int mrand48 ();
++int mrand48_r (struct drand48_data *buffer, long int *result);
++long int nrand48 (unsigned short int xsubi[3]);
++int nrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer, long int *result);
++unsigned short int *seed48 (unsigned short int seed16v[3]);
++int seed48_r (unsigned short int seed16v[3], struct drand48_data *buffer);
++void srand48 (long seedval);
++int srand48_r (long int seedval, struct drand48_data *buffer);
++
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef drand48
++# define drand48() \
++ (GL_LINK_WARNING ("drand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ drand48 ())
++# undef drand48_r
++# define drand48_r(b,r) \
++ (GL_LINK_WARNING ("drand48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ drand48_r (b,r))
++# undef erand48
++# define erand48(a) \
++ (GL_LINK_WARNING ("erand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ erand48 (a))
++# undef erand48_r
++# define erand48_r(a,b,r) \
++ (GL_LINK_WARNING ("erand48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ erand48_r (a,b,r))
++# undef jrand48
++# define jrand48(a) \
++ (GL_LINK_WARNING ("jrand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ jrand48 (a))
++# undef jrand48_r
++# define jrand48_r(a,b,r) \
++ (GL_LINK_WARNING ("drand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ jrand48_r (a,b,r))
++# undef lcong48
++# define lcong48(p) \
++ (GL_LINK_WARNING ("lcong48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ lcong48 (p))
++# undef lcong48_r
++# define lcong48_r(p,b) \
++ (GL_LINK_WARNING ("lcong48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ lcong48_r (p,b))
++# undef lrand48
++# define lrand48() \
++ (GL_LINK_WARNING ("lrand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ lrand48 ())
++# undef lrand48_r
++# define lrand48_r(b,r) \
++ (GL_LINK_WARNING ("lrand48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ lrand48_r (b,r))
++# undef mrand48
++# define mrand48() \
++ (GL_LINK_WARNING ("mrand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ mrand48 ())
++# undef mrand48_r
++# define mrand48_r(b,r) \
++ (GL_LINK_WARNING ("mrand48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ mrand48_r (b,r))
++# undef nrand48
++# define nrand48(a) \
++ (GL_LINK_WARNING ("nrand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ nrand48 (a,))
++# undef nrand48_r
++# define nrand48_r(a,b,r) \
++ (GL_LINK_WARNING ("nrand48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ nrand48_r (a,b,r))
++# undef seed48
++# define seed48(s) \
++ (GL_LINK_WARNING ("seed48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ seed48 (s))
++# undef seed48_r
++# define seed48_r(s,b) \
++ (GL_LINK_WARNING ("seed48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ seed48_r (s,b))
++# undef srand48
++# define srand48(s) \
++ (GL_LINK_WARNING ("srand48 is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ srand48 (s))
++# undef srand48_r
++# define srand48_r(s,b) \
++ (GL_LINK_WARNING ("srand48_r is unportable - " \
++ "use gnulib module rand48 for portability"), \
++ srand48_r (s,b))
++#endif
++
++
++#if @GNULIB_RANDOM_R@
++# if !@HAVE_RANDOM_R@
++
++# ifndef RAND_MAX
++# define RAND_MAX 2147483647
++# endif
++
++int srandom_r (unsigned int seed, struct random_data *rand_state);
++int initstate_r (unsigned int seed, char *buf, size_t buf_size,
++ struct random_data *rand_state);
++int setstate_r (char *arg_state, struct random_data *rand_state);
++int random_r (struct random_data *buf, int32_t *result);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef random_r
++# define random_r(b,r) \
++ (GL_LINK_WARNING ("random_r is unportable - " \
++ "use gnulib module random_r for portability"), \
++ random_r (b,r))
++# undef initstate_r
++# define initstate_r(s,b,sz,r) \
++ (GL_LINK_WARNING ("initstate_r is unportable - " \
++ "use gnulib module random_r for portability"), \
++ initstate_r (s,b,sz,r))
++# undef srandom_r
++# define srandom_r(s,r) \
++ (GL_LINK_WARNING ("srandom_r is unportable - " \
++ "use gnulib module random_r for portability"), \
++ srandom_r (s,r))
++# undef setstate_r
++# define setstate_r(a,r) \
++ (GL_LINK_WARNING ("setstate_r is unportable - " \
++ "use gnulib module random_r for portability"), \
++ setstate_r (a,r))
++#endif
++
++
++#if @GNULIB_RPMATCH@
++# if !@HAVE_RPMATCH@
++/* Test a user response to a question.
++ Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */
++extern int rpmatch (const char *response);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef rpmatch
++# define rpmatch(r) \
++ (GL_LINK_WARNING ("rpmatch is unportable - " \
++ "use gnulib module rpmatch for portability"), \
++ rpmatch (r))
++#endif
++
++
++#if @GNULIB_SETENV@
++# if !@HAVE_SETENV@
++/* Set NAME to VALUE in the environment.
++ If REPLACE is nonzero, overwrite an existing value. */
++extern int setenv (const char *name, const char *value, int replace);
++# endif
++#endif
++
++
++#if @GNULIB_UNSETENV@
++# if @HAVE_UNSETENV@
++# if @VOID_UNSETENV@
++/* On some systems, unsetenv() returns void.
++ This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */
++# define unsetenv(name) ((unsetenv)(name), 0)
++# endif
++# else
++/* Remove the variable NAME from the environment. */
++extern int unsetenv (const char *name);
++# endif
++#endif
++
++
++#if @GNULIB_STRTOD@
++# if @REPLACE_STRTOD@
++# define strtod rpl_strtod
++# endif
++# if !@HAVE_STRTOD@ || @REPLACE_STRTOD@
++ /* Parse a double from STRING, updating ENDP if appropriate. */
++extern double strtod (const char *str, char **endp);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef strtod
++# define strtod(s, e) \
++ (GL_LINK_WARNING ("strtod is unportable - " \
++ "use gnulib module strtod for portability"), \
++ strtod (s, e))
++#endif
++
++
++#if @GNULIB_STRTOLL@
++# if !@HAVE_STRTOLL@
++/* Parse a signed integer whose textual representation starts at STRING.
++ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
++ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
++ "0x").
++ If ENDPTR is not NULL, the address of the first byte after the integer is
++ stored in *ENDPTR.
++ Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
++ to ERANGE. */
++extern long long strtoll (const char *string, char **endptr, int base);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef strtoll
++# define strtoll(s,e,b) \
++ (GL_LINK_WARNING ("strtoll is unportable - " \
++ "use gnulib module strtoll for portability"), \
++ strtoll (s, e, b))
++#endif
++
++
++#if @GNULIB_STRTOULL@
++# if !@HAVE_STRTOULL@
++/* Parse an unsigned integer whose textual representation starts at STRING.
++ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
++ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
++ "0x").
++ If ENDPTR is not NULL, the address of the first byte after the integer is
++ stored in *ENDPTR.
++ Upon overflow, the return value is ULLONG_MAX, and errno is set to
++ ERANGE. */
++extern unsigned long long strtoull (const char *string, char **endptr, int base);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef strtoull
++# define strtoull(s,e,b) \
++ (GL_LINK_WARNING ("strtoull is unportable - " \
++ "use gnulib module strtoull for portability"), \
++ strtoull (s, e, b))
++#endif
++
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _GL_STDLIB_H */
++#endif /* _GL_STDLIB_H */
++#endif
+diff -urN popt-for-windows/lib/strdup.c popt-for-windows-gnulib/lib/strdup.c
+--- popt-for-windows/lib/strdup.c 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/strdup.c 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,55 @@
++/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004, 2006, 2007 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. */
++
++#ifndef _LIBC
++# include <config.h>
++#endif
++
++/* Get specification. */
++#include <string.h>
++
++#include <stdlib.h>
++
++#undef __strdup
++#ifdef _LIBC
++# undef strdup
++#endif
++
++#ifndef weak_alias
++# define __strdup strdup
++#endif
++
++/* Duplicate S, returning an identical malloc'd string. */
++char *
++__strdup (const char *s)
++{
++ size_t len = strlen (s) + 1;
++ void *new = malloc (len);
++
++ if (new == NULL)
++ return NULL;
++
++ return (char *) memcpy (new, s, len);
++}
++#ifdef libc_hidden_def
++libc_hidden_def (__strdup)
++#endif
++#ifdef weak_alias
++weak_alias (__strdup, strdup)
++#endif
+diff -urN popt-for-windows/lib/string.in.h popt-for-windows-gnulib/lib/string.in.h
+--- popt-for-windows/lib/string.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/string.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,605 @@
++/* 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
++
++#if __GNUC__ >= 3
++@PRAGMA_SYSTEM_HEADER@
++#endif
++
++/* 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
++
++/* Find the first occurrence of C in S. More efficient than
++ memchr(S,C,N), at the expense of undefined behavior if C does not
++ occur within N bytes. */
++#if @GNULIB_RAWMEMCHR@
++# if ! @HAVE_RAWMEMCHR@
++extern void *rawmemchr (void const *__s, int __c_in)
++ __attribute__ ((__pure__));
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef rawmemchr
++# define rawmemchr(a,b) \
++ (GL_LINK_WARNING ("rawmemchr is unportable - " \
++ "use gnulib module rawmemchr for portability"), \
++ rawmemchr (a, b))
++#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 @REPLACE_STRDUP@
++# undef strdup
++# define strdup rpl_strdup
++# endif
++# if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_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
++
++#if @GNULIB_STRVERSCMP@
++# if !@HAVE_STRVERSCMP@
++extern int strverscmp (const char *, const char *);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef strverscmp
++# define strverscmp(a, b) \
++ (GL_LINK_WARNING ("strverscmp is unportable - " \
++ "use gnulib module strverscmp for portability"), \
++ strverscmp (a, b))
++#endif
++
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _GL_STRING_H */
++#endif /* _GL_STRING_H */
+diff -urN popt-for-windows/lib/sys_stat.in.h popt-for-windows-gnulib/lib/sys_stat.in.h
+--- popt-for-windows/lib/sys_stat.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/sys_stat.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,339 @@
++/* Provide a more complete sys/stat header file.
++ Copyright (C) 2005-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. */
++
++/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */
++
++/* This file is supposed to be used on platforms where <sys/stat.h> is
++ incomplete. It is intended to provide definitions and prototypes
++ needed by an application. Start with what the system provides. */
++
++#if __GNUC__ >= 3
++@PRAGMA_SYSTEM_HEADER@
++#endif
++
++#if defined __need_system_sys_stat_h
++/* Special invocation convention. */
++
++#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
++
++#else
++/* Normal invocation convention. */
++
++#ifndef _GL_SYS_STAT_H
++
++/* The include_next requires a split double-inclusion guard. */
++#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
++
++#ifndef _GL_SYS_STAT_H
++#define _GL_SYS_STAT_H
++
++/* The definition of GL_LINK_WARNING is copied here. */
++
++/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
++ headers that may declare mkdir(). */
++#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
++# include <io.h>
++#endif
++
++#ifndef S_IFMT
++# define S_IFMT 0170000
++#endif
++
++#if STAT_MACROS_BROKEN
++# undef S_ISBLK
++# undef S_ISCHR
++# undef S_ISDIR
++# undef S_ISFIFO
++# undef S_ISLNK
++# undef S_ISNAM
++# undef S_ISMPB
++# undef S_ISMPC
++# undef S_ISNWK
++# undef S_ISREG
++# undef S_ISSOCK
++#endif
++
++#ifndef S_ISBLK
++# ifdef S_IFBLK
++# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
++# else
++# define S_ISBLK(m) 0
++# endif
++#endif
++
++#ifndef S_ISCHR
++# ifdef S_IFCHR
++# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
++# else
++# define S_ISCHR(m) 0
++# endif
++#endif
++
++#ifndef S_ISDIR
++# ifdef S_IFDIR
++# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
++# else
++# define S_ISDIR(m) 0
++# endif
++#endif
++
++#ifndef S_ISDOOR /* Solaris 2.5 and up */
++# define S_ISDOOR(m) 0
++#endif
++
++#ifndef S_ISFIFO
++# ifdef S_IFIFO
++# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
++# else
++# define S_ISFIFO(m) 0
++# endif
++#endif
++
++#ifndef S_ISLNK
++# ifdef S_IFLNK
++# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
++# else
++# define S_ISLNK(m) 0
++# endif
++#endif
++
++#ifndef S_ISMPB /* V7 */
++# ifdef S_IFMPB
++# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
++# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
++# else
++# define S_ISMPB(m) 0
++# define S_ISMPC(m) 0
++# endif
++#endif
++
++#ifndef S_ISNAM /* Xenix */
++# ifdef S_IFNAM
++# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
++# else
++# define S_ISNAM(m) 0
++# endif
++#endif
++
++#ifndef S_ISNWK /* HP/UX */
++# ifdef S_IFNWK
++# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
++# else
++# define S_ISNWK(m) 0
++# endif
++#endif
++
++#ifndef S_ISPORT /* Solaris 10 and up */
++# define S_ISPORT(m) 0
++#endif
++
++#ifndef S_ISREG
++# ifdef S_IFREG
++# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
++# else
++# define S_ISREG(m) 0
++# endif
++#endif
++
++#ifndef S_ISSOCK
++# ifdef S_IFSOCK
++# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
++# else
++# define S_ISSOCK(m) 0
++# endif
++#endif
++
++
++#ifndef S_TYPEISMQ
++# define S_TYPEISMQ(p) 0
++#endif
++
++#ifndef S_TYPEISTMO
++# define S_TYPEISTMO(p) 0
++#endif
++
++
++#ifndef S_TYPEISSEM
++# ifdef S_INSEM
++# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
++# else
++# define S_TYPEISSEM(p) 0
++# endif
++#endif
++
++#ifndef S_TYPEISSHM
++# ifdef S_INSHD
++# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
++# else
++# define S_TYPEISSHM(p) 0
++# endif
++#endif
++
++/* high performance ("contiguous data") */
++#ifndef S_ISCTG
++# define S_ISCTG(p) 0
++#endif
++
++/* Cray DMF (data migration facility): off line, with data */
++#ifndef S_ISOFD
++# define S_ISOFD(p) 0
++#endif
++
++/* Cray DMF (data migration facility): off line, with no data */
++#ifndef S_ISOFL
++# define S_ISOFL(p) 0
++#endif
++
++/* 4.4BSD whiteout */
++#ifndef S_ISWHT
++# define S_ISWHT(m) 0
++#endif
++
++/* If any of the following are undefined,
++ define them to their de facto standard values. */
++#if !S_ISUID
++# define S_ISUID 04000
++#endif
++#if !S_ISGID
++# define S_ISGID 02000
++#endif
++
++/* S_ISVTX is a common extension to POSIX. */
++#ifndef S_ISVTX
++# define S_ISVTX 01000
++#endif
++
++#if !S_IRUSR && S_IREAD
++# define S_IRUSR S_IREAD
++#endif
++#if !S_IRUSR
++# define S_IRUSR 00400
++#endif
++#if !S_IRGRP
++# define S_IRGRP (S_IRUSR >> 3)
++#endif
++#if !S_IROTH
++# define S_IROTH (S_IRUSR >> 6)
++#endif
++
++#if !S_IWUSR && S_IWRITE
++# define S_IWUSR S_IWRITE
++#endif
++#if !S_IWUSR
++# define S_IWUSR 00200
++#endif
++#if !S_IWGRP
++# define S_IWGRP (S_IWUSR >> 3)
++#endif
++#if !S_IWOTH
++# define S_IWOTH (S_IWUSR >> 6)
++#endif
++
++#if !S_IXUSR && S_IEXEC
++# define S_IXUSR S_IEXEC
++#endif
++#if !S_IXUSR
++# define S_IXUSR 00100
++#endif
++#if !S_IXGRP
++# define S_IXGRP (S_IXUSR >> 3)
++#endif
++#if !S_IXOTH
++# define S_IXOTH (S_IXUSR >> 6)
++#endif
++
++#if !S_IRWXU
++# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
++#endif
++#if !S_IRWXG
++# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
++#endif
++#if !S_IRWXO
++# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
++#endif
++
++/* S_IXUGO is a common extension to POSIX. */
++#if !S_IXUGO
++# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
++#endif
++
++#ifndef S_IRWXUGO
++# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
++#endif
++
++/* mingw does not support symlinks, therefore it does not have lstat. But
++ without links, stat does just fine. */
++#if ! @HAVE_LSTAT@
++# define lstat stat
++#endif
++#if @GNULIB_LSTAT@ && @REPLACE_LSTAT@
++# undef lstat
++# define lstat rpl_lstat
++extern int rpl_lstat (const char *name, struct stat *buf);
++#endif
++
++
++#if @REPLACE_MKDIR@
++# undef mkdir
++# define mkdir rpl_mkdir
++extern int mkdir (char const *name, mode_t mode);
++#else
++/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
++ Additionally, it declares _mkdir (and depending on compile flags, an
++ alias mkdir), only in the nonstandard <io.h>, which is included above. */
++# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
++
++static inline int
++rpl_mkdir (char const *name, mode_t mode)
++{
++ return _mkdir (name);
++}
++
++# define mkdir rpl_mkdir
++# endif
++#endif
++
++
++/* Declare BSD extensions. */
++
++#if @GNULIB_LCHMOD@
++/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
++ denotes a symbolic link. */
++# if !@HAVE_LCHMOD@
++/* The lchmod replacement follows symbolic links. Callers should take
++ this into account; lchmod should be applied only to arguments that
++ are known to not be symbolic links. On hosts that lack lchmod,
++ this can lead to race conditions between the check and the
++ invocation of lchmod, but we know of no workarounds that are
++ reliable in general. You might try requesting support for lchmod
++ from your operating system supplier. */
++# define lchmod chmod
++# endif
++# if 0 /* assume already declared */
++extern int lchmod (const char *filename, mode_t mode);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef lchmod
++# define lchmod(f,m) \
++ (GL_LINK_WARNING ("lchmod is unportable - " \
++ "use gnulib module lchmod for portability"), \
++ lchmod (f, m))
++#endif
++
++#endif /* _GL_SYS_STAT_H */
++#endif /* _GL_SYS_STAT_H */
++#endif
+diff -urN popt-for-windows/lib/unistd.in.h popt-for-windows-gnulib/lib/unistd.in.h
+--- popt-for-windows/lib/unistd.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/unistd.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,501 @@
++/* Substitute for and wrapper around <unistd.h>.
++ Copyright (C) 2003-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_UNISTD_H
++
++#if __GNUC__ >= 3
++@PRAGMA_SYSTEM_HEADER@
++#endif
++
++/* The include_next requires a split double-inclusion guard. */
++#if @HAVE_UNISTD_H@
++# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
++#endif
++
++#ifndef _GL_UNISTD_H
++#define _GL_UNISTD_H
++
++/* mingw doesn't define the SEEK_* macros in <unistd.h>. */
++#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
++# include <stdio.h>
++#endif
++
++/* mingw fails to declare _exit in <unistd.h>. */
++#include <stdlib.h>
++
++#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
++/* Get ssize_t. */
++# include <sys/types.h>
++#endif
++
++/* The definition of GL_LINK_WARNING is copied here. */
++
++
++/* Declare overridden functions. */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#if @GNULIB_CHOWN@
++# if @REPLACE_CHOWN@
++# ifndef REPLACE_CHOWN
++# define REPLACE_CHOWN 1
++# endif
++# if REPLACE_CHOWN
++/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
++ to GID (if GID is not -1). Follow symbolic links.
++ Return 0 if successful, otherwise -1 and errno set.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/chown.html>. */
++# define chown rpl_chown
++extern int chown (const char *file, uid_t uid, gid_t gid);
++# endif
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef chown
++# define chown(f,u,g) \
++ (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \
++ "doesn't treat a uid or gid of -1 on some systems - " \
++ "use gnulib module chown for portability"), \
++ chown (f, u, g))
++#endif
++
++
++#if @GNULIB_CLOSE@
++# if @REPLACE_CLOSE@
++/* Automatically included by modules that need a replacement for close. */
++# undef close
++# define close rpl_close
++extern int close (int);
++# endif
++#elif @UNISTD_H_HAVE_WINSOCK2_H@
++# undef close
++# define close close_used_without_requesting_gnulib_module_close
++#elif defined GNULIB_POSIXCHECK
++# undef close
++# define close(f) \
++ (GL_LINK_WARNING ("close does not portably work on sockets - " \
++ "use gnulib module close for portability"), \
++ close (f))
++#endif
++
++
++#if @GNULIB_DUP2@
++# if !@HAVE_DUP2@
++/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if
++ NEWFD = OLDFD, otherwise close NEWFD first if it is open.
++ Return 0 if successful, otherwise -1 and errno set.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/dup2.html>. */
++extern int dup2 (int oldfd, int newfd);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef dup2
++# define dup2(o,n) \
++ (GL_LINK_WARNING ("dup2 is unportable - " \
++ "use gnulib module dup2 for portability"), \
++ dup2 (o, n))
++#endif
++
++
++#if @GNULIB_ENVIRON@
++# if !@HAVE_DECL_ENVIRON@
++/* Set of environment variables and values. An array of strings of the form
++ "VARIABLE=VALUE", terminated with a NULL. */
++# if defined __APPLE__ && defined __MACH__
++# include <crt_externs.h>
++# define environ (*_NSGetEnviron ())
++# else
++extern char **environ;
++# endif
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef environ
++# define environ \
++ (GL_LINK_WARNING ("environ is unportable - " \
++ "use gnulib module environ for portability"), \
++ environ)
++#endif
++
++
++#if @GNULIB_EUIDACCESS@
++# if !@HAVE_EUIDACCESS@
++/* Like access(), except that is uses the effective user id and group id of
++ the current process. */
++extern int euidaccess (const char *filename, int mode);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef euidaccess
++# define euidaccess(f,m) \
++ (GL_LINK_WARNING ("euidaccess is unportable - " \
++ "use gnulib module euidaccess for portability"), \
++ euidaccess (f, m))
++#endif
++
++
++#if @GNULIB_FCHDIR@
++# if @REPLACE_FCHDIR@
++
++/* Change the process' current working directory to the directory on which
++ the given file descriptor is open.
++ Return 0 if successful, otherwise -1 and errno set.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/fchdir.html>. */
++extern int fchdir (int /*fd*/);
++
++# define dup rpl_dup
++extern int dup (int);
++# define dup2 rpl_dup2
++extern int dup2 (int, int);
++
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef fchdir
++# define fchdir(f) \
++ (GL_LINK_WARNING ("fchdir is unportable - " \
++ "use gnulib module fchdir for portability"), \
++ fchdir (f))
++#endif
++
++
++#if @GNULIB_FSYNC@
++/* Synchronize changes to a file.
++ Return 0 if successful, otherwise -1 and errno set.
++ See POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/fsync.html>. */
++# if !@HAVE_FSYNC@
++extern int fsync (int fd);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef fsync
++# define fsync(fd) \
++ (GL_LINK_WARNING ("fsync is unportable - " \
++ "use gnulib module fsync for portability"), \
++ fsync (fd))
++#endif
++
++
++#if @GNULIB_FTRUNCATE@
++# if !@HAVE_FTRUNCATE@
++/* Change the size of the file to which FD is opened to become equal to LENGTH.
++ Return 0 if successful, otherwise -1 and errno set.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/ftruncate.html>. */
++extern int ftruncate (int fd, off_t length);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef ftruncate
++# define ftruncate(f,l) \
++ (GL_LINK_WARNING ("ftruncate is unportable - " \
++ "use gnulib module ftruncate for portability"), \
++ ftruncate (f, l))
++#endif
++
++
++#if @GNULIB_GETCWD@
++/* Include the headers that might declare getcwd so that they will not
++ cause confusion if included after this file. */
++# include <stdlib.h>
++# if @REPLACE_GETCWD@
++/* Get the name of the current working directory, and put it in SIZE bytes
++ of BUF.
++ Return BUF if successful, or NULL if the directory couldn't be determined
++ or SIZE was too small.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/getcwd.html>.
++ Additionally, the gnulib module 'getcwd' guarantees the following GNU
++ extension: If BUF is NULL, an array is allocated with 'malloc'; the array
++ is SIZE bytes long, unless SIZE == 0, in which case it is as big as
++ necessary. */
++# define getcwd rpl_getcwd
++extern char * getcwd (char *buf, size_t size);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getcwd
++# define getcwd(b,s) \
++ (GL_LINK_WARNING ("getcwd is unportable - " \
++ "use gnulib module getcwd for portability"), \
++ getcwd (b, s))
++#endif
++
++
++#if @GNULIB_GETDOMAINNAME@
++/* Return the NIS domain name of the machine.
++ WARNING! The NIS domain name is unrelated to the fully qualified host name
++ of the machine. It is also unrelated to email addresses.
++ WARNING! The NIS domain name is usually the empty string or "(none)" when
++ not using NIS.
++
++ Put up to LEN bytes of the NIS domain name into NAME.
++ Null terminate it if the name is shorter than LEN.
++ If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
++ Return 0 if successful, otherwise set errno and return -1. */
++# if !@HAVE_GETDOMAINNAME@
++extern int getdomainname(char *name, size_t len);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getdomainname
++# define getdomainname(n,l) \
++ (GL_LINK_WARNING ("getdomainname is unportable - " \
++ "use gnulib module getdomainname for portability"), \
++ getdomainname (n, l))
++#endif
++
++
++#if @GNULIB_GETDTABLESIZE@
++# if !@HAVE_GETDTABLESIZE@
++/* Return the maximum number of file descriptors in the current process. */
++extern int getdtablesize (void);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getdtablesize
++# define getdtablesize() \
++ (GL_LINK_WARNING ("getdtablesize is unportable - " \
++ "use gnulib module getdtablesize for portability"), \
++ getdtablesize ())
++#endif
++
++
++#if @GNULIB_GETHOSTNAME@
++/* Return the standard host name of the machine.
++ WARNING! The host name may or may not be fully qualified.
++
++ Put up to LEN bytes of the host name into NAME.
++ Null terminate it if the name is shorter than LEN.
++ If the host name is longer than LEN, set errno = EINVAL and return -1.
++ Return 0 if successful, otherwise set errno and return -1. */
++# if !@HAVE_GETHOSTNAME@
++extern int gethostname(char *name, size_t len);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef gethostname
++# define gethostname(n,l) \
++ (GL_LINK_WARNING ("gethostname is unportable - " \
++ "use gnulib module gethostname for portability"), \
++ gethostname (n, l))
++#endif
++
++
++#if @GNULIB_GETLOGIN_R@
++/* Copies the user's login name to NAME.
++ The array pointed to by NAME has room for SIZE bytes.
++
++ Returns 0 if successful. Upon error, an error number is returned, or -1 in
++ the case that the login name cannot be found but no specific error is
++ provided (this case is hopefully rare but is left open by the POSIX spec).
++
++ See <http://www.opengroup.org/susv3xsh/getlogin.html>.
++ */
++# if !@HAVE_DECL_GETLOGIN_R@
++# include <stddef.h>
++extern int getlogin_r (char *name, size_t size);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getlogin_r
++# define getlogin_r(n,s) \
++ (GL_LINK_WARNING ("getlogin_r is unportable - " \
++ "use gnulib module getlogin_r for portability"), \
++ getlogin_r (n, s))
++#endif
++
++
++#if @GNULIB_GETPAGESIZE@
++# if @REPLACE_GETPAGESIZE@
++# define getpagesize rpl_getpagesize
++extern int getpagesize (void);
++# elif !@HAVE_GETPAGESIZE@
++/* This is for POSIX systems. */
++# if !defined getpagesize && defined _SC_PAGESIZE
++# if ! (defined __VMS && __VMS_VER < 70000000)
++# define getpagesize() sysconf (_SC_PAGESIZE)
++# endif
++# endif
++/* This is for older VMS. */
++# if !defined getpagesize && defined __VMS
++# ifdef __ALPHA
++# define getpagesize() 8192
++# else
++# define getpagesize() 512
++# endif
++# endif
++/* This is for BeOS. */
++# if !defined getpagesize && @HAVE_OS_H@
++# include <OS.h>
++# if defined B_PAGE_SIZE
++# define getpagesize() B_PAGE_SIZE
++# endif
++# endif
++/* This is for AmigaOS4.0. */
++# if !defined getpagesize && defined __amigaos4__
++# define getpagesize() 2048
++# endif
++/* This is for older Unix systems. */
++# if !defined getpagesize && @HAVE_SYS_PARAM_H@
++# include <sys/param.h>
++# ifdef EXEC_PAGESIZE
++# define getpagesize() EXEC_PAGESIZE
++# else
++# ifdef NBPG
++# ifndef CLSIZE
++# define CLSIZE 1
++# endif
++# define getpagesize() (NBPG * CLSIZE)
++# else
++# ifdef NBPC
++# define getpagesize() NBPC
++# endif
++# endif
++# endif
++# endif
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getpagesize
++# define getpagesize() \
++ (GL_LINK_WARNING ("getpagesize is unportable - " \
++ "use gnulib module getpagesize for portability"), \
++ getpagesize ())
++#endif
++
++
++#if @GNULIB_GETUSERSHELL@
++# if !@HAVE_GETUSERSHELL@
++/* Return the next valid login shell on the system, or NULL when the end of
++ the list has been reached. */
++extern char *getusershell (void);
++/* Rewind to pointer that is advanced at each getusershell() call. */
++extern void setusershell (void);
++/* Free the pointer that is advanced at each getusershell() call and
++ associated resources. */
++extern void endusershell (void);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef getusershell
++# define getusershell() \
++ (GL_LINK_WARNING ("getusershell is unportable - " \
++ "use gnulib module getusershell for portability"), \
++ getusershell ())
++# undef setusershell
++# define setusershell() \
++ (GL_LINK_WARNING ("setusershell is unportable - " \
++ "use gnulib module getusershell for portability"), \
++ setusershell ())
++# undef endusershell
++# define endusershell() \
++ (GL_LINK_WARNING ("endusershell is unportable - " \
++ "use gnulib module getusershell for portability"), \
++ endusershell ())
++#endif
++
++
++#if @GNULIB_LCHOWN@
++# if @REPLACE_LCHOWN@
++/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
++ to GID (if GID is not -1). Do not follow symbolic links.
++ Return 0 if successful, otherwise -1 and errno set.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/lchown.html>. */
++# define lchown rpl_lchown
++extern int lchown (char const *file, uid_t owner, gid_t group);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef lchown
++# define lchown(f,u,g) \
++ (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \
++ "systems - use gnulib module lchown for portability"), \
++ lchown (f, u, g))
++#endif
++
++
++#if @GNULIB_LSEEK@
++# if @REPLACE_LSEEK@
++/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
++ Return the new offset if successful, otherwise -1 and errno set.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/lseek.html>. */
++# define lseek rpl_lseek
++ extern off_t lseek (int fd, off_t offset, int whence);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef lseek
++# define lseek(f,o,w) \
++ (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \
++ "systems - use gnulib module lseek for portability"), \
++ lseek (f, o, w))
++#endif
++
++
++#if @GNULIB_READLINK@
++/* Read the contents of the symbolic link FILE and place the first BUFSIZE
++ bytes of it into BUF. Return the number of bytes placed into BUF if
++ successful, otherwise -1 and errno set.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/readlink.html>. */
++# if !@HAVE_READLINK@
++# include <stddef.h>
++extern int readlink (const char *file, char *buf, size_t bufsize);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef readlink
++# define readlink(f,b,s) \
++ (GL_LINK_WARNING ("readlink is unportable - " \
++ "use gnulib module readlink for portability"), \
++ readlink (f, b, s))
++#endif
++
++
++#if @GNULIB_SLEEP@
++/* Pause the execution of the current thread for N seconds.
++ Returns the number of seconds left to sleep.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/sleep.html>. */
++# if !@HAVE_SLEEP@
++extern unsigned int sleep (unsigned int n);
++# endif
++#elif defined GNULIB_POSIXCHECK
++# undef sleep
++# define sleep(n) \
++ (GL_LINK_WARNING ("sleep is unportable - " \
++ "use gnulib module sleep for portability"), \
++ sleep (n))
++#endif
++
++
++#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
++/* Write up to COUNT bytes starting at BUF to file descriptor FD.
++ See the POSIX:2001 specification
++ <http://www.opengroup.org/susv3xsh/write.html>. */
++# undef write
++# define write rpl_write
++extern ssize_t write (int fd, const void *buf, size_t count);
++#endif
++
++
++#ifdef FCHDIR_REPLACEMENT
++/* gnulib internal function. */
++extern void _gl_unregister_fd (int fd);
++#endif
++
++
++#ifdef __cplusplus
++}
++#endif
++
++
++#endif /* _GL_UNISTD_H */
++#endif /* _GL_UNISTD_H */
+diff -urN popt-for-windows/lib/wchar.in.h popt-for-windows-gnulib/lib/wchar.in.h
+--- popt-for-windows/lib/wchar.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/wchar.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,101 @@
++/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
++
++ Copyright (C) 2007-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. */
++
++/* 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().
++ */
++
++#if __GNUC__ >= 3
++@PRAGMA_SYSTEM_HEADER@
++#endif
++
++#ifdef __need_mbstate_t
++/* Special invocation convention inside uClibc header files. */
++
++#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
++
++#else
++/* Normal invocation convention. */
++
++#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
++
++
++/* Define wint_t. (Also done in wctype.in.h.) */
++#if !@HAVE_WINT_T@ && !defined wint_t
++# define wint_t int
++#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 */
++#endif
+diff -urN popt-for-windows/lib/wctype.in.h popt-for-windows-gnulib/lib/wctype.in.h
+--- popt-for-windows/lib/wctype.in.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/lib/wctype.in.h 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,181 @@
++/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
++
++ Copyright (C) 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 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 Bruno Haible and Paul Eggert. */
++
++/*
++ * ISO C 99 <wctype.h> for platforms that lack it.
++ * <http://www.opengroup.org/susv3xbd/wctype.h.html>
++ *
++ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
++ * wctrans_t, and wctype_t are not yet implemented.
++ */
++
++#ifndef _GL_WCTYPE_H
++
++#if __GNUC__ >= 3
++@PRAGMA_SYSTEM_HEADER@
++#endif
++
++#if @HAVE_WINT_T@
++/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.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 <wchar.h>
++#endif
++
++/* Include the original <wctype.h> if it exists.
++ BeOS 5 has the functions but no <wctype.h>. */
++/* The include_next requires a split double-inclusion guard. */
++#if @HAVE_WCTYPE_H@
++# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
++#endif
++
++#ifndef _GL_WCTYPE_H
++#define _GL_WCTYPE_H
++
++/* Define wint_t. (Also done in wchar.in.h.) */
++#if !@HAVE_WINT_T@ && !defined wint_t
++# define wint_t int
++#endif
++
++/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
++ Linux libc5 has <wctype.h> and the functions but they are broken.
++ Assume all 12 functions are implemented the same way, or not at all. */
++#if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
++
++/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
++ undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
++ refer to system functions like _iswctype that are not in the
++ standard C library. Rather than try to get ancient buggy
++ implementations like this to work, just disable them. */
++# undef iswalnum
++# undef iswalpha
++# undef iswblank
++# undef iswcntrl
++# undef iswdigit
++# undef iswgraph
++# undef iswlower
++# undef iswprint
++# undef iswpunct
++# undef iswspace
++# undef iswupper
++# undef iswxdigit
++
++/* Linux libc5 has <wctype.h> and the functions but they are broken. */
++# if @REPLACE_ISWCNTRL@
++# define iswalnum rpl_iswalnum
++# define iswalpha rpl_iswalpha
++# define iswblank rpl_iswblank
++# define iswcntrl rpl_iswcntrl
++# define iswdigit rpl_iswdigit
++# define iswgraph rpl_iswgraph
++# define iswlower rpl_iswlower
++# define iswprint rpl_iswprint
++# define iswpunct rpl_iswpunct
++# define iswspace rpl_iswspace
++# define iswupper rpl_iswupper
++# define iswxdigit rpl_iswxdigit
++# endif
++
++static inline int
++iswalnum (wint_t wc)
++{
++ return ((wc >= '0' && wc <= '9')
++ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
++}
++
++static inline int
++iswalpha (wint_t wc)
++{
++ return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
++}
++
++static inline int
++iswblank (wint_t wc)
++{
++ return wc == ' ' || wc == '\t';
++}
++
++static inline int
++iswcntrl (wint_t wc)
++{
++ return (wc & ~0x1f) == 0 || wc == 0x7f;
++}
++
++static inline int
++iswdigit (wint_t wc)
++{
++ return wc >= '0' && wc <= '9';
++}
++
++static inline int
++iswgraph (wint_t wc)
++{
++ return wc >= '!' && wc <= '~';
++}
++
++static inline int
++iswlower (wint_t wc)
++{
++ return wc >= 'a' && wc <= 'z';
++}
++
++static inline int
++iswprint (wint_t wc)
++{
++ return wc >= ' ' && wc <= '~';
++}
++
++static inline int
++iswpunct (wint_t wc)
++{
++ return (wc >= '!' && wc <= '~'
++ && !((wc >= '0' && wc <= '9')
++ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
++}
++
++static inline int
++iswspace (wint_t wc)
++{
++ return (wc == ' ' || wc == '\t'
++ || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
++}
++
++static inline int
++iswupper (wint_t wc)
++{
++ return wc >= 'A' && wc <= 'Z';
++}
++
++static inline int
++iswxdigit (wint_t wc)
++{
++ return ((wc >= '0' && wc <= '9')
++ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
++}
++
++# endif /* ! HAVE_ISWCNTRL */
++
++#endif /* _GL_WCTYPE_H */
++#endif /* _GL_WCTYPE_H */
+diff -urN popt-for-windows/link-warning.h popt-for-windows-gnulib/link-warning.h
+--- popt-for-windows/link-warning.h 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/link-warning.h 2008-10-25 15:17:05.000000000 +0100
+@@ -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
+diff -urN popt-for-windows/m4/alloca.m4 popt-for-windows-gnulib/m4/alloca.m4
+--- popt-for-windows/m4/alloca.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/alloca.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -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], [:])
+diff -urN popt-for-windows/m4/.cvsignore popt-for-windows-gnulib/m4/.cvsignore
+--- popt-for-windows/m4/.cvsignore 2008-02-11 17:06:13.000000000 +0000
++++ popt-for-windows-gnulib/m4/.cvsignore 2008-10-25 15:17:06.000000000 +0100
+@@ -1 +1,26 @@
+ *.m4
++alloca.m4
++d-type.m4
++dirent_h.m4
++dirfd.m4
++extensions.m4
++fnmatch.m4
++getlogin_r.m4
++glob.m4
++gnulib-common.m4
++gnulib-comp.m4
++gnulib-tool.m4
++include_next.m4
++malloc.m4
++mbstate_t.m4
++mempcpy.m4
++onceonly.m4
++stdbool.m4
++stdlib_h.m4
++strdup.m4
++string_h.m4
++sys_stat_h.m4
++unistd_h.m4
++wchar.m4
++wctype.m4
++wint_t.m4
+diff -urN popt-for-windows/m4/.cvsignore~ popt-for-windows-gnulib/m4/.cvsignore~
+--- popt-for-windows/m4/.cvsignore~ 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/.cvsignore~ 2008-02-11 17:06:13.000000000 +0000
+@@ -0,0 +1 @@
++*.m4
+diff -urN popt-for-windows/m4/dirent_h.m4 popt-for-windows-gnulib/m4/dirent_h.m4
+--- popt-for-windows/m4/dirent_h.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/dirent_h.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,39 @@
++# dirent_h.m4 serial 2
++dnl Copyright (C) 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 Written by Bruno Haible.
++
++AC_DEFUN([gl_DIRENT_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_DIRENT_H_DEFAULTS])
++
++ gl_CHECK_NEXT_HEADERS([dirent.h])
++])
++
++dnl Unconditionally enables the replacement of <dirent.h>.
++AC_DEFUN([gl_REPLACE_DIRENT_H],
++[
++ AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
++ DIRENT_H='dirent.h'
++])
++
++AC_DEFUN([gl_DIRENT_MODULE_INDICATOR],
++[
++ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
++ AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
++ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
++])
++
++AC_DEFUN([gl_DIRENT_H_DEFAULTS],
++[
++ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR
++ GNULIB_DIRFD=0; AC_SUBST([GNULIB_DIRFD])
++ dnl Assume proper GNU behavior unless another module says otherwise.
++ HAVE_DECL_DIRFD=1; AC_SUBST([HAVE_DECL_DIRFD])
++ DIRENT_H=''; AC_SUBST([DIRENT_H])
++])
+diff -urN popt-for-windows/m4/dirfd.m4 popt-for-windows-gnulib/m4/dirfd.m4
+--- popt-for-windows/m4/dirfd.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/dirfd.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,84 @@
++#serial 15 -*- Autoconf -*-
++
++dnl Find out how to get the file descriptor associated with an open DIR*.
++
++# Copyright (C) 2001, 2002, 2003, 2004, 2005, 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.
++
++dnl From Jim Meyering
++
++AC_DEFUN([gl_FUNC_DIRFD],
++[
++ AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
++ gl_REPLACE_DIRENT_H
++
++ dnl Persuade glibc <dirent.h> to declare dirfd().
++ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
++
++ dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57.
++ AC_REQUIRE([AC_PROG_CPP])
++ AC_REQUIRE([AC_PROG_EGREP])
++
++ AC_CHECK_FUNCS(dirfd)
++ AC_CHECK_DECLS([dirfd], , ,
++ [#include <sys/types.h>
++ #include <dirent.h>])
++ if test $ac_cv_have_decl_dirfd = no; then
++ HAVE_DECL_DIRFD=0
++ fi
++
++ AC_CACHE_CHECK([whether dirfd is a macro],
++ gl_cv_func_dirfd_macro,
++ [AC_EGREP_CPP([dirent_header_defines_dirfd], [
++#include <sys/types.h>
++#include <dirent.h>
++#ifdef dirfd
++ dirent_header_defines_dirfd
++#endif],
++ gl_cv_func_dirfd_macro=yes,
++ gl_cv_func_dirfd_macro=no)])
++
++ # Use the replacement only if we have no function, macro,
++ # or declaration with that name.
++ if test $ac_cv_func_dirfd,$ac_cv_have_decl_dirfd,$gl_cv_func_dirfd_macro \
++ = no,no,no; then
++ AC_REPLACE_FUNCS([dirfd])
++ AC_CACHE_CHECK(
++ [how to get the file descriptor associated with an open DIR*],
++ gl_cv_sys_dir_fd_member_name,
++ [
++ dirfd_save_CFLAGS=$CFLAGS
++ for ac_expr in d_fd dd_fd; do
++
++ CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr"
++ AC_TRY_COMPILE(
++ [#include <sys/types.h>
++ #include <dirent.h>],
++ [DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;],
++ dir_fd_found=yes
++ )
++ CFLAGS=$dirfd_save_CFLAGS
++ test "$dir_fd_found" = yes && break
++ done
++ test "$dir_fd_found" = yes || ac_expr=no_such_member
++
++ gl_cv_sys_dir_fd_member_name=$ac_expr
++ ]
++ )
++ if test $gl_cv_sys_dir_fd_member_name != no_such_member; then
++ AC_DEFINE_UNQUOTED(DIR_FD_MEMBER_NAME,
++ $gl_cv_sys_dir_fd_member_name,
++ [the name of the file descriptor member of DIR])
++ fi
++ AH_VERBATIM(DIR_TO_FD,
++ [#ifdef DIR_FD_MEMBER_NAME
++# define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME)
++#else
++# define DIR_TO_FD(Dir_p) -1
++#endif
++])
++ fi
++])
+diff -urN popt-for-windows/m4/d-type.m4 popt-for-windows-gnulib/m4/d-type.m4
+--- popt-for-windows/m4/d-type.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/d-type.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,35 @@
++#serial 9
++
++dnl From Jim Meyering.
++dnl
++dnl Check whether struct dirent has a member named d_type.
++dnl
++
++# Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2006 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_CHECK_TYPE_STRUCT_DIRENT_D_TYPE],
++ [AC_CACHE_CHECK([for d_type member in directory struct],
++ gl_cv_struct_dirent_d_type,
++ [AC_TRY_LINK(dnl
++ [
++#include <sys/types.h>
++#include <dirent.h>
++ ],
++ [struct dirent dp; dp.d_type = 0;],
++
++ gl_cv_struct_dirent_d_type=yes,
++ gl_cv_struct_dirent_d_type=no)
++ ]
++ )
++ if test $gl_cv_struct_dirent_d_type = yes; then
++ AC_DEFINE(HAVE_STRUCT_DIRENT_D_TYPE, 1,
++ [Define if there is a member named d_type in the struct describing
++ directory headers.])
++ fi
++ ]
++)
+diff -urN popt-for-windows/m4/extensions.m4 popt-for-windows-gnulib/m4/extensions.m4
+--- popt-for-windows/m4/extensions.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/extensions.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -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])])
+diff -urN popt-for-windows/m4/fnmatch.m4 popt-for-windows-gnulib/m4/fnmatch.m4
+--- popt-for-windows/m4/fnmatch.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/fnmatch.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,127 @@
++# Check for fnmatch - serial 2.
++
++# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 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.
++
++# Autoconf defines AC_FUNC_FNMATCH, but that is obsolescent.
++# New applications should use the macros below instead.
++
++# _AC_FUNC_FNMATCH_IF(STANDARD = GNU | POSIX, CACHE_VAR, IF-TRUE, IF-FALSE)
++# -------------------------------------------------------------------------
++# If a STANDARD compliant fnmatch is found, run IF-TRUE, otherwise
++# IF-FALSE. Use CACHE_VAR.
++AC_DEFUN([_AC_FUNC_FNMATCH_IF],
++[AC_CACHE_CHECK(
++ [for working $1 fnmatch],
++ [$2],
++ [dnl Some versions of Solaris, SCO, and the GNU C Library
++ dnl have a broken or incompatible fnmatch.
++ dnl So we run a test program. If we are cross-compiling, take no chance.
++ dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this test.
++ AC_RUN_IFELSE(
++ [AC_LANG_PROGRAM(
++ [[#include <fnmatch.h>
++ static int
++ y (char const *pattern, char const *string, int flags)
++ {
++ return fnmatch (pattern, string, flags) == 0;
++ }
++ static int
++ n (char const *pattern, char const *string, int flags)
++ {
++ return fnmatch (pattern, string, flags) == FNM_NOMATCH;
++ }
++ ]],
++ [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]";
++ char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]";
++ static char const A_1[] = { 'A' - 1, 0 };
++ static char const A01[] = { 'A' + 1, 0 };
++ static char const a_1[] = { 'a' - 1, 0 };
++ static char const a01[] = { 'a' + 1, 0 };
++ static char const bs_1[] = { '\\\\' - 1, 0 };
++ static char const bs01[] = { '\\\\' + 1, 0 };
++ return
++ !(n ("a*", "", 0)
++ && y ("a*", "abc", 0)
++ && n ("d*/*1", "d/s/1", FNM_PATHNAME)
++ && y ("a\\\\bc", "abc", 0)
++ && n ("a\\\\bc", "abc", FNM_NOESCAPE)
++ && y ("*x", ".x", 0)
++ && n ("*x", ".x", FNM_PERIOD)
++ && y (Apat, "\\\\", 0) && y (Apat, "A", 0)
++ && y (apat, "\\\\", 0) && y (apat, "a", 0)
++ && n (Apat, A_1, 0) == ('A' < '\\\\')
++ && n (apat, a_1, 0) == ('a' < '\\\\')
++ && y (Apat, A01, 0) == ('A' < '\\\\')
++ && y (apat, a01, 0) == ('a' < '\\\\')
++ && y (Apat, bs_1, 0) == ('A' < '\\\\')
++ && y (apat, bs_1, 0) == ('a' < '\\\\')
++ && n (Apat, bs01, 0) == ('A' < '\\\\')
++ && n (apat, bs01, 0) == ('a' < '\\\\')
++ && ]m4_if([$1], [GNU],
++ [y ("xxXX", "xXxX", FNM_CASEFOLD)
++ && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)
++ && n ("d*/*1", "d/s/1", FNM_FILE_NAME)
++ && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)
++ && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)
++ && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)],
++ 1))[;]])],
++ [$2=yes],
++ [$2=no],
++ [$2=cross])])
++AS_IF([test $$2 = yes], [$3], [$4])
++])# _AC_FUNC_FNMATCH_IF
++
++
++# _AC_LIBOBJ_FNMATCH
++# ------------------
++# Prepare the replacement of fnmatch.
++AC_DEFUN([_AC_LIBOBJ_FNMATCH],
++[AC_REQUIRE([AC_FUNC_ALLOCA])dnl
++AC_REQUIRE([AC_TYPE_MBSTATE_T])dnl
++AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>])
++AC_CHECK_FUNCS_ONCE([btowc isblank iswctype mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy])
++AC_CHECK_HEADERS_ONCE([wctype.h])
++AC_LIBOBJ([fnmatch])
++FNMATCH_H=fnmatch.h
++])# _AC_LIBOBJ_FNMATCH
++
++
++AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
++[
++ FNMATCH_H=
++ _AC_FUNC_FNMATCH_IF([POSIX], [ac_cv_func_fnmatch_posix],
++ [rm -f lib/fnmatch.h],
++ [_AC_LIBOBJ_FNMATCH])
++ if test $ac_cv_func_fnmatch_posix != yes; then
++ dnl We must choose a different name for our function, since on ELF systems
++ dnl a broken fnmatch() in libc.so would override our fnmatch() if it is
++ dnl compiled into a shared library.
++ AC_DEFINE([fnmatch], [posix_fnmatch],
++ [Define to a replacement function name for fnmatch().])
++ fi
++ AC_SUBST([FNMATCH_H])
++])
++
++
++AC_DEFUN([gl_FUNC_FNMATCH_GNU],
++[
++ dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc.
++ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
++
++ FNMATCH_H=
++ _AC_FUNC_FNMATCH_IF([GNU], [ac_cv_func_fnmatch_gnu],
++ [rm -f lib/fnmatch.h],
++ [_AC_LIBOBJ_FNMATCH])
++ if test $ac_cv_func_fnmatch_gnu != yes; then
++ dnl We must choose a different name for our function, since on ELF systems
++ dnl a broken fnmatch() in libc.so would override our fnmatch() if it is
++ dnl compiled into a shared library.
++ AC_DEFINE([fnmatch], [gnu_fnmatch],
++ [Define to a replacement function name for fnmatch().])
++ fi
++ AC_SUBST([FNMATCH_H])
++])
+diff -urN popt-for-windows/m4/getlogin_r.m4 popt-for-windows-gnulib/m4/getlogin_r.m4
+--- popt-for-windows/m4/getlogin_r.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/getlogin_r.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,33 @@
++#serial 4
++
++# Copyright (C) 2005, 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.
++
++dnl From Derek Price
++dnl
++dnl Provide getlogin_r when the system lacks it.
++dnl
++
++AC_DEFUN([gl_GETLOGIN_R],
++[
++ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
++ AC_CHECK_FUNCS_ONCE([getlogin_r])
++ if test $ac_cv_func_getlogin_r = no; then
++ AC_LIBOBJ([getlogin_r])
++ gl_PREREQ_GETLOGIN_R
++ if test $ac_cv_have_decl_getlogin_r = yes; then
++ HAVE_DECL_GETLOGIN_R=1
++ else
++ HAVE_DECL_GETLOGIN_R=0
++ fi
++ fi
++])
++
++AC_DEFUN([gl_PREREQ_GETLOGIN_R],
++[
++ AC_CHECK_DECLS_ONCE([getlogin])
++ AC_CHECK_DECLS_ONCE([getlogin_r])
++])
+diff -urN popt-for-windows/m4/glob.m4 popt-for-windows-gnulib/m4/glob.m4
+--- popt-for-windows/m4/glob.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/glob.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,86 @@
++# glob.m4 serial 10
++dnl Copyright (C) 2005-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.
++
++# The glob module assumes you want GNU glob, with glob_pattern_p etc,
++# rather than vanilla POSIX glob. This means your code should
++# always include <glob.h> for the glob prototypes.
++
++AC_DEFUN([gl_GLOB_SUBSTITUTE],
++[
++ gl_PREREQ_GLOB
++
++ GLOB_H=glob.h
++ AC_LIBOBJ([glob])
++ AC_SUBST([GLOB_H])
++])
++
++AC_DEFUN([gl_GLOB],
++[ GLOB_H=
++ AC_CHECK_HEADERS([glob.h], [], [GLOB_H=glob.h])
++
++ if test -z "$GLOB_H"; then
++ AC_CACHE_CHECK([for GNU glob interface version 1],
++ [gl_cv_gnu_glob_interface_version_1],
++[ AC_COMPILE_IFELSE(
++[[#include <gnu-versions.h>
++char a[_GNU_GLOB_INTERFACE_VERSION == 1 ? 1 : -1];]],
++ [gl_cv_gnu_glob_interface_version_1=yes],
++ [gl_cv_gnu_glob_interface_version_1=no])])
++
++ if test "$gl_cv_gnu_glob_interface_version_1" = "no"; then
++ GLOB_H=glob.h
++ fi
++ fi
++
++ if test -z "$GLOB_H"; then
++ AC_CACHE_CHECK([whether glob lists broken symlinks],
++ [gl_cv_glob_lists_symlinks],
++[ if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then
++ gl_cv_glob_lists_symlinks=maybe
++ else
++ # If we can't make a symlink, then we cannot test this issue. Be
++ # pessimistic about this.
++ gl_cv_glob_lists_symlinks=no
++ fi
++
++ if test $gl_cv_glob_lists_symlinks = maybe; then
++ AC_RUN_IFELSE(
++AC_LANG_PROGRAM(
++[[#include <stddef.h>
++#include <glob.h>]],
++[[glob_t found;
++if (glob ("conf*-globtest", 0, NULL, &found) == GLOB_NOMATCH) return 1;]]),
++ [gl_cv_glob_lists_symlinks=yes],
++ [gl_cv_glob_lists_symlinks=no], [gl_cv_glob_lists_symlinks=no])
++ fi])
++
++ if test $gl_cv_glob_lists_symlinks = no; then
++ GLOB_H=glob.h
++ fi
++ fi
++
++ rm -f conf$$-globtest
++
++ if test -n "$GLOB_H"; then
++ gl_GLOB_SUBSTITUTE
++ fi
++])
++
++# Prerequisites of lib/glob.*.
++AC_DEFUN([gl_PREREQ_GLOB],
++[
++ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])dnl
++ AC_REQUIRE([AC_C_RESTRICT])dnl
++ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])dnl
++ AC_CHECK_HEADERS_ONCE([sys/cdefs.h unistd.h])dnl
++ if test $ac_cv_header_sys_cdefs_h = yes; then
++ HAVE_SYS_CDEFS_H=1
++ else
++ HAVE_SYS_CDEFS_H=0
++ fi
++ AC_SUBST([HAVE_SYS_CDEFS_H])
++ AC_CHECK_FUNCS_ONCE([fstatat getlogin_r getpwnam_r])dnl
++])
+diff -urN popt-for-windows/m4/gnulib-common.m4 popt-for-windows-gnulib/m4/gnulib-common.m4
+--- popt-for-windows/m4/gnulib-common.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/gnulib-common.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,101 @@
++# gnulib-common.m4 serial 6
++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])
++ AH_VERBATIM([unused_parameter],
++[/* Define as a marker that can be attached to function parameter declarations
++ for parameters that are not used. This helps to reduce warnings, such as
++ from GCC -Wunused-parameter. */
++#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
++# define _UNUSED_PARAMETER_ __attribute__ ((__unused__))
++#else
++# define _UNUSED_PARAMETER_
++#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
++])
+diff -urN popt-for-windows/m4/gnulib-comp.m4 popt-for-windows-gnulib/m4/gnulib-comp.m4
+--- popt-for-windows/m4/gnulib-comp.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/gnulib-comp.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,245 @@
++# 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.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], [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_CHECK_TYPE_STRUCT_DIRENT_D_TYPE
++ gl_DIRENT_H
++ gl_FUNC_DIRFD
++ gl_DIRENT_MODULE_INDICATOR([dirfd])
++ # No macro. You should also use one of fnmatch-posix or fnmatch-gnu.
++ gl_GETLOGIN_R
++ gl_UNISTD_MODULE_INDICATOR([getlogin_r])
++ gl_GLOB
++ gl_FUNC_MALLOC_POSIX
++ gl_STDLIB_MODULE_INDICATOR([malloc-posix])
++ gl_FUNC_MEMPCPY
++ gl_STRING_MODULE_INDICATOR([mempcpy])
++ AM_STDBOOL_H
++ gl_STDLIB_H
++ gl_FUNC_STRDUP
++ gl_STRING_MODULE_INDICATOR([strdup])
++ gl_HEADER_STRING_H
++ gl_HEADER_SYS_STAT_H
++ AC_PROG_MKDIR_P
++ gl_UNISTD_H
++ gl_WCHAR_H
++ gl_WCTYPE_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/dirent.in.h
++ lib/dirfd.c
++ lib/dummy.c
++ lib/fnmatch.c
++ lib/fnmatch.in.h
++ lib/fnmatch_loop.c
++ lib/getlogin_r.c
++ lib/glob-libc.h
++ lib/glob.c
++ lib/glob.in.h
++ lib/malloc.c
++ lib/mempcpy.c
++ lib/stdbool.in.h
++ lib/stdlib.in.h
++ lib/strdup.c
++ lib/string.in.h
++ lib/sys_stat.in.h
++ lib/unistd.in.h
++ lib/wchar.in.h
++ lib/wctype.in.h
++ m4/alloca.m4
++ m4/d-type.m4
++ m4/dirent_h.m4
++ m4/dirfd.m4
++ m4/extensions.m4
++ m4/fnmatch.m4
++ m4/getlogin_r.m4
++ m4/glob.m4
++ m4/gnulib-common.m4
++ m4/include_next.m4
++ m4/malloc.m4
++ m4/mbstate_t.m4
++ m4/mempcpy.m4
++ m4/onceonly.m4
++ m4/stdbool.m4
++ m4/stdlib_h.m4
++ m4/strdup.m4
++ m4/string_h.m4
++ m4/sys_stat_h.m4
++ m4/unistd_h.m4
++ m4/wchar.m4
++ m4/wctype.m4
++ m4/wint_t.m4
++])
+diff -urN popt-for-windows/m4/gnulib-tool.m4 popt-for-windows-gnulib/m4/gnulib-tool.m4
+--- popt-for-windows/m4/gnulib-tool.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/gnulib-tool.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -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], [])
+diff -urN popt-for-windows/m4/include_next.m4 popt-for-windows-gnulib/m4/include_next.m4
+--- popt-for-windows/m4/include_next.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/include_next.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,128 @@
++# include_next.m4 serial 8
++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.
++
++dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
++dnl
++dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
++dnl 'include' otherwise.
++dnl
++dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
++dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
++dnl '#pragma GCC system_header' has the same effect as if the file was found
++dnl through the include search path specified with '-isystem' options (as
++dnl opposed to the search path specified with '-I' options). Namely, gcc
++dnl does not warn about some things, and on some systems (Solaris and Interix)
++dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
++dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
++dnl of plain '__STDC__'.
++
++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
++ dnl The include of <stdio.h> is because IBM C 9.0 on AIX 6.1 supports
++ dnl include_next when used as first preprocessor directive in a file,
++ dnl but not when preceded by another include directive.
++ cat <<EOF > conftestd1/conftest.h
++#define DEFINED_IN_CONFTESTD1
++#include <stdio.h>
++#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
++ ])
++ PRAGMA_SYSTEM_HEADER=
++ if test $gl_cv_have_include_next = yes; then
++ INCLUDE_NEXT=include_next
++ if test -n "$GCC"; then
++ PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
++ fi
++ else
++ INCLUDE_NEXT=include
++ fi
++ AC_SUBST([INCLUDE_NEXT])
++ AC_SUBST([PRAGMA_SYSTEM_HEADER])
++])
++
++# 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])])
++])
+diff -urN popt-for-windows/m4/malloc.m4 popt-for-windows-gnulib/m4/malloc.m4
+--- popt-for-windows/m4/malloc.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/malloc.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,41 @@
++# malloc.m4 serial 8
++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_FUNC_MALLOC_POSIX
++# --------------------
++# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
++# fails), and replace malloc if it is not.
++AC_DEFUN([gl_FUNC_MALLOC_POSIX],
++[
++ AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
++ if test $gl_cv_func_malloc_posix = yes; then
++ HAVE_MALLOC_POSIX=1
++ AC_DEFINE([HAVE_MALLOC_POSIX], 1,
++ [Define if the 'malloc' function is POSIX compliant.])
++ else
++ AC_LIBOBJ([malloc])
++ HAVE_MALLOC_POSIX=0
++ fi
++ AC_SUBST([HAVE_MALLOC_POSIX])
++])
++
++# Test whether malloc, realloc, calloc are POSIX compliant,
++# Set gl_cv_func_malloc_posix to yes or no accordingly.
++AC_DEFUN([gl_CHECK_MALLOC_POSIX],
++[
++ AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
++ [gl_cv_func_malloc_posix],
++ [
++ dnl It is too dangerous to try to allocate a large amount of memory:
++ dnl some systems go to their knees when you do that. So assume that
++ dnl all Unix implementations of the function are POSIX compliant.
++ AC_TRY_COMPILE([],
++ [#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
++ choke me
++ #endif
++ ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no])
++ ])
++])
+diff -urN popt-for-windows/m4/mbstate_t.m4 popt-for-windows-gnulib/m4/mbstate_t.m4
+--- popt-for-windows/m4/mbstate_t.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/mbstate_t.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,30 @@
++# mbstate_t.m4 serial 10
++dnl Copyright (C) 2000-2002, 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.
++
++# From Paul Eggert.
++
++# BeOS 5 has <wchar.h> but does not define mbstate_t,
++# so you can't declare an object of that type.
++# Check for this incompatibility with Standard C.
++
++# AC_TYPE_MBSTATE_T
++# -----------------
++AC_DEFUN([AC_TYPE_MBSTATE_T],
++ [AC_CACHE_CHECK([for mbstate_t], ac_cv_type_mbstate_t,
++ [AC_COMPILE_IFELSE(
++ [AC_LANG_PROGRAM(
++ [AC_INCLUDES_DEFAULT[
++# include <wchar.h>]],
++ [[mbstate_t x; return sizeof x;]])],
++ [ac_cv_type_mbstate_t=yes],
++ [ac_cv_type_mbstate_t=no])])
++ if test $ac_cv_type_mbstate_t = yes; then
++ AC_DEFINE([HAVE_MBSTATE_T], 1,
++ [Define to 1 if <wchar.h> declares mbstate_t.])
++ else
++ AC_DEFINE([mbstate_t], int,
++ [Define to a type if <wchar.h> does not define.])
++ fi])
+diff -urN popt-for-windows/m4/mempcpy.m4 popt-for-windows-gnulib/m4/mempcpy.m4
+--- popt-for-windows/m4/mempcpy.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/mempcpy.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,26 @@
++# mempcpy.m4 serial 9
++dnl Copyright (C) 2003, 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_MEMPCPY],
++[
++ dnl Persuade glibc <string.h> to declare mempcpy().
++ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
++
++ dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'.
++ AC_REQUIRE([AC_C_RESTRICT])
++
++ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
++ AC_REPLACE_FUNCS(mempcpy)
++ if test $ac_cv_func_mempcpy = no; then
++ HAVE_MEMPCPY=0
++ gl_PREREQ_MEMPCPY
++ fi
++])
++
++# Prerequisites of lib/mempcpy.c.
++AC_DEFUN([gl_PREREQ_MEMPCPY], [
++ :
++])
+diff -urN popt-for-windows/m4/onceonly.m4 popt-for-windows-gnulib/m4/onceonly.m4
+--- popt-for-windows/m4/onceonly.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/onceonly.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,90 @@
++# onceonly.m4 serial 6
++dnl Copyright (C) 2002-2003, 2005-2006, 2008 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 The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE
++dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to
++dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested
++dnl headers at once, thus reducing the size of 'configure'. It is known to work
++dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%.
++
++dnl Autoconf version 2.59 plus gnulib is required; this file is not needed
++dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of
++dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first
++dnl argument!
++AC_PREREQ([2.59])
++
++# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
++# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
++AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
++ :
++ m4_foreach_w([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], [
++ :
++ m4_foreach_w([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], [
++ :
++ m4_foreach_w([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]))
++ ])
++])
+diff -urN popt-for-windows/m4/stdbool.m4 popt-for-windows-gnulib/m4/stdbool.m4
+--- popt-for-windows/m4/stdbool.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/stdbool.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,115 @@
++# Check for stdbool.h that conforms to C99.
++
++dnl Copyright (C) 2002-2006 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.
++
++# Prepare for substituting <stdbool.h> if it is not supported.
++
++AC_DEFUN([AM_STDBOOL_H],
++[
++ AC_REQUIRE([AC_HEADER_STDBOOL])
++
++ # Define two additional variables used in the Makefile substitution.
++
++ if test "$ac_cv_header_stdbool_h" = yes; then
++ STDBOOL_H=''
++ else
++ STDBOOL_H='stdbool.h'
++ fi
++ AC_SUBST([STDBOOL_H])
++
++ if test "$ac_cv_type__Bool" = yes; then
++ HAVE__BOOL=1
++ else
++ HAVE__BOOL=0
++ fi
++ AC_SUBST([HAVE__BOOL])
++])
++
++# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
++AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
++
++# This macro is only needed in autoconf <= 2.59. Newer versions of autoconf
++# have this macro built-in.
++
++AC_DEFUN([AC_HEADER_STDBOOL],
++ [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
++ [ac_cv_header_stdbool_h],
++ [AC_TRY_COMPILE(
++ [
++ #include <stdbool.h>
++ #ifndef bool
++ "error: bool is not defined"
++ #endif
++ #ifndef false
++ "error: false is not defined"
++ #endif
++ #if false
++ "error: false is not 0"
++ #endif
++ #ifndef true
++ "error: true is not defined"
++ #endif
++ #if true != 1
++ "error: true is not 1"
++ #endif
++ #ifndef __bool_true_false_are_defined
++ "error: __bool_true_false_are_defined is not defined"
++ #endif
++
++ struct s { _Bool s: 1; _Bool t; } s;
++
++ char a[true == 1 ? 1 : -1];
++ char b[false == 0 ? 1 : -1];
++ char c[__bool_true_false_are_defined == 1 ? 1 : -1];
++ char d[(bool) 0.5 == true ? 1 : -1];
++ bool e = &s;
++ char f[(_Bool) 0.0 == false ? 1 : -1];
++ char g[true];
++ char h[sizeof (_Bool)];
++ char i[sizeof s.t];
++ enum { j = false, k = true, l = false * true, m = true * 256 };
++ _Bool n[m];
++ char o[sizeof n == m * sizeof n[0] ? 1 : -1];
++ char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
++ #if defined __xlc__ || defined __GNUC__
++ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
++ reported by James Lemley on 2005-10-05; see
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
++ This test is not quite right, since xlc is allowed to
++ reject this program, as the initializer for xlcbug is
++ not one of the forms that C requires support for.
++ However, doing the test right would require a run-time
++ test, and that would make cross-compilation harder.
++ Let us hope that IBM fixes the xlc bug, and also adds
++ support for this kind of constant expression. In the
++ meantime, this test will reject xlc, which is OK, since
++ our stdbool.h substitute should suffice. We also test
++ this with GCC, where it should work, to detect more
++ quickly whether someone messes up the test in the
++ future. */
++ char digs[] = "0123456789";
++ int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
++ #endif
++ /* Catch a bug in an HP-UX C compiler. See
++ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
++ */
++ _Bool q = true;
++ _Bool *pq = &q;
++ ],
++ [
++ *pq |= q;
++ *pq |= ! q;
++ /* Refer to every declared value, to avoid compiler optimizations. */
++ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
++ + !m + !n + !o + !p + !q + !pq);
++ ],
++ [ac_cv_header_stdbool_h=yes],
++ [ac_cv_header_stdbool_h=no])])
++ AC_CHECK_TYPES([_Bool])
++ if test $ac_cv_header_stdbool_h = yes; then
++ AC_DEFINE(HAVE_STDBOOL_H, 1, [Define to 1 if stdbool.h conforms to C99.])
++ fi])
+diff -urN popt-for-windows/m4/stdlib_h.m4 popt-for-windows-gnulib/m4/stdlib_h.m4
+--- popt-for-windows/m4/stdlib_h.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/stdlib_h.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,60 @@
++# stdlib_h.m4 serial 11
++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.
++
++AC_DEFUN([gl_STDLIB_H],
++[
++ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
++ gl_CHECK_NEXT_HEADERS([stdlib.h])
++])
++
++AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
++[
++ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
++ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
++ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
++])
++
++AC_DEFUN([gl_STDLIB_H_DEFAULTS],
++[
++ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
++ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
++ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
++ GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
++ GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
++ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
++ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
++ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
++ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
++ GNULIB_RAND48=0; AC_SUBST([GNULIB_RAND48])
++ GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
++ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
++ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
++ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
++ GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
++ GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
++ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
++ dnl Assume proper GNU behavior unless another module says otherwise.
++ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
++ HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX])
++ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
++ HAVE_MALLOC_POSIX=1; AC_SUBST([HAVE_MALLOC_POSIX])
++ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
++ HAVE_REALLOC_POSIX=1; AC_SUBST([HAVE_REALLOC_POSIX])
++ HAVE_RAND48=1; AC_SUBST([HAVE_RAND48])
++ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
++ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
++ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
++ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
++ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
++ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
++ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
++ HAVE_UNSETENV=1; AC_SUBST([HAVE_UNSETENV])
++ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
++ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
++ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
++ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
++ VOID_UNSETENV=0; AC_SUBST([VOID_UNSETENV])
++])
+diff -urN popt-for-windows/m4/strdup.m4 popt-for-windows-gnulib/m4/strdup.m4
+--- popt-for-windows/m4/strdup.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/strdup.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,38 @@
++# strdup.m4 serial 10
++
++dnl Copyright (C) 2002-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_FUNC_STRDUP],
++[
++ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
++ AC_REPLACE_FUNCS(strdup)
++ AC_CHECK_DECLS_ONCE(strdup)
++ if test $ac_cv_have_decl_strdup = no; then
++ HAVE_DECL_STRDUP=0
++ fi
++ gl_PREREQ_STRDUP
++])
++
++AC_DEFUN([gl_FUNC_STRDUP_POSIX],
++[
++ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
++ AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
++ if test $gl_cv_func_malloc_posix != yes; then
++ REPLACE_STRDUP=1
++ AC_LIBOBJ([strdup])
++ else
++ AC_REPLACE_FUNCS(strdup)
++ fi
++ AC_CHECK_DECLS_ONCE(strdup)
++ if test $ac_cv_have_decl_strdup = no; then
++ HAVE_DECL_STRDUP=0
++ fi
++ gl_PREREQ_STRDUP
++])
++
++# Prerequisites of lib/strdup.c.
++AC_DEFUN([gl_PREREQ_STRDUP], [:])
+diff -urN popt-for-windows/m4/string_h.m4 popt-for-windows-gnulib/m4/string_h.m4
+--- popt-for-windows/m4/string_h.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/string_h.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,92 @@
++# 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 6
++
++# 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_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR])
++ 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])
++ GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP])
++ 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_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR])
++ 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])
++ HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP])
++ REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM])
++ REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP])
++ REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR])
++ REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR])
++ REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR])
++ REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL])
++])
+diff -urN popt-for-windows/m4/sys_stat_h.m4 popt-for-windows-gnulib/m4/sys_stat_h.m4
+--- popt-for-windows/m4/sys_stat_h.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/sys_stat_h.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,59 @@
++# sys_stat_h.m4 serial 10 -*- Autoconf -*-
++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 Eric Blake.
++dnl Test whether <sys/stat.h> contains lstat and mkdir or must be substituted.
++
++AC_DEFUN([gl_HEADER_SYS_STAT_H],
++[
++ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
++
++ dnl Check for lstat. Systems that lack it (mingw) also lack symlinks, so
++ dnl stat is a good replacement.
++ AC_CHECK_FUNCS_ONCE([lstat])
++ if test $ac_cv_func_lstat = yes; then
++ HAVE_LSTAT=1
++ else
++ HAVE_LSTAT=0
++ fi
++ AC_SUBST([HAVE_LSTAT])
++
++ dnl For the mkdir substitute.
++ AC_REQUIRE([AC_C_INLINE])
++
++ dnl Check for broken stat macros.
++ AC_REQUIRE([AC_HEADER_STAT])
++
++ gl_CHECK_NEXT_HEADERS([sys/stat.h])
++ SYS_STAT_H='sys/stat.h'
++ AC_SUBST([SYS_STAT_H])
++
++ dnl Define types that are supposed to be defined in <sys/types.h> or
++ dnl <sys/stat.h>.
++ AC_CHECK_TYPE([nlink_t], [],
++ [AC_DEFINE([nlink_t], [int],
++ [Define to the type of st_nlink in struct stat, or a supertype.])],
++ [#include <sys/types.h>
++ #include <sys/stat.h>])
++
++]) # gl_HEADER_SYS_STAT_H
++
++AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
++[
++ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
++ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
++ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
++])
++
++AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
++[
++ GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD])
++ GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT])
++ dnl Assume proper GNU behavior unless another module says otherwise.
++ HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD])
++ REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT])
++ REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR])
++])
+diff -urN popt-for-windows/m4/unistd_h.m4 popt-for-windows-gnulib/m4/unistd_h.m4
+--- popt-for-windows/m4/unistd_h.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/unistd_h.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,81 @@
++# unistd_h.m4 serial 16
++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 Written by Simon Josefsson, Bruno Haible.
++
++AC_DEFUN([gl_UNISTD_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_UNISTD_H_DEFAULTS])
++
++ gl_CHECK_NEXT_HEADERS([unistd.h])
++
++ AC_CHECK_HEADERS_ONCE([unistd.h])
++ if test $ac_cv_header_unistd_h = yes; then
++ HAVE_UNISTD_H=1
++ else
++ HAVE_UNISTD_H=0
++ fi
++ AC_SUBST([HAVE_UNISTD_H])
++])
++
++AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
++[
++ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
++ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
++ GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
++])
++
++AC_DEFUN([gl_UNISTD_H_DEFAULTS],
++[
++ GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN])
++ GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE])
++ GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2])
++ GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON])
++ GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS])
++ GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR])
++ GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC])
++ GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE])
++ GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD])
++ GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME])
++ GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE])
++ GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME])
++ GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R])
++ GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE])
++ GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL])
++ GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN])
++ GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK])
++ GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK])
++ GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
++ GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
++ GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE])
++ dnl Assume proper GNU behavior unless another module says otherwise.
++ HAVE_DUP2=1; AC_SUBST([HAVE_DUP2])
++ HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS])
++ HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC])
++ HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
++ HAVE_GETDOMAINNAME=1; AC_SUBST([HAVE_GETDOMAINNAME])
++ HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE])
++ HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME])
++ HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
++ HAVE_GETUSERSHELL=1; AC_SUBST([HAVE_GETUSERSHELL])
++ HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
++ HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
++ HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
++ HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
++ HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
++ HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
++ REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
++ REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE])
++ REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR])
++ REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
++ REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
++ REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
++ REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
++ REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE])
++ UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
++])
+diff -urN popt-for-windows/m4/wchar.m4 popt-for-windows-gnulib/m4/wchar.m4
+--- popt-for-windows/m4/wchar.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/wchar.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,69 @@
++dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
++
++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.
++
++dnl Written by Eric Blake.
++
++# wchar.m4 serial 6
++
++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])])
++
++ AC_REQUIRE([gt_TYPE_WINT_T])
++ if test $gt_cv_c_wint_t = yes; then
++ HAVE_WINT_T=1
++ else
++ HAVE_WINT_T=0
++ fi
++ AC_SUBST([HAVE_WINT_T])
++
++ if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != 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])
++])
++
++dnl Unconditionally enables the replacement of <wchar.h>.
++AC_DEFUN([gl_REPLACE_WCHAR_H],
++[
++ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
++ WCHAR_H=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])
++])
+diff -urN popt-for-windows/m4/wctype.m4 popt-for-windows-gnulib/m4/wctype.m4
+--- popt-for-windows/m4/wctype.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/wctype.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,74 @@
++# wctype.m4 serial 2
++
++dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
++
++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 Written by Paul Eggert.
++
++AC_DEFUN([gl_WCTYPE_H],
++[
++ AC_REQUIRE([AC_PROG_CC])
++ AC_CHECK_FUNCS_ONCE([iswcntrl])
++ if test $ac_cv_func_iswcntrl = yes; then
++ HAVE_ISWCNTRL=1
++ else
++ HAVE_ISWCNTRL=0
++ fi
++ AC_SUBST([HAVE_ISWCNTRL])
++ AC_CHECK_HEADERS_ONCE([wctype.h])
++ AC_REQUIRE([AC_C_INLINE])
++
++ AC_REQUIRE([gt_TYPE_WINT_T])
++ if test $gt_cv_c_wint_t = yes; then
++ HAVE_WINT_T=1
++ else
++ HAVE_WINT_T=0
++ fi
++ AC_SUBST([HAVE_WINT_T])
++
++ WCTYPE_H=wctype.h
++ if test $ac_cv_header_wctype_h = yes; then
++ if test $ac_cv_func_iswcntrl = yes; then
++ dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
++ dnl The other functions are likely broken in the same way.
++ AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
++ [
++ AC_TRY_RUN([#include <stddef.h>
++ #include <stdio.h>
++ #include <time.h>
++ #include <wchar.h>
++ #include <wctype.h>
++ int main () { return iswprint ('x') == 0; }],
++ [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
++ [AC_TRY_COMPILE([#include <stdlib.h>
++ #if __GNU_LIBRARY__ == 1
++ Linux libc5 i18n is broken.
++ #endif], [],
++ [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no])
++ ])
++ ])
++ if test $gl_cv_func_iswcntrl_works = yes; then
++ WCTYPE_H=
++ fi
++ fi
++ dnl Compute NEXT_WCTYPE_H even if WCTYPE_H is empty,
++ dnl for the benefit of builds from non-distclean directories.
++ gl_CHECK_NEXT_HEADERS([wctype.h])
++ HAVE_WCTYPE_H=1
++ else
++ HAVE_WCTYPE_H=0
++ fi
++ AC_SUBST([HAVE_WCTYPE_H])
++ AC_SUBST([WCTYPE_H])
++
++ if test "$gl_cv_func_iswcntrl_works" = no; then
++ REPLACE_ISWCNTRL=1
++ else
++ REPLACE_ISWCNTRL=0
++ fi
++ AC_SUBST([REPLACE_ISWCNTRL])
++])
+diff -urN popt-for-windows/m4/wint_t.m4 popt-for-windows-gnulib/m4/wint_t.m4
+--- popt-for-windows/m4/wint_t.m4 1970-01-01 01:00:00.000000000 +0100
++++ popt-for-windows-gnulib/m4/wint_t.m4 2008-10-25 15:17:05.000000000 +0100
+@@ -0,0 +1,28 @@
++# wint_t.m4 serial 2 (gettext-0.17)
++dnl Copyright (C) 2003, 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 Bruno Haible.
++dnl Test whether <wchar.h> has the 'wint_t' type.
++dnl Prerequisite: AC_PROG_CC
++
++AC_DEFUN([gt_TYPE_WINT_T],
++[
++ AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
++ [AC_TRY_COMPILE([
++/* 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 <wchar.h>
++ wint_t foo = (wchar_t)'\0';], ,
++ gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
++ if test $gt_cv_c_wint_t = yes; then
++ AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
++ fi
++])